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' => '' ]; } }