您的位置:首页 > 大数据 > 人工智能

腾讯AI加速器之API云接口调用签名方法

2017-06-26 00:00 1711 查看
<?php
$secretKey = 'Gu5t9xGARNpq86cd98joQYCN3Cozk1qA';//换成你的secretKey
$secretId = 'AKIDz8krbsJ5yKBZQpn74WFkmLPx3gnPhESA';//换成你的secretId
$action = 'GetVideoInfo';//换成你需要的接口名
$queryString = 'a=b&c=d';//换成接口参数列表
$method = 'GET';//GET或POST

$rand = rand(100,10000000);
$time = time();

$url = 'vod.api.qcloud.com/v2/index.php?Action=' . $action . '&Nonce=' . $rand . '&Region=gz&SecretId=' . $secretId . '&SignatureMethod=HmacSHA256&Timestamp=' . $time . '&' . $queryString;
$srcStr = $method . $url;
$signStr = base64_encode(hash_hmac('sha256', $srcStr, $secretKey, true));
$url .= "&Signature=" . urlencode($signStr);
echo "rand:" . $rand . "\n";
echo "time:" . $time . "\n";
echo $signStr . "\n";
echo urlencode($signStr);

echo "url:\n" . "https://" . $url . "\n";
?>

接口调用签名方法https://www.qcloud.com/document/api/377/4214

接入流程

内测期间,项目以邀请制、申请审核制入驻。

1. 成为开发者

第一种方式:点击平台顶部导航栏右侧登录,将会跳转到登录界面,登录完毕后会返回至平台首页,再点击顶部导航栏右侧控制台即可进入控制台页面;

第二种方式:直接点击免费试用,登录完毕后立即跳转至控制台页面。

2. 创建应用

在控制台页面,您可在「应用」板块点击创建应用,填写应用的相关信息,勾选所需的AI技术服务,完成应用的创建。
(*注:您最多可以创建100个应用,在创建应用的表单中,您可以自行勾选所需的AI技术接口,最多可以为应用开放所有的接口权限。)

3. 获取密钥

在您的应用创建完毕后,您可在应用详情中查看到此应用的接入凭证,主要为AppID、AppKey。
以上两个字段信息是您应用实际开发的主要凭证,每个应用唯一标示,互不相同,请您妥善保管。

4. 生成签名

您的应用在调用平台AI技术接口之前,首先需要获取接口鉴权签名。
您需要使用应用所分配到的AppID、AppKey,进行接口鉴权签名的生成,方法详见接口鉴权

5. 启动开发

目前各项服务我们都开放了REST API形式的服务,您可以点击「文档中心」页各技术服务的文档,查看具体调用参数及方法。
基础文本分析API | 语义解析API | 情感分析API | 机器翻译API| 智能闲聊API | 语音识别API | 语音合成API | 图片识别API
7fe0

接口鉴权

简介

本文档主要针对需要集成HTTP API的技术研发工程师。

腾讯开放平台HTTP API使用
签名机制
对每个接口请求进行权限校验,对于校验不通过的请求,API将拒绝处理,并返回鉴权失败错误

接口调用者在调用API时必须带上接口请求签名,其中签名信息由接口请求参数和应用密钥根据本文提供的签名算法生成。

签名算法

算法实现

签名算法采用MD5摘要方式实现,步骤如下:

假设参与签名计算的参数对为集合M,其中参数值为空的参数对不允许出现在集合M中

将集合M中的参数对按参数名进行字典升序排序,得到有序的参数对列表N

以升序方式将列表N中的参数对按URL键值对的格式拼接成字符串,得到字符串T(如:key1=val1&key2=val2)

将应用密钥以app_key为键名,组成URL键值拼接到字符串T末尾,得到字符串S(如:key1=val1&key2=val2&appkey=密钥)

对字符串S进行MD5摘要计算,得到长度为32位的字母数字格式的原始签名字符串

将原即签名字符串所有字母转换成大写,最终得到接口请求签名

注意事项

在实现本文签名算法时,请注意如下事项:

签名有效期5分钟

参数名区分大小写

参数值为空(即空字符串)不参与签名

URL键值拼接时,需要先对值部份进行URL编码

示例

获取应用密钥

本示例假设应用密钥为:
a95eceb1ac8c24ee28b70f7dbba912bf


关于如何获取应用密钥,请查阅新手指引 - 接入流程

接口请求参数

假设接口请求参数如下,其中sign字段仅用于存放接口请求签名,待计算。

参数名参数值备注
text腾讯开放平台接口请求数据,UTF-8编码
app_id10000应用标识
time_stamp1493449657请求时间戳(秒级),用于防止请求重放(保证签名5分钟有效)
nonce_str20e3408a79请求随机字符串,用于保证签名不可预测
sign请求签名,待计算

获得参数对集合M(未排序)

依照算法第一步要求,集合M包含的参数对如下。

参数名参数值
text腾讯开放平台
app_id10000
time_stamp1493449657
nonce_str20e3408a79

获得参数对列表N(字典升级排序)

依照算法第二步要求,对集合M进行排序,得到参数对列表N如下。

参数名参数值
app_id10000
nonce_str20e3408a79
text腾讯开放平台
time_stamp1493449657

按URL键值拼接字符串T

依照算法第三步要求,将参数对列表N的参数对进行URL键值拼接,得到字符串T如下:

app_id=10000&nonce_str=20e3408a79&text=%E8%85%BE%E8%AE%AF%E5%BC%80%E6%94%BE%E5%B9%B3%E5%8F%B0&time_stamp=1493449657


