'JD', '顺丰' => 'SF', '顺丰速运' => 'SF', '申通' => 'STO', '韵达' => 'YD', '圆通' => 'YTO', '中通(ZTO)' => 'ZTO', '中通' => 'ZTO', '百世' => 'HTKY', 'EMS' => 'EMS', '天天' => 'HHTT', '邮政' => 'YZPY', '宅急送' => 'ZJS', '国通' => 'GTO', '全峰' => 'QFKD', '优速' => 'UC', '中铁' => 'ZTKY', '中铁' => 'ZTWL', '亚马逊' => 'AMAZON', '城际' => 'CJKD', '德邦' => 'DBL', '汇丰' => 'HFWL', // '百世' => 'BTWL', '安捷' => 'AJ', '安能' => 'ANE', '安信达' => 'AXD', '北青小红帽' => 'BQXHM', '百福东方' => 'BFDF', 'CCES' => 'CCES', '城市100' => 'CITY100', 'COE东方' => 'COE', '长沙创一' => 'CSCY', '成都善途' => 'CDSTKY', 'D速' => 'DSWL', '大田' => 'DTWL', '快捷' => 'FAST', '联邦' => 'FEDEX', 'FEDEX' => 'FEDEX_GJ', '飞康达' => 'FKD', '广东邮政' => 'GDEMS', '共速达' => 'GSD', '高铁' => 'GTSD', '恒路' => 'HLWL', '天地华宇' => 'HOAU', '华强' => 'hq568', '华夏龙' => 'HXLWL', '好来运' => 'HYLSD', '京广' => 'JGSD', '九曳供应链' => 'JIUYE', '佳吉' => 'JJKY', '嘉里' => 'JLDT', '捷特' => 'JTKD', '急先达' => 'JXD', '晋越' => 'JYKD', '加运美' => 'JYM', '佳怡' => 'JYWL', '跨越' => 'KYWL', '龙邦' => 'LB', '联昊通' => 'LHT', '民航' => 'MHKD', '明亮' => 'MLWL', '能达' => 'NEDA', '平安达腾飞' => 'PADTF', '全晨' => 'QCKD', '全日通' => 'QRT', '如风达' => 'RFD', '赛澳递' => 'SAD', '圣安' => 'SAWL', '盛邦' => 'SBWL', '上大' => 'SDWL', '盛丰' => 'SFWL', '盛辉' => 'SHWL', '速通' => 'ST', '速腾' => 'STWL', '速尔' => 'SURE', '唐山申通' => 'TSSTO', '全一' => 'UAPEX', '万家' => 'WJWL', '万象' => 'WXWL', '新邦' => 'XBWL', '信丰' => 'XFEX', '希优特' => 'XYT', '新杰' => 'XJ', '源安达' => 'YADEX', '远成' => 'YCWL', '义达' => 'YDH', '越丰' => 'YFEX', '原飞航' => 'YFHEX', '亚风' => 'YFSD', '运通' => 'YTKD', '亿翔' => 'YXKD', '增益' => 'ZENY', '汇强' => 'ZHQKD', '众通' => 'ZTE', '中邮' => 'ZYWL', '速必达' => 'SUBIDA', '瑞丰' => 'RFEX', '快客' => 'QUICK', 'CNPEX中邮' => 'CNPEX', '鸿桥供应链' => 'HOTSCM', '海派通' => 'HPTEX', '澳邮专线' => 'AYCA', '泛捷' => 'PANEX', 'PCA Express' => 'PCA', 'UEQ Express' => 'UEQ', '程光' => 'CG', '富腾达' => 'FTD', '中通快运' => 'ZTOKY', '品骏快递' => 'PJ', '极兔' => 'JITU', '壹米滴答' => 'YIMIDIDA', '顺心捷达' => 'SXJD' ]; $res = []; foreach ($arr as $k => $v) { $res[$k] = $v; $res[$k . '快递'] = $v; $res[$k . '快运'] = $v; $res[$k . '速递'] = $v; $res[$k . '速运'] = $v; } return $res; } public function track(Waybill $waybill) { $ShipperCode = static::getExpressCode($waybill->express); // $curl = new Curl(); // $requestData = [ // 'ShipperCode' => $ShipperCode, // 'LogisticCode' => $waybill->id, // 'OrderCode' => $waybill->orderId, // ]; if(in_array($ShipperCode, ['SF', 'ZTO'])){ $waybill->id .= ':'.substr(trim($this->receive_mobile), -4); } $res = $this->get($waybill->id, $ShipperCode); $response = json_decode($res); if($response === null){ throw new TrackingException($res); } if ($response->Success == false) { throw new TrackingException($response->Reason, $response); } $statusMap = [ -1 => 10, 0 => 9, 1 => 0, 2 => 2, 3 => 4, 4 => 6, 5 => 6, 6 => 8, ]; $waybill->status = $statusMap[intval($response->State)]; foreach ($response->Traces as $trace) { $remark = isset($trace->Remark) ? $trace->Remark : ''; $waybill->traces->append($trace->AcceptTime, $trace->AcceptStation, $remark); } } private function get($n = '', $t = ''){ $host = "https://wdexpress.market.alicloudapi.com"; $path = "/gxali"; $method = "GET"; $appcode = $this->AppCode;//开通服务后 买家中心-查看AppCode $headers = array(); array_push($headers, "Authorization:APPCODE " . $appcode); $querys = "n=780098068058&t=ZTO"; $querys = "n={$n}&t={$t}"; $bodys = ""; $url = $host . $path . "?" . $querys; $curl = curl_init(); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $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); $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); list($header, $body) = explode("\r\n\r\n", $out_put, 2); if ($httpCode == 200) { // print("正常请求计费(其他均不计费)
"); return ($body); } else { ob_start(); 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']); } $err = ob_get_contents(); ob_end_clean(); return $err; } } }