KdnLogistics.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: shenyang
  5. * Date: 2018/10/23
  6. * Time: 下午2:34
  7. */
  8. namespace app\common\modules\express\expressCompany;
  9. use app\common\exceptions\ShopException;
  10. use app\common\models\Order;
  11. use app\common\modules\express\getTraces;
  12. use Ixudra\Curl\Facades\Curl;
  13. class KdnLogistics implements Logistics
  14. {
  15. private $eBusinessID;
  16. private $appKey;
  17. private $reqURL;
  18. private $set_data;
  19. public function __construct($data)
  20. {
  21. $this->eBusinessID = $data['KDN']['eBusinessID'];
  22. $this->appKey = $data['KDN']['appKey'];
  23. $this->reqURL = config('app.express.KDN.reqURL');
  24. $this->set_data = $data;
  25. }
  26. public function getTraces($comCode, $expressSn, $orderSn = '',$phoneLastFour = '')
  27. {
  28. //快递鸟1002状态为免费,8001状态为收费
  29. $express_api = $this->set_data;//\Setting::get('shop.express_info');
  30. if($comCode == 'JD'){
  31. $requestData = json_encode(
  32. [
  33. 'OrderCode' => $orderSn,
  34. 'CustomerName' => $express_api['KDN']['CustomerName'],
  35. 'ShipperCode' => $comCode,
  36. 'LogisticCode' => $expressSn,
  37. ]
  38. );
  39. }elseif ($comCode == 'SF'){
  40. // $mobile = $this->getMobile($order_id);
  41. $requestData = json_encode(
  42. [
  43. 'OrderCode' => $orderSn,
  44. 'CustomerName' => $phoneLastFour,
  45. 'ShipperCode' => $comCode,
  46. 'LogisticCode' => $expressSn,
  47. ]
  48. );
  49. }else{
  50. $requestData = json_encode(
  51. [
  52. 'OrderCode' => $orderSn,
  53. 'ShipperCode' => $comCode,
  54. 'LogisticCode' => $expressSn,
  55. ]
  56. );
  57. }
  58. if(empty($express_api['KDN']['express_api'])){//判断如果快递鸟状态为空,默认赋值为1002免费状态
  59. $express_api['KDN']['express_api'] = 1002;
  60. }
  61. if ($express_api['KDN']['express_api'] == 1002 || $express_api['KDN']['express_api'] == 8001 ){//判断如果快递鸟状态为1002或者8001则赋值,不为
  62. $datas = array(
  63. 'EBusinessID' => $this->eBusinessID,
  64. 'RequestType' => $express_api['KDN']['express_api'],//'1002',//快递鸟1002状态为免费,8001状态为收费
  65. 'RequestData' => urlencode($requestData),
  66. 'DataType' => '2',
  67. );
  68. } else{ //不为1002或者8001返回错误
  69. throw new ShopException("快递鸟状态错误");
  70. }
  71. if ($express_api['KDN']['package_type'] == 2) {
  72. $datas = array(
  73. 'EBusinessID' => $this->eBusinessID,
  74. 'RequestType' => 8002,//8002状态为快递查询套餐
  75. 'RequestData' => urlencode($requestData),
  76. 'DataType' => '2',
  77. );
  78. }
  79. $datas['DataSign'] = $this->encrypt($requestData);
  80. $response = Curl::to($this->reqURL)->withData($datas)
  81. ->asJsonResponse(true)->get();
  82. return $this->format($response);
  83. }
  84. private function format($response)
  85. {
  86. $result = [];
  87. foreach ($response['Traces'] as $trace) {
  88. $result['data'][] = [
  89. 'time' => $trace['AcceptTime'],
  90. 'ftime' => $trace['AcceptTime'],
  91. 'context' => $trace['AcceptStation'],
  92. 'location' => null,
  93. ];
  94. }
  95. $result['state'] = $response['State'];
  96. return $result;
  97. }
  98. private function encrypt($data)
  99. {
  100. return urlencode(base64_encode(md5($data . $this->appKey)));
  101. }
  102. public function getMobile($order_id)
  103. {
  104. if (empty($order_id)){
  105. throw new ShopException("订单id为空");
  106. }
  107. $address = Order::uniacid()->with(['address'])->where('id',$order_id)->first();
  108. if (empty($address['address']['mobile'])){
  109. throw new ShopException("订单收货人号码为空");
  110. }
  111. $mobile = substr($address['address']['mobile'],-4);
  112. return $mobile;
  113. }
  114. }