config = $data; } /** * 设置HOST * @date 2022-04-01 */ public function setHost($host = '') { $this->host = $host; } /** * method=GET请求示例 * @param string $path 域名后、query前的部分 * @param array $querys 业务query部分 * @param array $headers 业务header部分 */ public function doGet($path, $querys = [], $headers = []) { $request = new HttpRequest($this->host, $path, HttpMethod::GET, $this->config['app_key'], $this->config['app_secret']); //设定Content-Type,根据服务器端接受的值来设置 $request->setHeader(HttpHeader::HTTP_HEADER_CONTENT_TYPE, ContentType::CONTENT_TYPE_TEXT); //设定Accept,根据服务器端接受的值来设置 $request->setHeader(HttpHeader::HTTP_HEADER_ACCEPT, ContentType::CONTENT_TYPE_TEXT); //如果是调用测试环境请设置 //$request->setHeader(SystemHeader::X_CA_STAG, "TEST"); //注意:业务header部分,如果没有则无此行(如果有中文,请做Utf8ToIso88591处理) if (!empty($headers)) { //mb_convert_encoding("headervalue2中文", "ISO-8859-1", "UTF-8"); //$request->setHeader("b-header2", "headervalue2"); //$request->setHeader("a-header1", "headervalue1"); foreach ($headers as $k => $v) { $request->setHeader($k, $v); } } //注意:业务query部分,如果没有则无此行;请不要、不要、不要做UrlEncode处理 if (!empty($querys)) { //$request->setQuery("chName", "1"); //$request->setQuery("idNum", "2"); foreach ($querys as $k => $v) { $request->setQuery($k, $v); } } //指定参与签名的header $request->setSignHeader(SystemHeader::X_CA_TIMESTAMP); //$request->setQuery("b-query2", "queryvalue2"); //$request->setQuery("a-query1", "queryvalue1"); if (!empty($headers)) { foreach ($headers as $k => $v) { $request->setSignHeader($k); } } $response = HttpClient::execute($request); $result = $response->getBody(); return json_decode($result, true); } /** *method=POST且是表单提交,请求示例 */ public function doPostForm() { //域名后、query前的部分 $path = "/postform"; $request = new HttpRequest($this::$host, $path, HttpMethod::POST, $this::$appKey, $this::$appSecret); //设定Content-Type,根据服务器端接受的值来设置 $request->setHeader(HttpHeader::HTTP_HEADER_CONTENT_TYPE, ContentType::CONTENT_TYPE_FORM); //设定Accept,根据服务器端接受的值来设置 $request->setHeader(HttpHeader::HTTP_HEADER_ACCEPT, ContentType::CONTENT_TYPE_JSON); //如果是调用测试环境请设置 //$request->setHeader(SystemHeader::X_CA_STAG, "TEST"); //注意:业务header部分,如果没有则无此行(如果有中文,请做Utf8ToIso88591处理) //mb_convert_encoding("headervalue2中文", "ISO-8859-1", "UTF-8"); $request->setHeader("b-header2", "headervalue2"); $request->setHeader("a-header1", "headervalue1"); //注意:业务query部分,如果没有则无此行;请不要、不要、不要做UrlEncode处理 $request->setQuery("b-query2", "queryvalue2"); $request->setQuery("a-query1", "queryvalue1"); //注意:业务body部分,如果没有则无此行;请不要、不要、不要做UrlEncode处理 $request->setBody("b-body2", "bodyvalue2"); $request->setBody("a-body1", "bodyvalue1"); //指定参与签名的header $request->setSignHeader(SystemHeader::X_CA_TIMESTAMP); $request->setSignHeader("a-header1"); $request->setSignHeader("b-header2"); $response = HttpClient::execute($request); print_r($response); } /** * method=POST且是非表单提交,请求示例 * @param string $path 域名后、query前的部分 * @param string $data 内容 * @param array $querys 业务query部分 * @param array $headers 业务header部分 */ public function doPostString($path, $data = '', $querys = [], $headers = []) { $request = new HttpRequest($this->host, $path, HttpMethod::POST, $this->config['app_key'], $this->config['app_secret']); //传入内容是json格式的字符串 $bodyContent = json_encode($data); //设定Content-Type,根据服务器端接受的值来设置 $request->setHeader(HttpHeader::HTTP_HEADER_CONTENT_TYPE, ContentType::CONTENT_TYPE_JSON); //设定Accept,根据服务器端接受的值来设置 $request->setHeader(HttpHeader::HTTP_HEADER_ACCEPT, ContentType::CONTENT_TYPE_JSON); //如果是调用测试环境请设置 //$request->setHeader(SystemHeader::X_CA_STAG, "TEST"); //注意:业务header部分,如果没有则无此行(如果有中文,请做Utf8ToIso88591处理) if (!empty($headers)) { //mb_convert_encoding("headervalue2中文", "ISO-8859-1", "UTF-8"); //$request->setHeader("b-header2", "headervalue2"); //$request->setHeader("a-header1", "headervalue1"); foreach ($headers as $k => $v) { $request->setHeader($k, $v); } } //注意:业务query部分,如果没有则无此行;请不要、不要、不要做UrlEncode处理 if (!empty($querys)) { //$request->setQuery("chName", "1"); //$request->setQuery("idNum", "2"); foreach ($querys as $k => $v) { $request->setQuery($k, $v); } } //注意:业务body部分,不能设置key值,只能有value if (!empty($data)) { $request->setHeader(HttpHeader::HTTP_HEADER_CONTENT_MD5, base64_encode(md5($bodyContent, true))); $request->setBodyString($bodyContent); } //指定参与签名的header $request->setSignHeader(SystemHeader::X_CA_TIMESTAMP); // $request->setQuery("b-query2", "queryvalue2"); // $request->setQuery("a-query1", "queryvalue1"); if (!empty($headers)) { foreach ($headers as $k => $v) { $request->setSignHeader($k); } } $response = HttpClient::execute($request); if ($response->getSuccess()) { //正确返回 $result = $response->getBody(); return json_decode($result, true); } else { //错误返回 $header = $response->getHeader(); $result = $this->getErrorMessage($header); return $result; } } /** *method=POST且是非表单提交,请求示例 */ public function doPostStream() { //域名后、query前的部分 $path = "/poststream"; $request = new HttpRequest($this::$host, $path, HttpMethod::POST, $this::$appKey, $this::$appSecret); //Stream的内容 $bytes = array(); //传入内容是json格式的字符串 $bodyContent = "{\"inputs\": [{\"image\": {\"dataType\": 50,\"dataValue\": \"base64_image_string(此行)\"},\"configure\": {\"dataType\": 50,\"dataValue\": \"{\"side\":\"face(#此行此行)\"}\"}}]}"; //设定Content-Type,根据服务器端接受的值来设置 $request->setHeader(HttpHeader::HTTP_HEADER_CONTENT_TYPE, ContentType::CONTENT_TYPE_STREAM); //设定Accept,根据服务器端接受的值来设置 $request->setHeader(HttpHeader::HTTP_HEADER_ACCEPT, ContentType::CONTENT_TYPE_JSON); //如果是调用测试环境请设置 //$request->setHeader(SystemHeader::X_CA_STAG, "TEST"); //注意:业务header部分,如果没有则无此行(如果有中文,请做Utf8ToIso88591处理) //mb_convert_encoding("headervalue2中文", "ISO-8859-1", "UTF-8"); $request->setHeader("b-header2", "headervalue2"); $request->setHeader("a-header1", "headervalue1"); //注意:业务query部分,如果没有则无此行;请不要、不要、不要做UrlEncode处理 $request->setQuery("b-query2", "queryvalue2"); $request->setQuery("a-query1", "queryvalue1"); //注意:业务body部分,不能设置key值,只能有value foreach ($bytes as $byte) { $bodyContent .= chr($byte); } if (0 < strlen($bodyContent)) { $request->setHeader(HttpHeader::HTTP_HEADER_CONTENT_MD5, base64_encode(md5($bodyContent, true))); $request->setBodyStream($bodyContent); } //指定参与签名的header $request->setSignHeader(SystemHeader::X_CA_TIMESTAMP); $request->setSignHeader("a-header1"); $request->setSignHeader("b-header2"); $response = HttpClient::execute($request); print_r($response); } //method=PUT方式和method=POST基本类似,这里不再举例 /** *method=DELETE请求示例 */ public function doDelete() { //域名后、query前的部分 $path = "/delete"; $request = new HttpRequest($this::$host, $path, HttpMethod::DELETE, $this::$appKey, $this::$appSecret); //设定Content-Type,根据服务器端接受的值来设置 $request->setHeader(HttpHeader::HTTP_HEADER_CONTENT_TYPE, ContentType::CONTENT_TYPE_TEXT); //设定Accept,根据服务器端接受的值来设置 $request->setHeader(HttpHeader::HTTP_HEADER_ACCEPT, ContentType::CONTENT_TYPE_TEXT); //如果是调用测试环境请设置 //$request->setHeader(SystemHeader::X_CA_STAG, "TEST"); //注意:业务header部分,如果没有则无此行(如果有中文,请做Utf8ToIso88591处理) //mb_convert_encoding("headervalue2中文", "ISO-8859-1", "UTF-8"); $request->setHeader("b-header2", "headervalue2"); $request->setHeader("a-header1", "headervalue1"); //注意:业务query部分,如果没有则无此行;请不要、不要、不要做UrlEncode处理 $request->setQuery("b-query2", "queryvalue2"); $request->setQuery("a-query1", "queryvalue1"); //指定参与签名的header $request->setSignHeader(SystemHeader::X_CA_TIMESTAMP); $request->setSignHeader("a-header1"); $request->setSignHeader("b-header2"); $response = HttpClient::execute($request); print_r($response); } /** *method=HEAD请求示例 */ public function doHead() { //域名后、query前的部分 $path = "/head"; $request = new HttpRequest($this::$host, $path, HttpMethod::HEAD, $this::$appKey, $this::$appSecret); //设定Content-Type,根据服务器端接受的值来设置 $request->setHeader(HttpHeader::HTTP_HEADER_CONTENT_TYPE, ContentType::CONTENT_TYPE_TEXT); //设定Accept,根据服务器端接受的值来设置 $request->setHeader(HttpHeader::HTTP_HEADER_ACCEPT, ContentType::CONTENT_TYPE_TEXT); //如果是调用测试环境请设置 //$request->setHeader(SystemHeader::X_CA_STAG, "TEST"); //注意:业务header部分,如果没有则无此行(如果有中文,请做Utf8ToIso88591处理) //mb_convert_encoding("headervalue2中文", "ISO-8859-1", "UTF-8"); $request->setHeader("b-header2", "headervalue2"); $request->setHeader("a-header1", "headervalue1"); //注意:业务query部分,如果没有则无此行;请不要、不要、不要做UrlEncode处理 $request->setQuery("b-query2", "queryvalue2"); $request->setQuery("a-query1", "queryvalue1"); //指定参与签名的header $request->setSignHeader(SystemHeader::X_CA_TIMESTAMP); $request->setSignHeader("a-header1"); $request->setSignHeader("b-header2"); $response = HttpClient::execute($request); print_r($response); } /** * */ public function getErrorMessage($header) { $result = []; if (0 < strlen($header)) { $headers = explode("\r\n", $header); foreach ($headers as $value) { if (strpos($value, "x-ca-request-id:") !== false) { $result['requestId'] = trim(substr($value, strlen("x-ca-request-id:"))); } if (strpos($value, "x-ca-error-code:") !== false) { $result['errorCode'] = trim(substr($value, strlen("x-ca-error-code:"))); } if (strpos($value, "x-ca-error-message:") !== false) { $result['errorMessage'] = trim(substr($value, strlen("x-ca-error-message:"))); } } } return $result; } }