企迈云开放平台 API 会对每个访问的请求进行身份验证,即每个请求都需要在公共请求参数中包含签名信息以验证用户身份。签名信息由用户所执有的安全凭证生成,安全凭证包括 openId、grantCode 和 openKey,若用户还没有安全凭证,请联系企迈云开放平台客服,否则就无法调用API接口。
1. 生成签名串
有了安全凭证 openId、grantCode 和 openKey 后,就可以生成签名串了。下面给出了一个生成签名串的详细过程。
假设用户的 openId、grantCode 和 openKey 分别是:
openId: d14c1559e87b747d577c834b275a4310
grantCode: ba67d4fa46
openKey: LyvrkvkxRkG2R6aM55bXpPwjYAbkEXTbVnKwfDYvVHjNwNFAmx
注意:这里只是示例,请用户根据自己实际的 openId、grantCode 和 openKey 和请求参数进行后续操作!
当用户调用接口时,其请求参数可能如下:
参数名称 |
中文 |
参数值 |
openId |
密钥Id |
d14c1559e87b747d577c834b275a4310 |
grantCode |
授权code |
ba67d4fa46 |
timestamp |
当前时间戳 |
1465185768 |
nonce |
随机正整数 |
11886 |
1.1. 对参数排序
首先对所有请求参数按参数名做字典序升序排列,所谓字典序升序排列,直观上就如同在字典中排列单词一样排序,按照字母表或数字表里递增顺序的排列次序,即先考虑第一个“字母”,在相同的情况下考虑第二个“字母”,依此类推。您可以借助编程语言中的相关排序函数来实现这一功能,如 php 中的 ksort 函数。上述示例参数的排序结果如下:
{
"grantCode" : "ba67d4fa46",
"nonce" : 11886,
"openId" : "d14c1559e87b747d577c834b275a4310",
"timestamp" : 1465185768
}
1.2. 拼接请求字符串
此步骤生成请求字符串。
将把上一步排序好的请求参数格式化成“参数名称”=“参数值”的形式,如对openId参数,其参数名称为"openId",参数值为"d14c1559e87b747d577c834b275a4310",因此格式化后就为openId=d14c1559e87b747d577c834b275a4310。
注意:“参数值” 为原始值而非url编码后的值。
然后将格式化后的各个参数用"&"拼接在一起,最终生成的请求字符串为:
一个典型的接口请求如下:
grantCode=ba67d4fa46&nonce=11886&openId=d14c1559e87b747d577c834b275a4310×tamp=1465185768
1.3. 生成签名串
此步骤生成签名串。
首先使用签名算法(HmacSHA1)对上一步中获得的签名原文字符串进行签名,然后将生成的签名串使用 Base64 进行编码,即可获得最终的签名串。
具体代码如下,以 PHP 语言为例,由于本例中所用的签名算法为HmacSHA1,因此生成签名串的代码如下:
一个典型的接口请求如下:
$openKey = 'LyvrkvkxRkG2R6aM55bXpPwjYAbkEXTbVnKwfDYvVHjNwNFAmx';
$srcStr = 'grantCode=ba67d4fa46&nonce=11886&openId=d14c1559e87b747d577c834b275a4310×tamp=1465185768';
$signStr = base64_encode(hash_hmac('sha1', $srcStr, $openKey, true));
echo $signStr;
最终得到的签名串为:
rQ861PA1ledQ4VhZXY6WAjlZfD0=
使用其它程序设计语言开发时, 可用上面示例中的原文进行签名验证, 得到的签名串与例子中的一致即可。
2. 签名串编码
生成的签名串并不能直接作为请求参数,需要对其进行 URL 编码。
如上一步生成的签名串为rQ861PA1ledQ4VhZXY6WAjlZfD0=,则其编码后为:
rQ861PA1ledQ4VhZXY6WAjlZfD0%3D。因此,最终得到的签名串请求参数 (token) 为:
rQ861PA1ledQ4VhZXY6WAjlZfD0%3D
2. 签名串有效时间
生成的签名串有效时间为300秒。