ExpressHandler.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. <?php
  2. namespace App\Handlers;
  3. use GuzzleHttp\Client;
  4. use http\Env\Request;
  5. use Illuminate\Support\Collection;
  6. class ExpressHandler {
  7. public static function getExpressCode(){
  8. $arr=[
  9. 'SF' =>'顺丰速运',
  10. 'HTKY' =>'百世快递',
  11. 'ZTO' =>'中通快递',
  12. 'STO' =>'申通快递',
  13. 'YTO' =>'圆通速递',
  14. 'YD' =>'韵达速递',
  15. 'YZPY' =>'邮政快递包裹',
  16. 'EMS' =>'EMS',
  17. 'HHTT' =>'天天快递',
  18. 'JD' =>'京东快递',
  19. 'UC' =>'优速快递',
  20. 'DBL' =>'德邦快递',
  21. 'ZJS' =>'宅急送',
  22. 'PJ' =>'品骏快递',
  23. 'JTSD' =>'极兔速递',
  24. ];
  25. return $arr;
  26. }
  27. public function search($express_code,$ShipperCode=null,$OrderCode=null,$CustomerName=null){
  28. try{
  29. if ($ShipperCode=='ZTO'){
  30. $client=new Client();
  31. $url='http://japi.zto.cn/traceInterfaceNewTraces';
  32. $array=[
  33. 'headers'=>[
  34. 'ContentType'=>'application/x-www-form-urlencoded',
  35. 'x-companyid'=>'206f48b6bded4906a06eddd39bf26e7c',
  36. 'x-datadigest'=>base64_encode(md5('data=["'.$express_code.'"]&company_id=206f48b6bded4906a06eddd39bf26e7c&msg_type=NEW_TRACES0480ecc2d633',true))
  37. ],
  38. 'query'=>[
  39. 'data'=>'["'.$express_code.'"]',
  40. 'company_id'=>'206f48b6bded4906a06eddd39bf26e7c',
  41. 'msg_type'=>'NEW_TRACES',
  42. ]
  43. ];
  44. $request=$client->request('POST',$url,$array);
  45. $ad=$request->getBody()->getContents();
  46. $re=[];
  47. $state=0;
  48. $ads=json_decode($ad);
  49. $arr=(array)$ads;
  50. if ($arr['data'][0]->traces){
  51. foreach ($arr['data'][0]->traces as $k=>$v){
  52. $re[$k]['AcceptStation']=$v->desc;
  53. $re[$k]['AcceptTime']=strtotime($v->scanDate)*1000;
  54. if ($v->scanType=='ARRIVAL' || $v->scanType=='SIGNED' || $v->scanType=='5' || $v->scanType=='6' || $v->scanType=='签收'){
  55. $state=3;
  56. }
  57. }
  58. }
  59. $a['LogisticCode']=$express_code;
  60. $a['ShipperCode']=$ShipperCode;
  61. $a['Traces']=$re;
  62. $a['State']=$state;
  63. return $a;
  64. }
  65. $client=new Client();
  66. if ($ShipperCode=='DBL'){
  67. $url='https://www.deppon.com/gwapi/trackService/eco/track/searchTrack?billNo='.$express_code;
  68. $request=$client->request('get',$url);
  69. $ad=$request->getBody()->getContents();
  70. $ads=json_decode($ad);
  71. $re=[];
  72. $state=0;
  73. if ($ads->status=='success'){
  74. foreach ($ads->result->tracks as $k=>$v){
  75. $re[$k]['AcceptStation']=$v->contentNoLinkLabel;
  76. $re[$k]['AcceptTime']=$v->operateTime;
  77. }
  78. if ($ads->result->billNoState=='已签收'){
  79. $state=3;
  80. }
  81. }
  82. $a['LogisticCode']=$express_code;
  83. $a['ShipperCode']=$ShipperCode;
  84. $a['Traces']=$re;
  85. $a['message']=$ads->message;
  86. $a['State']=$state;
  87. return $a;
  88. }
  89. $appkey='321b74bb-84a3-4b9c-af1d-937583f9a3a0';
  90. $appid=1640111;
  91. $url='http://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx';
  92. $array=[
  93. 'query'=>[
  94. 'RequestData'=>urlencode($this->requestdata($express_code,$ShipperCode,$OrderCode,$CustomerName)),
  95. 'EBusinessID'=>$appid,
  96. 'RequestType'=>'8002',
  97. 'DataSign'=>urlencode($this->encrypt($this->requestdata($express_code,$ShipperCode,$OrderCode,$CustomerName),$appkey)),
  98. 'DataType'=>'2'
  99. ]
  100. ];
  101. $re=$client->request('POST',$url,$array);
  102. $dd=$re->getBody()->getContents();
  103. $d=json_decode($dd);
  104. if ($d->Traces){
  105. foreach ($d->Traces as $k=>$v){
  106. $v->AcceptTime=strtotime($v->AcceptTime)*1000;
  107. }
  108. }
  109. return $d;
  110. }catch (\Exception $exception){
  111. $a['LogisticCode']=$express_code;
  112. $a['ShipperCode']=$ShipperCode;
  113. $a['Traces']=[];
  114. $a['State']=40010;
  115. return $a;
  116. }
  117. }
  118. private function requestdata($express_code,$ShipperCode =null,$OrderCode=null,$CustomerName=null){
  119. if ($ShipperCode){
  120. $requestdata['ShipperCode']=$ShipperCode;
  121. }
  122. if ($OrderCode){
  123. $requestdata['OrderCode']=$OrderCode;
  124. }
  125. if ($CustomerName){
  126. $requestdata['CustomerName']=$CustomerName;
  127. }
  128. $requestdata['LogisticCode']=$express_code;
  129. return json_encode($requestdata);
  130. }
  131. public function encrypt($reqiredata,$appkey){
  132. return base64_encode(md5($reqiredata.$appkey));
  133. }
  134. public function getExpressCompany($LogisticCode){
  135. $client = new Client();
  136. $appKey = '321b74bb-84a3-4b9c-af1d-937583f9a3a0';
  137. $appId = 1640111;
  138. // $url = 'http://sandboxapi.kdniao.com:8080/kdniaosandbox/gateway/exterfaceInvoke.json';
  139. $url = 'https://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx';
  140. $requestData = $this->requestData($LogisticCode);
  141. $array = [
  142. 'query' => [
  143. 'RequestData' => urlencode($requestData),
  144. 'EBusinessID' => $appId,
  145. 'RequestType' => '2002',
  146. 'DataSign' => urlencode($this->encrypt($requestData, $appKey)),
  147. 'DataType' => '2'
  148. ]
  149. ];
  150. $result = $client->request('POST', $url, $array);
  151. $res = json_decode($result->getBody()->getContents());
  152. return $res;
  153. }
  154. }