137 lines
3.6 KiB
PHP
137 lines
3.6 KiB
PHP
<?php
|
|
|
|
namespace app\common\library\app\physical\express\adapter;
|
|
|
|
use fast\Http;
|
|
|
|
class Kdniao
|
|
{
|
|
const REQURL = "https://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx";
|
|
const SUBURL = "https://api.kdniao.com/api/dist";
|
|
const EORDER = "https://api.kdniao.com/api/EOrderService";
|
|
|
|
protected $sender = [];
|
|
|
|
protected $config = [];
|
|
|
|
public function __construct()
|
|
{
|
|
$this->config = $this->getConfig();
|
|
}
|
|
|
|
public function search($data)
|
|
{
|
|
$requestParams = $this->getRequestParams($data);
|
|
$requestData = $this->getRequestData($requestParams);
|
|
$requestData['RequestType'] = $this->config['type'] == 'free' ? '1002' : '8001';
|
|
|
|
$result = Http::post(self::REQURL, $requestData);
|
|
|
|
$result = $this->getResponse($result, '没有物流信息');
|
|
return $result;
|
|
}
|
|
|
|
public function subscribe($data)
|
|
{
|
|
$requestParams = $this->getRequestParams($data);
|
|
$requestData = $this->getRequestData($requestParams);
|
|
$requestData['RequestType'] = $this->config['type'] == 'free' ? '1008' : '8008';
|
|
|
|
$result = Http::post(self::SUBURL, $requestData);
|
|
|
|
$result = $this->getResponse($result, '订阅失败');
|
|
return $result;
|
|
}
|
|
|
|
public function cancel($data)
|
|
{
|
|
$requestData = $data;
|
|
|
|
$requestData = $this->getRequestData($data);
|
|
$requestData['RequestType'] = '1147';
|
|
|
|
$result = Http::post(self::EORDER, $requestData);
|
|
|
|
$result = $this->getResponse($result, '电子面单取消失败');
|
|
return $result;
|
|
}
|
|
|
|
public function eOrder($data)
|
|
{
|
|
$requestData = $this->getRequestData($data);
|
|
$requestData['RequestType'] = '1007';
|
|
|
|
$result = Http::post(self::EORDER, $requestData);
|
|
|
|
$result = $this->getResponse($result, '电子面单下单失败');
|
|
return $result;
|
|
}
|
|
|
|
public function pushResult($success, $reason)
|
|
{
|
|
$result = [
|
|
"EBusinessID" => $this->config['ebusiness_id'],
|
|
"UpdateTime" => date('Y-m-d H:i:s'),
|
|
"Success" => $success,
|
|
'Reason' => $reason
|
|
];
|
|
|
|
return $result;
|
|
}
|
|
|
|
private function getRequestData($requestParams)
|
|
{
|
|
$requestParams = is_array($requestParams) ? json_encode($requestParams, JSON_UNESCAPED_UNICODE) : $requestParams;
|
|
|
|
$requestData = [
|
|
'EBusinessID' => $this->config['ebusiness_id'],
|
|
'RequestData' => urlencode($requestParams),
|
|
'DataType' => '2',
|
|
];
|
|
$requestData['DataSign'] = $this->encrypt($requestParams, $this->config['app_key']);
|
|
|
|
return $requestData;
|
|
}
|
|
|
|
private function getRequestParams($data = [])
|
|
{
|
|
$params = [
|
|
'ShipperCode' => $data['express_code'],
|
|
'LogisticCode' => $data['express_no'],
|
|
];
|
|
|
|
if ($data['express_code'] == 'JD') {
|
|
$params['CustomerName'] = $this->config['jd_code'] ?? '';
|
|
} else {
|
|
$params['CustomerName'] = $data['mobile'] ?? '';
|
|
}
|
|
|
|
return $params;
|
|
}
|
|
|
|
private function getResponse($result, $msg = '')
|
|
{
|
|
$result = json_decode($result, true);
|
|
if (!$result['Success']) {
|
|
throw new \Exception($result['Reason'] ?: $msg);
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
private function encrypt($data, $app_key)
|
|
{
|
|
return urlencode(base64_encode(md5($data . $app_key)));
|
|
}
|
|
|
|
protected function getConfig()
|
|
{
|
|
return [
|
|
'type' => 'free',
|
|
'ebusiness_id' => '1914053',
|
|
'app_key' => 'f583d954-1709-4e34-9ac0-73f5079e2452',
|
|
'jd_code' => ''
|
|
];
|
|
}
|
|
}
|