trackCollectionFactory = $trackCollectionFactory; $this->helper = $helper; $this->logger = $logger; } /** * @return array */ public function getExpressInfo(): array { $info = $this->_registry->registry('current_shipping_info'); if ($info->getOrderId()) { /* @var $track Track */ $track = $this->trackCollectionFactory->create() ->setOrderFilter($info->getOrderId()) ->setItemObjectClass(Track::class) ->getFirstItem(); $expressInfo = json_decode($track->getDescription(), true); //是否已签收 $isReceived = !empty($expressInfo) && isset($expressInfo['deliverystatus']) && $expressInfo['deliverystatus']==3; if ($track->getTrackNumber() && !$isReceived) { try { $result = $this->helper->getExpressInfo($track->getTrackNumber()); if (isset($result['expName'])) { $track->setDescription(json_encode($result))->save(); } } catch (\Exception $exception) { $this->logger->critical('request express info fail, message:'.$exception->getMessage(), $exception->getTrace()); } } if ($track->getDescription()) { if (isset($expressInfo['list']) && is_array($expressInfo['list'])) { return $expressInfo['list']; } } } return []; } }