Kdbird.php 4.3 KB

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