Kdbird.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <?php
  2. namespace extend;
  3. class Kdbird
  4. {
  5. private $EBusinessID; // 授权key
  6. private $AppKey; // 快递100分配的公司编码
  7. private $url;
  8. public function __construct($config){
  9. $this->EBusinessID = $config["EBusinessID"];
  10. $this->AppKey = $config["AppKey"];
  11. $this->url ='http://api.kdniao.com/api/dist';
  12. }
  13. public function orderTracesSubByJson($shipper_code, $logistic_code){
  14. $requestData="{'ShipperCode':'".$shipper_code."',".
  15. "'LogisticCode':'". $logistic_code ."'}";
  16. $datas = array(
  17. 'EBusinessID' => $this->EBusinessID,
  18. 'RequestType' => '1008',
  19. 'RequestData' => urlencode($requestData) ,
  20. 'DataType' => '2',
  21. );
  22. $datas['DataSign'] = encrypt($requestData, $this->AppKey);
  23. $result = $this->sendPost($this->url, $datas);
  24. //根据公司业务处理返回的信息......
  25. $result = json_decode($result, true);
  26. $list = [];
  27. if (!empty($result['Traces'])) {
  28. foreach ($result['Traces'] as $trace) {
  29. $list[] = [
  30. 'datetime' => $trace['AcceptTime'],
  31. 'remark' => $trace['AcceptStation']
  32. ];
  33. }
  34. }
  35. $res = [
  36. 'success' => $result['Success'],
  37. 'reason' => !empty($result['Reason']) ? $result['Reason'] : '',
  38. 'status' => !empty($result['State']) ? $result['State'] : '',
  39. 'status_name' => !empty($result['State']) ? $this->getStatusName($result['State']) : '',
  40. 'shipper_code' => !empty($result['ShipperCode']) ? $result['ShipperCode']: '',
  41. 'logistic_code' => !empty($result['LogisticCode']) ? $result['LogisticCode'] : '',
  42. 'list' => $list
  43. ];
  44. return $res;
  45. }
  46. /**
  47. * post提交数据
  48. * @param string $url 请求Url
  49. * @param array $datas 提交的数据
  50. * @return url响应返回的html
  51. */
  52. public function sendPost($url, $datas) {
  53. $temps = array();
  54. foreach ($datas as $key => $value) {
  55. $temps[] = sprintf('%s=%s', $key, $value);
  56. }
  57. $post_data = implode('&', $temps);
  58. $url_info = parse_url($url);
  59. if(empty($url_info['port']))
  60. {
  61. $url_info['port']=80;
  62. }
  63. $httpheader = "POST " . $url_info['path'] . " HTTP/1.0\r\n";
  64. $httpheader.= "Host:" . $url_info['host'] . "\r\n";
  65. $httpheader.= "Content-Type:application/x-www-form-urlencoded\r\n";
  66. $httpheader.= "Content-Length:" . strlen($post_data) . "\r\n";
  67. $httpheader.= "Connection:close\r\n\r\n";
  68. $httpheader.= $post_data;
  69. $fd = fsockopen($url_info['host'], $url_info['port']);
  70. fwrite($fd, $httpheader);
  71. $gets = "";
  72. $headerFlag = true;
  73. while (!feof($fd)) {
  74. if (($header = @fgets($fd)) && ($header == "\r\n" || $header == "\n")) {
  75. break;
  76. }
  77. }
  78. while (!feof($fd)) {
  79. $gets.= fread($fd, 128);
  80. }
  81. fclose($fd);
  82. return $gets;
  83. }
  84. /**
  85. * 电商Sign签名生成
  86. * @param data 内容
  87. * @param appkey Appkey
  88. * @return DataSign签名
  89. */
  90. public function encrypt($data, $appkey) {
  91. return urlencode(base64_encode(md5($data.$appkey)));
  92. }
  93. /**
  94. * 物流跟踪状态
  95. * @param $state
  96. */
  97. public function getStatusName($status){
  98. $data = [
  99. 0 => "无轨迹",
  100. 1 => "揽收",
  101. 2 => "途中",
  102. 3 => "签收",
  103. 4 => "退签",
  104. ];
  105. $status_name = isset($data[$status]) ? $data[$status] : '';
  106. return $status_name;
  107. }
  108. }