appkey; $secret = $this->appSecret; $url = self::TOKEN_URL . '?' . http_build_query(compact('appid', 'secret')); $res = $this->httpPost([], $url); $data = Json::decode($res); return $data; } /** * POST请求接口方法 * @param string $method * @param array $params * @return bool|string */ public function requestPost(string $method,array $params = []) : array { $uri = self::API_URL . "?service={$method}"; $header = [ "Authorization:". "Bearer ".$this->token, "traceID:". uniqid(), "companyid:". $this->companyid, "mainAccount:". $this->mainAccount, "uid:". $this->uid ]; $postUrl = $uri; $curlPost = [ 'timestamp' => time() * 1000, 'appKey' => $this->appkey, 'version' => "V1.1.0", 'requestBody' => $this->encrypt($params), 'appSecret' => $this->appSecret ]; $curlPost['signature'] = $this->getKey($curlPost); unset($curlPost['appSecret']); // 初始化curl $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $postUrl); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_HEADER, 0); // 要求结果为字符串且输出到屏幕上 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_TIMEOUT,30); // post提交方式 curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost); // 运行curl $data = curl_exec($curl); curl_close($curl); $data = json_decode($data,true); // echo "
";
        // echo "

请求连接

"; // var_dump($uri); // echo "

响应

"; // var_dump($data); // echo "

业务参数

"; // var_dump($params); // echo json_encode($params); // echo "

请求数据

"; // var_dump($curlPost); // echo json_encode($curlPost); // echo "

请求头

"; // var_dump($header); // 非0000请求失败信息提示 if (isset($data['code']) && $data['code'] != '0000') { throw new \Exception($data['message']); } return $data; } /** * 获取签名 * @param array $params * @return string */ protected function getKey(array $params) : string { ksort($params, SORT_NATURAL | SORT_FLAG_CASE);//排序不区分大小写 $str = ''; foreach ($params as $k => $v) { if ($k == 'signature' || $k == 'requestBody') continue; $str .= $k . $v; } $str = 'key' . $str . 'secret'; // 对该字符串进行 SHA1 运算,得到一个十六进制的数 $encodeStr = strtoupper(sha1($str)); return $encodeStr; } /** * 获取加密数据 * @param array $params * @return string */ public function encrypt(array $params) : string { $requestBody = $params; $key = $this->appSecret; $body = json_encode($requestBody); $l = strlen($key); if ($l < 16) $key = str_repeat($key, ceil(16 / $l)); if ($m = strlen($body) % 16) $body .= str_repeat("\x00", 16 - $m); return base64_encode(openssl_encrypt($body, "AES-128-CBC", $key, OPENSSL_RAW_DATA | OPENSSL_NO_PADDING, $key)); } public function decrypt($str) { $key = $this->appSecret; $l = strlen($key); if ($l < 16) $key = str_repeat($key, ceil(16 / $l)); return (openssl_decrypt(base64_decode($str), "AES-128-CBC", $key, OPENSSL_RAW_DATA | OPENSSL_NO_PADDING, $key)); } private function httpPost($data,$url,$header = []) { $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json')); curl_setopt($ch,CURLOPT_TIMEOUT,600); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_POST,true); curl_setopt($ch,CURLOPT_POSTFIELDS,$data); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); if ( !empty($header) ) { curl_setopt($ch, CURLOPT_HTTPHEADER, $header); } if (strpos($url, 'https') !== false) { curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSLVERSION, 1); } $ret_data = trim(curl_exec($ch)); curl_close($ch); return $ret_data; } }