| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- <?php
- namespace App\Services;
- use App\Traits\ServiceAppAop;
- use Carbon\Carbon;
- use Illuminate\Support\Facades\Http;
- class LogisticYTOService
- {
- use ServiceAppAop;
- public function query($logistic_number)
- {
- $app_key = config('api_logistic.YTO.prod.app-key');
- $app_secret = config('api_logistic.YTO.prod.app-secret');
- $user_id = config('api_logistic.YTO.prod.user_id');
- $method = config('api_logistic.YTO.prod.method');
- $format = config('api_logistic.YTO.prod.format');
- $v = config('api_logistic.YTO.prod.v');
- $url = config('api_logistic.YTO.prod.search.url');
- $body = [
- "Number" => $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;
- }
- }
|