$logistic_number ]; $secret=$app_secret.'app_key'.$app_key.'format'.$format.'method'.$method.'timestamp'.Carbon::now()->toDateTimeString().'user_id'.$user_id.'v'.$v; $sign = strtoupper(md5($secret)); $headers = [ 'sign' => $sign, 'app_key' => $app_key, 'format' => $format, 'method' => $method, 'timestamp' => Carbon::now()->toDateTimeString(), 'user_id' => $user_id, 'v' => $v, 'param'=>json_encode($body, JSON_UNESCAPED_UNICODE) ]; $response = Http::asForm()->post($url,$headers); return json_decode($response->body()); } public function format($response,$logistic_number): array { $result = []; if (is_object($response) && $response->code=='1001') { return [ 'logistic_number' => $logistic_number, ]; } else { try { if (is_array($response))$result['logistic_number'] = $response[0]->waybill_No; } catch (\Exception $e) { // LogService::log(LogisticYTOService::class, "YTO快递信息异常", $logistic_number); return [ 'logistic_number' => $logistic_number, ]; } if (!empty($response) && is_array($response)) { $lastNativeRoute = $response[count($response) - 1]; $result['status'] = $this->getStatus($lastNativeRoute); if ($result['status'] == '已签收') $result['received_at'] = $lastNativeRoute->upload_Time; $result['transfer_status'] = $this->getTransferStatus($response); $result['routes_length'] = array_key_exists('transfer_status', $result) ? count($result['transfer_status']) : 0; } else { $result['status'] = null; $result['transfer_status'] = []; } if (!array_key_exists('status', $result)) {$result['status'] = null;$result['transfer_status'] = [];} return $result; } } /** * @param $nativeData * @return string */ private function getStatus($nativeData): string { $status = null; switch ($nativeData->infoContent) { case 'ARRIVAL': case 'GOT': $status = '已揽件'; break; case 'DEPARTURE': case 'PACKAGE': $status = '在途'; break; case 'SENT_SCAN': case 'INBOUND': $status = '派送中'; break; case 'SIGNED': $status = '已签收'; break; case 'TMS_RETURN': $status = '返回中'; break; default: $status = '其他'; } return $status; } /** * @param $nativeRoutes * @return array */ private function getTransferStatus($nativeRoutes): array { $transferStatus = []; foreach ($nativeRoutes as $nativeRoute) { $item = []; $item['accept_time'] = $nativeRoute->upload_Time; $item['accept_address'] = $nativeRoute->processInfo; $item['remark'] = ""; $transferStatus[] = $item; } return $transferStatus; } }