Express.php 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. namespace app\api\controller;
  3. use addons\shopro\exception\Exception;
  4. use addons\shopro\model\Order;
  5. use addons\shopro\model\User;
  6. use think\Db;
  7. use think\Log;
  8. class Express extends Base
  9. {
  10. protected $noNeedLogin = ['callback'];
  11. protected $noNeedRight = ['*'];
  12. /**
  13. * @ApiInternal
  14. * 物流信息订阅回调接口
  15. */
  16. public function callback()
  17. {
  18. $requestData = $this->request->post();
  19. $expressLib = new \app\api\library\Express();
  20. // 信息记录日志
  21. // \think\Log::write('expresscallback:'. json_encode($requestData));
  22. $express = $requestData['lastResult'];
  23. // 查找包裹
  24. $orderExpress = \addons\shopro\model\OrderExpress::with('order')->where('express_code', $express['com'])
  25. ->where('express_no', $express['nu'])
  26. ->find();
  27. if (!$orderExpress) {
  28. // 包裹不存在,记录日志信息,然后继续下一个
  29. \think\Log::write('orderExpressNotFound:' . json_encode($requestData));
  30. return $expressLib->setPushResult(true);
  31. }
  32. //注意:对于status= abort(message中包含“3天查询无记录”或者“60天无变化”)的快递单,也需要返回成功接收的响应报文及代码。
  33. if ($requestData['status'] == 'abort') {
  34. // 失败了
  35. if (isset($requestData['message']) && ($requestData['message'] == '3天查询无记录' || $requestData['message'] == '60天无变化')) {
  36. // 需要重新订阅
  37. $expressLib->subscribe([
  38. 'express_code' => $express['com'],
  39. 'express_no' => $express['nu']
  40. ], $orderExpress, $orderExpress->order, $this->request->domain());
  41. }
  42. \think\Log::write('orderExpressReason:' . json_encode($requestData));
  43. return $expressLib->setPushResult(true);
  44. }
  45. //更新物流信息
  46. $expressLib->checkAndAddTracesByArray($orderExpress, $express);
  47. return $expressLib->setPushResult(true);
  48. }
  49. }