$logistic_number, ], JSON_UNESCAPED_UNICODE); $data_digest = base64_encode(md5($body . $appSecret, TRUE)); $headers = [ 'Content-Type' => 'application/json; charset=UTF-8', 'x-companyid' => $xAppKey, 'x-datadigest' => $data_digest, ]; $response = Http::withHeaders($headers)->withBody($body, 'application/json')->post($url); return json_decode($response->body()); } public function format($nativeResponse,$logistic_number) { $order_package = OrderPackage::query()->where('logistic_number', $logistic_number)->first(); if (empty($order_package)) { return []; } $result = [ 'logistic_number' => $logistic_number, 'status' => $order_package->status, 'transfer_status' => $order_package->transfer_status, 'received_at' => $order_package->received_at, ]; if (empty($nativeResponse->result)|| !$nativeResponse->status || $nativeResponse->statusCode=='P-OW005') { return $result; } $nativeRoutes = $nativeResponse->result??[]; $lastRoute = $nativeRoutes[count($nativeRoutes) - 1]??[]; list($status, $received_at) = $this->getNormalStatusAndReceivedAt($lastRoute); $result['status'] = $status; $result['received_at'] = $received_at; $result['transfer_status'] = $this->getTransferStatus($nativeRoutes); $result['routes_length'] = count($result['transfer_status']); return $result; } /** * 正常的状态与签收时间 */ private function getNormalStatusAndReceivedAt($lastRoute): array { $status = null; $received_at = null; switch ($lastRoute->scanType) { case '收件': $status = '已揽件'; break; case '到件': case '发件': $status = '在途'; break; case 'ARRIVAL': case '派件': $status = '派送中'; break; case 'SIGNED': case '签收': $status = '已签收'; $received_at = Carbon::parse($lastRoute->scanDate / 1000)->addHours(8)->toDateTimeString(); break; default: $status = '其他'; break; } return array($status, $received_at); } /** * @param $nativeRoutes * @return array */ private function getTransferStatus($nativeRoutes): array { $transfer_status = []; foreach ($nativeRoutes as $item) { $data = []; $data['accept_time'] = Carbon::parse($item->scanDate / 1000)->addHours(8)->toDateTimeString(); $scanSite = $item->scanSite; $data['accept_address'] = $scanSite->prov . '-' . $scanSite->name; $data['remark'] = $item->desc; $transfer_status[] = $data; } return $transfer_status; } }