我自己解决了,鉴权的时候把接口参数漏了,下面是正确代码,打扰大家了
<?php
define("WAY", "TextTranslate");
define("PLACE", "gz");
define("URL", "https://tmt.api.qcloud.com/v2/index.php");
define("SEC_ID", "xx");
define("SEC_KEY", "xx");
//翻译入口
function translate($sourceText, $source, $target)
{
$tm=time();
$nc=rand(10000,99999);
$args = array(
'Action'=>WAY,
'Nonce'=>$nc,
'Region'=>PLACE,
'SecretId'=>SEC_ID,
'Timestamp'=>$tm,
'sourceText' => $sourceText,
'source' => $source,
'target' => $target
);
$args['Signature'] = buildSign($args);
$url=URL.'?';
foreach ($args as $key=>$value)
{
$url.=$key.'='.urlencode($value).'&';
}
$url=substr($url,0,strlen($url)-1);
$ret = doCurlGetRequest($url);
$ret = json_decode($ret, true);
echo var_dump($ret);
}
//生成签名串
function buildSign(&$args)
{
ksort($args);
$reqStr='';
foreach ($args as $key => $value)
{
$reqStr.=$key.'='.$value.'&';
}
$reqStr = substr($reqStr,0,strlen($reqStr)-1);
$srcStr ='GETtmt.api.qcloud.com/v2/index.php?'.$reqStr;
$signStr = base64_encode(hash_hmac('sha1', $srcStr, SEC_KEY, true));
return $signStr;
}
//封装curl的调用接口,get的请求方式
function doCurlGetRequest($url,$timeout = 10) {
if($url == "" || $timeout <= 0){
return false;
}
$con = curl_init((string)$url);
curl_setopt($con, CURLOPT_HEADER, false);
curl_setopt($con, CURLOPT_RETURNTRANSFER,true);
curl_setopt($con, CURLOPT_TIMEOUT, (int)$timeout);
curl_setopt($con, CURLOPT_SSL_VERIFYPEER, false); //不验证证书
curl_setopt($con, CURLOPT_SSL_VERIFYHOST, false); //不验证证书
return curl_exec($con);
}
translate('中国','zh','en');
?>