我提交的URL:
https://aai.tencentcloudapi.com/?Action=SentenceRecognition&DataLen=3880&EngSerViceType=8k&Nonce=751854650&ProjectId=0&Region=ap-beijing&SecretId=AKIDFVfhYK92DKFDZnNn174ufJF6phZUovTq&SignatureMethod=HmacSHA1&SourceType=1&SubServiceType=2&Timestamp=1531371497995&UsrAudioKey=www12&Version=2018-05-22&VoiceFormat=mp3&Signature=5DTefPbxYCpaKnKEjuxJcDbKIzc=
返回:
{"Response":{"Error":{"Code":"MissingParameter","Message":"The request is missing a required parameter `Version`."},"RequestId":"6ce92417-14d8-4fd4-9c8a-45ad23dbabfc"}}
我已经提交了version 参数 为什么还提示找不到?
post的时候 url不包含参数的哈,所有参数都是放在body里的,而且只支持application/x-www-form-urlencoded这一种content-type。
另外目前接口对大包的支持还有点问题,如果请求的body过大超过1m可能引发签名失败。一句话识别也限制了音频只有一分钟,实际应该到不了那么大。
建议使用sdk(https://cloud.tencent.com/document/sdk)或者cli(https://cloud.tencent.com/document/product/440/6176)调用云API
您是否可以详细说明一下,最好可以把您的SecretId和Key删掉,然后贴出代码,再看一下。
或者您也检查一下,您的Version是否参与了签名?
希望我的回答能对您有所帮助。如果有疑问可以给我留言。
我也碰到version找不到的问题
拼接出来的curl 参数是没有问题的
public function postApi($api, $data) { if (!isset($this->SMSParams[$api])){ return false; } $this->params = array_merge($this->SMSParams['common'], $this->SMSParams[$api]); $payload = $this->dataFormat($data); $signHeader = [ "Content-Type" => "Content-Type:application/json", "Host" => "Host:".$this->params['host'], ]; $postHeader = $this->getPostHeader($payload, $signHeader); echo $this->toStr($this->params,$postHeader,$payload); var_dump($postHeader, $data); $curl = curl_init('https://'.$this->params['host']); curl_setopt($curl,CURLOPT_HEADER,array_values($postHeader)); curl_setopt($curl,CURLOPT_POST,1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); $output = curl_exec($curl); var_dump($output); $content = curl_multi_getcontent($curl); var_dump($content); curl_close($curl); exit(); } private function toStr(array $params, array $postHeader, string $payload) { $str = 'curl '; foreach ($postHeader as $item) { $str .= ' -H \''.$item.'\''; } $str .= ' -d \''.$payload.'\''; $str .= ' \'https://'.$params['host'].'\''; echo '<br/>',$str,'<br/>'; }