拼接应用密钥,得到字符串S

依照算法第四步要求,将应用密钥拼接到字符串T的尾末,得到字符串S如下。

app_id=10000&nonce_str=20e3408a79&text=%E8%85%BE%E8%AE%AF%E5%BC%80%E6%94%BE%E5%B9%B3%E5%8F%B0&time_stamp=1493449657&app_key=a95eceb1ac8c24ee28b70f7dbba912bf


计算MD5摘要,得到签名字符串

依照算法第五步要求,对字符串S进行MD5摘要计算得到签名字符串如下。

171edf732a7d782d77137c2d878ccc9c

MD5计算示例:

$ str='app_id=10000&nonce_str=20e3408a79&text=%E8%85%BE%E8%AE%AF%E5%BC%80%E6%94%BE%E5%B9%B3%E5%8F%B0&time_stamp=1493449657&app_key=a95eceb1ac8c24ee28b70f7dbba912bf'
$ echo -n "$str" | md5sum
e8f6f347d549fe514f0c9c452c95da9d  -


最终接口请求签名

依照算法第六步要求,对签名字符串所有字母进行大写转换,得到接口请求签名,结束算法。

E8F6F347D549FE514F0C9C452C95DA9D


最终请求数据

在完成签名计算后,即可得到所有接口请求数据,进一步完成API的调用。

参数名参数值备注
text腾讯开放平台接口请求数据,UTF-8编码
app_id10000应用标识
time_stamp1493449657请求时间戳(秒级),用于防止请求重放
nonce_str20e3408a79请求随机字符串,用于保证签名不可预测
signE8F6F347D549FE514F0C9C452C95DA9D请求签名
以下为机器翻译接口鉴权调用事例:

POST请求:

<?php
/**
* Created by 小雨在线
* User: 飛天
* Date: 2017/6/26 0026
* Time: 17:49
*/

$text = "中华人名共和国公民";  //接口请求数据,UTF-8编码
$app_id = 110****762; //应用标识 int正整数
$time_stamp = time();  //请求时间戳(秒级),用于防止请求重放(保证签名5分钟有效) int正整数
$nonce_str = generateRandomString(10);  //请求随机字符串,用于保证签名不可预测 string 非空且长度上限32字节

$params = array(
"text" => $text,
"app_id" => $app_id,
"time_stamp" => $time_stamp,
"nonce_str" => $nonce_str,
"type" =>0
);

$url = "https://api.ai.qq.com/fcgi-bin/nlp/nlp_texttrans";

ksort($params); //字典升级排序

$paramstring = http_build_query($params);

$strpram = $paramstring . "&app_key=p3jqgyhy6*****pEM"; //拼接应用密钥,得到字符串S

$md5str = strtoupper(md5($strpram)); //计算MD5摘要,得到签名字符串对其所有字母进行大写转换

$params2 = array(
"text" => $text,
"app_id" => $app_id,
"time_stamp" => $time_stamp,
"nonce_str" => $nonce_str,
"type" =>0,
"sign" =>$md5str
);

$paramstring2 = http_build_query($params2);

$json_data = postData($url, $paramstring2);

echo $json_data;

/**
* @param $url
* @param $data
* @return mixed
*/
function postData($url, $data)
{
$ch = curl_init();
$timeout = 300;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$handles = curl_exec($ch);
curl_close($ch);
return $handles;
}

/**
* @param int $length
* @return string
*/
function generateRandomString($length = 10)
{
$characters = '0123456789abcdefghijklmnopqrstuvwxyz';
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, strlen($characters) - 1)];
}
return $randomString;
}


GET 请求:

<?php
/**
* Created by 小雨在线
* User: 飛天
* Date: 2017/6/26 0026
* Time: 14:44
*/

$text = "我是中国人,我爱我的祖国";  //接口请求数据,UTF-8编码
$app_id = 110****62; //应用标识 int正整数
$time_stamp = time();  //请求时间戳(秒级),用于防止请求重放(保证签名5分钟有效) int正整数
$nonce_str = generateRandomString(10);  //请求随机字符串,用于保证签名不可预测 string 非空且长度上限32字节

$params = array(
"text" => $text,
"app_id" => $app_id,
"time_stamp" => $time_stamp,
"nonce_str" => $nonce_str,
"type" =>0
);

ksort($params); //字典升级排序

$urlstr = http_build_query($params); //按URL键值拼接字符串T

$strpram = $urlstr . "&app_key=p3jqg*****lQKpEM"; //拼接应用密钥,得到字符串S

$md5str = strtoupper(md5($strpram)); //计算MD5摘要,得到签名字符串对其所有字母进行大写转换

/**
* @param int $length
* @return string
*/
function generateRandomString($length = 10)
{
$characters = '0123456789abcdefghijklmnopqrstuvwxyz';
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, strlen($characters) - 1)];
}
return $randomString;
}

$purl = "https://api.ai.qq.com/fcgi-bin/nlp/nlp_texttrans?app_id={$app_id}&time_stamp={$time_stamp}&nonce_str={$nonce_str}&sign={$md5str}&type=0&text={$text}";

//初始化
$ch = curl_init();

//设置选项,包括URL
curl_setopt($ch, CURLOPT_URL, $purl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);

//执行并获取HTML文档内容
$output = curl_exec($ch);

//释放curl句柄
curl_close($ch);

//打印获得的数据
print_r($output);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: