Kuaidiniao.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\utils\Express\Trackers;
  8. use Curl\Curl;
  9. use Cyy\Express\Exceptions\TrackingException;
  10. use Cyy\Express\Waybill;
  11. use Cyy\Express\Status;
  12. use Cyy\Express\Trackers\BaseTracker;
  13. use Cyy\Express\Trackers\TrackerInterface;
  14. use Cyy\Express\Trackers\TrackerTrait;
  15. class Kuaidiniao extends BaseTracker implements TrackerInterface
  16. {
  17. use TrackerTrait;
  18. public $EBusinessID;
  19. public $AppKey;
  20. public $freeApi = null;
  21. public $receive_mobile;
  22. public static function getSupportedExpresses()
  23. {
  24. return [
  25. '京东' => 'JD',
  26. '顺丰' => 'SF',
  27. '申通' => 'STO',
  28. '韵达' => 'YD',
  29. '圆通' => 'YTO',
  30. '中通' => 'ZTO',
  31. '百世' => 'HTKY',
  32. 'EMS' => 'EMS',
  33. '天天' => 'HHTT',
  34. '邮政' => 'YZPY',
  35. '宅急送' => 'ZJS',
  36. '国通' => 'GTO',
  37. '全峰' => 'QFKD',
  38. '优速' => 'UC',
  39. '中铁' => 'ZTKY',
  40. '中铁' => 'ZTWL',
  41. '亚马逊' => 'AMAZON',
  42. '城际' => 'CJKD',
  43. '德邦' => 'DBL',
  44. '汇丰' => 'HFWL',
  45. // '百世' => 'BTWL',
  46. '安捷' => 'AJ',
  47. '安能' => 'ANE',
  48. '安信达' => 'AXD',
  49. '北青小红帽' => 'BQXHM',
  50. '百福东方' => 'BFDF',
  51. 'CCES' => 'CCES',
  52. '城市100' => 'CITY100',
  53. 'COE东方' => 'COE',
  54. '长沙创一' => 'CSCY',
  55. '成都善途' => 'CDSTKY',
  56. 'D速' => 'DSWL',
  57. '大田' => 'DTWL',
  58. '快捷' => 'FAST',
  59. '联邦' => 'FEDEX',
  60. 'FEDEX' => 'FEDEX_GJ',
  61. '飞康达' => 'FKD',
  62. '广东邮政' => 'GDEMS',
  63. '共速达' => 'GSD',
  64. '高铁' => 'GTSD',
  65. '恒路' => 'HLWL',
  66. '天地华宇' => 'HOAU',
  67. '华强' => 'hq568',
  68. '华夏龙' => 'HXLWL',
  69. '好来运' => 'HYLSD',
  70. '京广' => 'JGSD',
  71. '九曳供应链' => 'JIUYE',
  72. '佳吉' => 'JJKY',
  73. '嘉里' => 'JLDT',
  74. '捷特' => 'JTKD',
  75. '急先达' => 'JXD',
  76. '晋越' => 'JYKD',
  77. '加运美' => 'JYM',
  78. '佳怡' => 'JYWL',
  79. '跨越' => 'KYWL',
  80. '龙邦' => 'LB',
  81. '联昊通' => 'LHT',
  82. '民航' => 'MHKD',
  83. '明亮' => 'MLWL',
  84. '能达' => 'NEDA',
  85. '平安达腾飞' => 'PADTF',
  86. '全晨' => 'QCKD',
  87. '全日通' => 'QRT',
  88. '如风达' => 'RFD',
  89. '赛澳递' => 'SAD',
  90. '圣安' => 'SAWL',
  91. '盛邦' => 'SBWL',
  92. '上大' => 'SDWL',
  93. '盛丰' => 'SFWL',
  94. '盛辉' => 'SHWL',
  95. '速通' => 'ST',
  96. '速腾' => 'STWL',
  97. '速尔' => 'SURE',
  98. '唐山申通' => 'TSSTO',
  99. '全一' => 'UAPEX',
  100. '万家' => 'WJWL',
  101. '万象' => 'WXWL',
  102. '新邦' => 'XBWL',
  103. '信丰' => 'XFEX',
  104. '希优特' => 'XYT',
  105. '新杰' => 'XJ',
  106. '源安达' => 'YADEX',
  107. '远成' => 'YCWL',
  108. '义达' => 'YDH',
  109. '越丰' => 'YFEX',
  110. '原飞航' => 'YFHEX',
  111. '亚风' => 'YFSD',
  112. '运通' => 'YTKD',
  113. '亿翔' => 'YXKD',
  114. '增益' => 'ZENY',
  115. '汇强' => 'ZHQKD',
  116. '众通' => 'ZTE',
  117. '中邮' => 'ZYWL',
  118. '速必达' => 'SUBIDA',
  119. '瑞丰' => 'RFEX',
  120. '快客' => 'QUICK',
  121. 'CNPEX中邮' => 'CNPEX',
  122. '鸿桥供应链' => 'HOTSCM',
  123. '海派通' => 'HPTEX',
  124. '澳邮专线' => 'AYCA',
  125. '泛捷' => 'PANEX',
  126. 'PCA Express' => 'PCA',
  127. 'UEQ Express' => 'UEQ',
  128. '程光' => 'CG',
  129. '富腾达' => 'FTD',
  130. '中通快运' => 'ZTOKY',
  131. '品骏快递' => 'PJ',
  132. '极兔' => 'JTSD',
  133. '壹米滴答' => 'YMDD',
  134. '顺心捷达' => 'SXJD'
  135. ];
  136. }
  137. public function track(Waybill $waybill)
  138. {
  139. $ShipperCode = static::getExpressCode($waybill->express);
  140. $curl = new Curl();
  141. $requestData = [
  142. 'ShipperCode' => $ShipperCode,
  143. 'LogisticCode' => $waybill->id,
  144. 'OrderCode' => $waybill->orderId,
  145. ];
  146. if($ShipperCode == 'SF'){
  147. $requestData['CustomerName'] = substr(trim($this->receive_mobile), -4);
  148. }
  149. $requestData = json_encode($requestData);
  150. // $postContent = [
  151. // 'RequestData' => urlencode($requestData),
  152. // 'EBusinessID' => $this->EBusinessID,
  153. // 'RequestType' => '1008',
  154. // 'DataSign' => base64_encode(md5($requestData . $this->AppKey)),
  155. // 'DataType' => '2',
  156. // ];
  157. // $curl->post(
  158. // 'http://api.kdniao.com/api/dist',
  159. // $postContent
  160. // );
  161. $postContent2 = [
  162. 'RequestData' => urlencode($requestData),
  163. 'EBusinessID' => $this->EBusinessID,
  164. 'RequestType' => '8001',
  165. 'DataSign' => base64_encode(md5($requestData . $this->AppKey)),
  166. 'DataType' => '2',
  167. ];
  168. if($this->freeApi){
  169. $postContent2['RequestType'] = '1002';
  170. }
  171. $curl->post(
  172. 'http://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx',
  173. $postContent2
  174. );
  175. $response = static::getJsonResponse($curl);
  176. if ($response->Success == false) {
  177. throw new TrackingException($response->Reason, $response);
  178. }
  179. $statusMap = [
  180. 2 => Status::STATUS_TRANSPORTING,
  181. 3 => Status::STATUS_DELIVERED,
  182. 4 => Status::STATUS_REJECTED,
  183. ];
  184. $waybill->status = $statusMap[intval($response->State)];
  185. foreach ($response->Traces as $trace) {
  186. $remark = isset($trace->Remark) ? $trace->Remark : '';
  187. $waybill->traces->append($trace->AcceptTime, $trace->AcceptStation, $remark);
  188. }
  189. }
  190. }