KDN.php 3.9 KB

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