Files

96 lines
2.5 KiB
PHP

<?php
namespace app\common\library\app\physical\express\provider;
use app\common\model\app\physical\OrderAddress;
use fast\Http;
class Thinkapi extends Base
{
protected $uri = 'https://api.topthink.com';
protected $appCode = '782d8799-ed40-4b95-a24b-dfc2259b910e';
public function __construct()
{
$this->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';
}
}