| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- <?php
- namespace App\Services;
- use App\Traits\ServiceAppAop;
- class LogisticALiYunService
- {
- use ServiceAppAop;
- public function query($logistic_number)
- {
- $host = config('api_logistic.ALiYun.prod.search.host');
- $path = config('api_logistic.ALiYun.prod.search.path');
- $headers = [
- "Authorization:APPCODE " . config('api_logistic.ALiYun.prod.app-code')
- ];
- $url = $host.$path.'?no='.$logistic_number;
- $curl = curl_init();
- curl_setopt($curl, CURLOPT_CUSTOMREQUEST, config('api_logistic.ALiYun.prod.method'));
- curl_setopt($curl, CURLOPT_URL, $url);
- curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
- curl_setopt($curl, CURLOPT_FAILONERROR, false);
- curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($curl, CURLOPT_HEADER, true);
- if (1 == strpos("$" . $host, "https://")) {
- curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
- curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
- }
- $out_put = curl_exec($curl);
- dd($out_put);
- $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
- list($header, $body) = explode("\r\n\r\n", $out_put, 2);
- if ($httpCode == 200) {
- print("正常请求计费(其他均不计费)<br>");
- print($body);
- } else {
- if ($httpCode == 400 && strpos($header, "Invalid Param Location") !== false) {
- print("参数错误");
- } elseif ($httpCode == 400 && strpos($header, "Invalid AppCode") !== false) {
- print("AppCode错误");
- } elseif ($httpCode == 400 && strpos($header, "Invalid Url") !== false) {
- print("请求的 Method、Path 或者环境错误");
- } elseif ($httpCode == 403 && strpos($header, "Unauthorized") !== false) {
- print("服务未被授权(或URL和Path不正确)");
- } elseif ($httpCode == 403 && strpos($header, "Quota Exhausted") !== false) {
- print("套餐包次数用完");
- } elseif ($httpCode == 403 && strpos($header, "Api Market Subscription quota exhausted") !== false) {
- print("套餐包次数用完,请续购套餐");
- } elseif ($httpCode == 500) {
- print("API网关错误");
- } elseif ($httpCode == 0) {
- print("URL错误");
- } else {
- print("参数名错误 或 其他错误");
- print($httpCode);
- $headers = explode("\r\n", $header);
- $headList = array();
- foreach ($headers as $head) {
- $value = explode(':', $head);
- $headList[$value[0]] = $value[1];
- }
- print($headList['x-ca-error-message']);
- }
- }
- }
- public function format($response, $logistic_number): array
- {
- $result = [];
- if (!isset($response) || ($response && $response->status != 0)) {
- return [
- 'logistic_number' => $logistic_number,
- ];
- } else {
- try {
- if ($response->result->number ?? false) $result['logistic_number'] = $response->result->number;
- } catch (\Exception $e) {
- LogService::log(LogisticYTOService::class, "AliJiSu快递信息异常", $response);
- }
- $list = $response->result->list;
- if (!empty($list) && is_array($list)) {
- $lastNativeRoute = $list[0];
- $result['status'] = $this->getStatus($response);
- if ($result['status'] == '已签收') $result['received_at'] = $lastNativeRoute->time;
- $result['transfer_status'] = $this->getTransferStatus($list);
- $result['routes_length'] = array_key_exists('transfer_status', $result) ? count($result['transfer_status']) : 0;
- } else {
- $result['status'] = null;
- $result['transfer_status'] = [];
- }
- if (!array_key_exists('status', $result)) {
- $result['status'] = null;
- $result['transfer_status'] = [];
- }
- return $result;
- }
- }
- /**
- * @param $nativeData
- * @return string
- */
- private function getStatus($nativeData): string
- {
- $status = null;
- switch ($nativeData->result->deliverystatus) {
- case '1':
- $status = '在途';
- break;
- case '2':
- $status = '派送中';
- break;
- case '3':
- $status = '已签收';
- break;
- case '4':
- $status = '派送异常';
- break;
- default:
- $status = '其他';
- }
- return $status;
- }
- /**
- * @param $nativeRoutes
- * @return array
- */
- private function getTransferStatus($nativeRoutes): array
- {
- $transferStatus = [];
- foreach ($nativeRoutes as $nativeRoute) {
- $item = [];
- $item['accept_time'] = $nativeRoute->time;
- $item['accept_address'] = $nativeRoute->status;
- $item['remark'] = "";
- $transferStatus[] = $item;
- }
- return $transferStatus;
- }
- }
|