| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 |
- <?php
- /**
- * 重庆赤晓店信息科技有限公司
- * https://www.chixiaodian.com
- * Copyright (c) 2023 赤店商城 All rights reserved.
- */
- namespace app\utils\Express\Trackers;
- use Curl\Curl;
- use Cyy\Express\Exceptions\TrackingException;
- use Cyy\Express\Waybill;
- use Cyy\Express\Status;
- use Cyy\Express\Trackers\BaseTracker;
- use Cyy\Express\Trackers\TrackerInterface;
- use Cyy\Express\Trackers\TrackerTrait;
- class Alicloud extends BaseTracker implements TrackerInterface
- {
- use TrackerTrait;
- public $AppCode;
- public $receive_mobile;
- public static function getSupportedExpresses()
- {
- $arr = [
- '京东' => '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("正常请求计费(其他均不计费)<br>");
- 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;
- }
- }
- }
|