LogisticsService.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. <?php
  2. namespace services\extend\logistics;
  3. use Yii;
  4. use yii\web\NotFoundHttpException;
  5. use common\components\Service;
  6. use common\forms\LogisticsForm;
  7. use common\enums\LogisticsTypeEnum;
  8. use common\helpers\StringHelper;
  9. /**
  10. * 物流查询
  11. *
  12. * $order = Yii::$app->-service->extendLogistics->aliyun($no);
  13. *
  14. * $order->code; // 状态码
  15. * $order->message; // 状态信息
  16. * $order->company; // 物流公司简称
  17. * $order->no; // 物流单号
  18. * $order->status; // 当前物流单状态
  19. *
  20. * 注:物流状态可能不一定准确
  21. *
  22. * $order->getDisplayStatus(); // TODO 当前物流单状态展示名
  23. * $order->getAbstractStatus(); // TODO 当前抽象物流单状态
  24. * $order->getCourier(); // TODO 快递员姓名
  25. * $order->getCourierPhone(); // TODO 快递员手机号
  26. * $order->list; // 物流单状态详情
  27. * $order->original; // 获取接口原始返回信息
  28. *
  29. * Class LogisticsService
  30. * @package services\extend
  31. */
  32. class LogisticsService extends Service
  33. {
  34. /**
  35. * @param $expressNo
  36. * @param $expressCompany
  37. * @param int $customerName 手机号码
  38. * @param $isCache
  39. * @return array
  40. * @throws NotFoundHttpException
  41. */
  42. public function query($expressNo, $expressCompany = null, $customerName = null, $isCache = false)
  43. {
  44. if (empty($expressNo)) {
  45. return [];
  46. }
  47. try {
  48. $logisticsDefault = Yii::$app->services->config->backendConfig('logistics_default');
  49. if (!in_array($logisticsDefault, LogisticsTypeEnum::getKeys())) {
  50. throw new NotFoundHttpException('无效的物流服务');
  51. }
  52. $result = $this->$logisticsDefault($expressNo, $expressCompany, $customerName, $isCache);
  53. return $result->list;
  54. } catch (\Exception $e) {
  55. if (YII_DEBUG) {
  56. throw new NotFoundHttpException($e->getMessage());
  57. }
  58. }
  59. return [];
  60. }
  61. /**
  62. * 阿里云
  63. *
  64. * @param string $no 快递单号
  65. * @param null $company
  66. * @return LogisticsForm
  67. */
  68. public function aliyun($no, $company = null, $customerName = null, $isCache = false)
  69. {
  70. // 顺丰快递
  71. if (!empty($customerName) && StringHelper::strExists($no, 'SF')) {
  72. $no = $no . ':' . substr($customerName, -4);
  73. }
  74. // 避免填错,选择自动处理
  75. $company = null;
  76. return $this->providerQuery($no, $company, $customerName, 'extendLogisticsALiYun', $isCache);
  77. }
  78. /**
  79. * 聚合
  80. *
  81. * @param string $no 快递单号
  82. * @param string $company 可选(建议必填,不填查询结果不一定准确)
  83. * @return LogisticsForm
  84. */
  85. public function juhe($no, $company, $customerName = null, $isCache = false)
  86. {
  87. // 避免填错,选择自动处理
  88. $company = null;
  89. return $this->providerQuery($no, $company, $customerName, 'extendLogisticsJuHe', $isCache);
  90. }
  91. /**
  92. * 快递鸟
  93. *
  94. * @param string $no 快递单号
  95. * @param string $company 可选(建议必填,不填查询结果不一定准确)
  96. * @return LogisticsForm
  97. */
  98. public function kdniao($no, $company = null, $customerName = null, $isCache = false)
  99. {
  100. // 顺丰快递
  101. if (!empty($customerName) && StringHelper::strExists($no, 'SF')) {
  102. $customerName = substr($customerName, -4);
  103. }
  104. // 避免填错,选择自动处理
  105. $company = null;
  106. return $this->providerQuery($no, $company, $customerName, 'extendLogisticsKdn', $isCache);
  107. }
  108. /**
  109. * 快递100
  110. *
  111. * @param string $no 快递单号
  112. * @param string $company 可选(建议必填,不填查询结果不一定准确)
  113. * @return LogisticsForm
  114. */
  115. public function kd100($no, $company = null, $customerName = null, $isCache = false)
  116. {
  117. // 避免填错,选择自动处理
  118. $company = null;
  119. return $this->providerQuery($no, $company, $customerName, 'extendLogisticsKd100', $isCache);
  120. }
  121. /**
  122. * 获取对应的可用快递公司名称
  123. *
  124. * @param $provider
  125. * @throws NotFoundHttpException
  126. */
  127. public function companies($provider)
  128. {
  129. return Yii::$app->services->$provider->companies();
  130. }
  131. /**
  132. * 查询
  133. *
  134. * @param $no
  135. * @param $company
  136. * @param $provider
  137. * @return mixed
  138. */
  139. protected function providerQuery($no, $company, $customerName, $provider, $isCache)
  140. {
  141. if ($isCache == false) {
  142. return Yii::$app->services->$provider->query($no, $company, $customerName);
  143. }
  144. $key = 'Logistics|' . $no;
  145. if (!($data = Yii::$app->cache->get($key))) {
  146. $data = Yii::$app->services->$provider->query($no, $company, $customerName);
  147. Yii::$app->cache->set($key, $data, 60 * 60);
  148. }
  149. return $data;
  150. }
  151. }
粤ICP备19079148号