腾讯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_id | 10000 | 应用标识 |
time_stamp | 1493449657 | 请求时间戳(秒级),用于防止请求重放(保证签名5分钟有效) |
nonce_str | 20e3408a79 | 请求随机字符串,用于保证签名不可预测 |
sign | 请求签名,待计算 |
获得参数对集合M(未排序)
依照算法第一步要求,集合M包含的参数对如下。参数名 | 参数值 |
---|---|
text | 腾讯开放平台 |
app_id | 10000 |
time_stamp | 1493449657 |
nonce_str | 20e3408a79 |
获得参数对列表N(字典升级排序)
依照算法第二步要求,对集合M进行排序,得到参数对列表N如下。参数名 | 参数值 |
---|---|
app_id | 10000 |
nonce_str | 20e3408a79 |
text | 腾讯开放平台 |
time_stamp | 1493449657 |
按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_id | 10000 | 应用标识 |
time_stamp | 1493449657 | 请求时间戳(秒级),用于防止请求重放 |
nonce_str | 20e3408a79 | 请求随机字符串,用于保证签名不可预测 |
sign | E8F6F347D549FE514F0C9C452C95DA9D | 请求签名 |
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);
相关文章推荐
- 腾讯AI加速器之API云接口-自然语言处理-基础文本分析-接口调用
- App开放接口api安全性—防腾讯签名sign的设计与实现
- (转)Arcgis API常用接口调用方法
- 腾讯AI开放平台的接口调用指南
- APP调用微信支付接口-服务端二次签名失败原因及解决方法
- Android 反射、代理调用系统隐藏API方法与接口类连接Wi-Fi
- .Net MVC ,Web Api 可以根据方法名去调用方法;同个api接口可以调用多个方法
- python3调用腾讯AI开放平台API
- python在线调用AI平台API的几种方法
- 基于Restful接口的网络API接口调用方法
- App开放接口api安全性—Token签名sign的设计与实现
- 最近工作需要写了一个JS类 页面统一调用API接口数据并计算显示
- 支付宝即时到账接口调用签名验证失败
- Java 常调用的Webservice接口的方法
- 如何写出安全的API接口?接口参数加密签名设计思路
- 【转载】PIO函数接口的调用方法
- 调用腾讯接口,获取电脑ip,所在省份城市[PHP实现]
- Zend Framework接口调用的方法
- java 生成js接口签名 页面调用JS-SDK
- 免费电子面单Api_快递鸟接口JAVA对接调用案例