appCode = $this->getConfig(); } public $status = [ '1' => 'noinfo', '2' => 'transport', '3' => 'delivery', '4' => 'signfor', '5' => 'refuse', '6' => 'difficulty', '7' => 'invalid', '8' => 'timeout', '9' => 'fail', '10' => 'back' ]; public function search($data, $orderExpress = 0) { $mobile = (isset($data['mobile']) && $data['mobile']) ? $data['mobile'] : ''; if (!$mobile && isset($data['order_id'])) { $orderAddress = OrderAddress::where('order_id', $data['order_id'])->find(); $mobile = $orderAddress ? $orderAddress->mobile : $mobile; } $requestData = [ 'appCode' => $this->appCode, 'com' => 'auto', 'nu' => $data['express_no'], 'phone' => substr($mobile, 7) ]; $result = Http::get($this->uri . '/express/query', $requestData); $result = is_string($result) ? json_decode($result, true) : $result; if (isset($result['code']) && $result['code'] != 0) { $msg = $result['data']['msg'] ?? ($result['message'] ?? ''); throw new \Exception($msg); } $data = $result['data'] ?? []; $traces = $data['data'] ?? []; $status = $data['status']; $formatResult = $this->formatResult([ 'status' => $status, 'traces' => $traces ]); if ($orderExpress) { $this->updateExpress($formatResult, $orderExpress); } return $formatResult; } protected function formatResult($data) { $status = $this->status[$data['status']] ?? 'noinfo'; $traces = []; if (is_array($data['traces'])) { foreach ($data['traces'] as $trace) { $traces[] = [ 'content' => $trace['context'], 'change_date' => $trace['time'], 'status' => $trace['status'] ?? $status ]; } } $traces = array_reverse($traces); return compact('status', 'traces'); } protected function getConfig() { return '782d8799-ed40-4b95-a24b-dfc2259b910e'; } }