Merge remote-tracking branch 'remotes/origin/feature/serverUrl'
Showing
1 changed file
with
128 additions
and
8 deletions
@@ -150,14 +150,16 @@ class Yohobuy | @@ -150,14 +150,16 @@ class Yohobuy | ||
150 | { | 150 | { |
151 | $isApi = false; | 151 | $isApi = false; |
152 | $isService = false; | 152 | $isService = false; |
153 | + $urlBack = $url; | ||
153 | 154 | ||
154 | if (USE_INTER_FACE_SHUNT) { | 155 | if (USE_INTER_FACE_SHUNT) { |
155 | if (strpos($url, 'api.')) { | 156 | if (strpos($url, 'api.')) { |
156 | $isApi = true; | 157 | $isApi = true; |
158 | + $url = self::_getUrl($url, $data); | ||
157 | } else if (strpos($url, 'service.')) { | 159 | } else if (strpos($url, 'service.')) { |
158 | $isService = true; | 160 | $isService = true; |
161 | + $url = self::_getUrl($url, $data); | ||
159 | } | 162 | } |
160 | - $url = self::_getUrl($url, $data); | ||
161 | } | 163 | } |
162 | 164 | ||
163 | // 销毁私钥参数 | 165 | // 销毁私钥参数 |
@@ -199,6 +201,14 @@ class Yohobuy | @@ -199,6 +201,14 @@ class Yohobuy | ||
199 | } | 201 | } |
200 | 202 | ||
201 | $result = curl_exec($ch); | 203 | $result = curl_exec($ch); |
204 | + $httpCode = curl_getinfo($ch,CURLINFO_HTTP_CODE); | ||
205 | + | ||
206 | + //如果分流执行失败,则走原来的逻辑 | ||
207 | + if (USE_INTER_FACE_SHUNT && $httpCode !== 200) { | ||
208 | + curl_close($ch); | ||
209 | + return self::_get($urlBack, $data, $cache, $returnJson, $timeout, $userAgent, $useGzip); | ||
210 | + } | ||
211 | + | ||
202 | if (!$returnJson && !empty($result)) { | 212 | if (!$returnJson && !empty($result)) { |
203 | $result = json_decode($result, true); | 213 | $result = json_decode($result, true); |
204 | } | 214 | } |
@@ -221,6 +231,63 @@ class Yohobuy | @@ -221,6 +231,63 @@ class Yohobuy | ||
221 | return $result; | 231 | return $result; |
222 | } | 232 | } |
223 | 233 | ||
234 | + private static function _get($url, $data = array(), $cache = false, $returnJson = false, $timeout = 5, $userAgent = null, $useGzip = true) | ||
235 | + { | ||
236 | + // 销毁私钥参数 | ||
237 | + if (isset($data['private_key'])) { | ||
238 | + unset($data['private_key']); | ||
239 | + } | ||
240 | + | ||
241 | + if (!empty($data)) { | ||
242 | + $url = self::httpBuildQuery($url, $data); | ||
243 | + } //echo $url; | ||
244 | + | ||
245 | + /* 开启缓存的情况 */ | ||
246 | + if ($cache && USE_CACHE) { | ||
247 | + // 先尝试获取一级缓存(master), 有数据则直接返回. | ||
248 | + $result = Cache::get($url, 'master'); | ||
249 | + if (!empty($result)) { | ||
250 | + return $result; | ||
251 | + } | ||
252 | + } | ||
253 | + | ||
254 | + | ||
255 | + $ch = curl_init($url); | ||
256 | + curl_setopt($ch, CURLOPT_HEADER, 0); | ||
257 | + curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); | ||
258 | + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); | ||
259 | + | ||
260 | + if ($useGzip) { | ||
261 | + curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); | ||
262 | + } | ||
263 | + | ||
264 | + if (!empty($userAgent)) { | ||
265 | + curl_setopt($ch, CURLOPT_USERAGENT, $userAgent); | ||
266 | + } | ||
267 | + | ||
268 | + $result = curl_exec($ch); | ||
269 | + $httpCode = curl_getinfo($ch,CURLINFO_HTTP_CODE); | ||
270 | + if (!$returnJson && !empty($result)) { | ||
271 | + $result = json_decode($result, true); | ||
272 | + } | ||
273 | + | ||
274 | + curl_close($ch); | ||
275 | + $data = array(); | ||
276 | + | ||
277 | + /* 开启缓存的情况 */ | ||
278 | + if ($cache && USE_CACHE) { | ||
279 | + // 接口调用异常时, 不害怕,从我们的二级缓存(slave)里再取数据. | ||
280 | + if (empty($result)) { | ||
281 | + $result = Cache::get($url, 'slave'); | ||
282 | + } | ||
283 | + // 接口调用成功时,这里会设置一级(master)和二级(slave)的缓存数据. | ||
284 | + else { | ||
285 | + Cache::set($url, $result, $cache); | ||
286 | + } | ||
287 | + } | ||
288 | + | ||
289 | + return $result; | ||
290 | + } | ||
224 | /** | 291 | /** |
225 | * post提交数据 | 292 | * post提交数据 |
226 | * | 293 | * |
@@ -236,14 +303,16 @@ class Yohobuy | @@ -236,14 +303,16 @@ class Yohobuy | ||
236 | { | 303 | { |
237 | $isApi = false; | 304 | $isApi = false; |
238 | $isService = false; | 305 | $isService = false; |
306 | + $urlBack = $url; | ||
239 | 307 | ||
240 | if (USE_INTER_FACE_SHUNT) { | 308 | if (USE_INTER_FACE_SHUNT) { |
241 | if (strpos($url, 'api.')) { | 309 | if (strpos($url, 'api.')) { |
242 | $isApi = true; | 310 | $isApi = true; |
311 | + $url = self::_getUrl($url, $data); | ||
243 | } else if (strpos($url, 'service.')) { | 312 | } else if (strpos($url, 'service.')) { |
244 | $isService = true; | 313 | $isService = true; |
314 | + $url = self::_getUrl($url, $data); | ||
245 | } | 315 | } |
246 | - $url = self::_getUrl($url, $data); | ||
247 | } | 316 | } |
248 | 317 | ||
249 | $ch = curl_init($url); | 318 | $ch = curl_init($url); |
@@ -282,6 +351,55 @@ class Yohobuy | @@ -282,6 +351,55 @@ class Yohobuy | ||
282 | curl_setopt($ch, CURLOPT_POSTFIELDS, $str); | 351 | curl_setopt($ch, CURLOPT_POSTFIELDS, $str); |
283 | } | 352 | } |
284 | $result = curl_exec($ch); | 353 | $result = curl_exec($ch); |
354 | + | ||
355 | + $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); | ||
356 | + //如果分流执行失败,则走原来的逻辑 | ||
357 | + if (USE_INTER_FACE_SHUNT && $httpCode !== 200) { | ||
358 | + curl_close($ch); | ||
359 | + return self::_post($urlBack, $data, $returnJson, $timeout, $header, $cookie); | ||
360 | + } | ||
361 | + | ||
362 | + if (!$returnJson && !empty($result)) { | ||
363 | + $result = json_decode($result, true); | ||
364 | + } | ||
365 | + curl_close($ch); | ||
366 | + $data = array(); | ||
367 | + | ||
368 | + return $result; | ||
369 | + } | ||
370 | + | ||
371 | + public static function _post($url, $data = array(), $returnJson = false, $timeout = 10, $header = array(), $cookie = array()) | ||
372 | + { | ||
373 | + $ch = curl_init($url); | ||
374 | + curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); | ||
375 | + | ||
376 | + if (!empty($header)) { | ||
377 | + curl_setopt($ch, CURLOPT_HTTPHEADER, $header); | ||
378 | + } else { | ||
379 | + curl_setopt($ch, CURLOPT_HEADER, 0); | ||
380 | + } | ||
381 | + if (!empty($cookie)) { | ||
382 | + $cookie_str = array(); | ||
383 | + foreach ($cookie as $key => $val) { | ||
384 | + $cookie_str[] = urlencode($key) . '=' . urlencode($val); | ||
385 | + } | ||
386 | + curl_setopt($ch, CURLOPT_COOKIE, implode(';', $cookie_str)); | ||
387 | + } | ||
388 | + curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 YOHOWEB'); | ||
389 | + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); | ||
390 | + curl_setopt($ch, CURLOPT_POST, true); | ||
391 | + | ||
392 | + // 销毁私钥参数 | ||
393 | + if (isset($data['private_key'])) { | ||
394 | + unset($data['private_key']); | ||
395 | + } | ||
396 | + if (!empty($data)) { | ||
397 | + $str = http_build_query($data, null, '&'); | ||
398 | + // 新加支持application/x-www-form-urlencoded调用方式 | ||
399 | + //curl_setopt($ch, CURLOPT_POSTFIELDS, $data); | ||
400 | + curl_setopt($ch, CURLOPT_POSTFIELDS, $str); | ||
401 | + } | ||
402 | + $result = curl_exec($ch); | ||
285 | if (!$returnJson && !empty($result)) { | 403 | if (!$returnJson && !empty($result)) { |
286 | $result = json_decode($result, true); | 404 | $result = json_decode($result, true); |
287 | } | 405 | } |
@@ -568,23 +686,25 @@ class Yohobuy | @@ -568,23 +686,25 @@ class Yohobuy | ||
568 | $mod = 0; | 686 | $mod = 0; |
569 | 687 | ||
570 | if (isset($param['uid'])) { | 688 | if (isset($param['uid'])) { |
571 | - $uid = $param['uid']; | ||
572 | - $mod = $param['uid'] % 1024; | 689 | + $uid = intval($param['uid']); |
690 | + $mod = $uid % 1024; | ||
573 | } | 691 | } |
574 | 692 | ||
575 | if ($mod > 128 || $uid === 0) { | 693 | if ($mod > 128 || $uid === 0) { |
576 | $paseUrl = parse_url($url); | 694 | $paseUrl = parse_url($url); |
577 | if (strpos($url, 'api.')) { | 695 | if (strpos($url, 'api.')) { |
578 | - $url = 'http://' . self::$interfaceShunt['awsServers']['api'] . $paseUrl['path']. '/'; | 696 | + $url = 'http://' . self::$interfaceShunt['awsServers']['api'] . rtrim($paseUrl['path'], '/') . '/'; |
579 | } else if (strpos($url, 'service.')) { | 697 | } else if (strpos($url, 'service.')) { |
580 | - $url = 'http://' . self::$interfaceShunt['awsServers']['service'] . $paseUrl['path']. '/'; | 698 | + $url = 'http://' . self::$interfaceShunt['awsServers']['service'] . rtrim($paseUrl['path'], '/') . '/'; |
581 | } | 699 | } |
582 | } else { | 700 | } else { |
583 | $paseUrl = parse_url($url); | 701 | $paseUrl = parse_url($url); |
584 | if (strpos($url, 'api.')) { | 702 | if (strpos($url, 'api.')) { |
585 | - $url = 'http://' . array_rand(self::$interfaceShunt['tencentServers']['api']) . $paseUrl['path'] . '/'; | 703 | + $num = array_rand(self::$interfaceShunt['tencentServers']['api']); |
704 | + $url = 'http://' . self::$interfaceShunt['tencentServers']['api'][$num] . rtrim($paseUrl['path'], '/') . '/'; | ||
586 | } else if (strpos($url, 'service.')) { | 705 | } else if (strpos($url, 'service.')) { |
587 | - $url = 'http://' . array_rand(self::$interfaceShunt['tencentServers']['service']) . $paseUrl['path']. '/'; | 706 | + $num = array_rand(self::$interfaceShunt['tencentServers']['service']); |
707 | + $url = 'http://' . self::$interfaceShunt['tencentServers']['service'][$num] . rtrim($paseUrl['path'], '/') . '/'; | ||
588 | } | 708 | } |
589 | } | 709 | } |
590 | 710 |
-
Please register or login to post a comment