Satogate 签名方法

1. 申请安全凭证

在第一次使用 API 之前,请申请安全凭证。安全凭证包括 ApiKey 和 ApiSecret:

  • ApiKey 用于标识 API 调用者身份
  • ApiSecret 用于加密签名字符串和服务器端验证签名字符串的密钥。
  • 用户必须严格保管安全凭证,避免泄露。

注意:每个账号最多可以拥有一对 SecretId/SecretKey。

2. 生成签名串

有了安全凭证ApiKey 和 ApiSecret后,就可以生成签名串了:

假设用户的 ApiKey 和 ApiSecret 分别是:

  • ApiKey: 11519269-5e35-****-****-09e355e00f77
  • ApiSecret: 0CDE6743F18F3DA********49FD47C1576671FD5

注意:这里只是示例,请根据用户实际申请的 ApiKey 和 ApiSecret 进行后续操作!

请求头(Request Header)信息如下:

参数名称 中文 参数值
FP-API-KEY 商户API KEY 11519269-5e35---09e355e00f77
FP-SIGN 商户请求签名串 zmmjn35mikh6pM3V7sUEuX4wyYM=
FP-TIMESTAMP 请求的发起或签名的时间戳(秒) 1681973331

请求参数可能如下:

参数名称 中文 参数值
Action 方法名 DescribeInstances
Nonce 随机正整数 11886
Region 实例所在区域 ap-guangzhou
InstanceIds.0 待查询的实例 ID ins-09dx96dg
Offset 偏移量 0
Limit 最大允许输出 20
Version 接口版本号 2017-03-12

2.1. 对参数排序

首先对所有请求参数按参数名的字典序( ASCII 码)升序排序。注意:1)只按参数名进行排序,参数值保持对应即可,不参与比大小;2)按 ASCII 码比大小,如 InstanceIds.2 要排在 InstanceIds.12 后面,不是按字母表,也不是按数值。用户可以借助编程语言中的相关排序函数来实现这一功能,如 PHP 中的 ksort 函数。上述示例参数的排序结果如下:

{
    'Action' : 'DescribeInstances',
    'InstanceIds.0' : 'ins-09dx96dg',
    'Limit' : 20,
    'Nonce' : 11886,
    'Offset' : 0,
    'Region' : 'ap-guangzhou',
    'Version': '2017-03-12',
}

使用其它程序设计语言开发时,可对上面示例中的参数进行排序,得到的结果一致即可。

2.2. 拼接请求字符串

此步骤生成请求字符串。将把上一步排序好的请求参数格式化成“参数名称=参数值”的形式,如对 Action 参数,其参数名称为 "Action" ,参数值为 "DescribeInstances" ,因此格式化后就为 Action=DescribeInstances 。注意:“参数值”为原始值而非 url 编码后的值。

然后将格式化后的各个参数用"&"拼接在一起,最终生成的请求字符串为:

Action=DescribeInstances&InstanceIds.0=ins-09dx96dg&Limit=20&Nonce=11886&Offset=0&Region=ap-guangzhou&Version=2017-03-12

2.3. 拼接签名原文字符串

此步骤生成签名原文字符串。签名原文字符串由以下几个参数构成:

  1. 请求方法: 支持 POST 和 GET 方式,这里使用 GET 请求,注意方法为全大写。
  2. 请求主机:查看实例列表(DescribeInstances)的请求域名为:cvm.tencentcloudapi.com。实际的请求域名根据接口所属模块的不同而不同,详见各接口说明。
  3. 请求路径: 当前版本云API的请求路径固定为 / 。
  4. 请求字符串: 即上一步生成的请求字符串。

签名原文串的拼接规则为:请求方法 + 请求主机 +请求路径 + ? + 请求字符串 + 时间戳

示例的拼接结果为:

GETapi.satogate.io/getAddress?Action=DescribeInstances&InstanceIds.0=ins-09dx96dg&Limit=20&Nonce=11886&Offset=0&Region=ap-guangzhou&SecretId=AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******&Timestamp=1465185768&Version=2017-03-121681973331

2.4. 生成签名串

此步骤生成签名串。首先使用 HMAC-SHA1 算法对上一步中获得的签名原文字符串进行签名,然后将生成的签名串使用 Base64 进行编码,即可获得最终的签名串。

具体代码如下,以 PHP 语言为例:

$apiSecret = '0CDE6743F18F3DA********49FD47C1576671FD5';
$srcStr = 'GETcvm.tencentcloudapi.com/?Action=DescribeInstances&InstanceIds.0=ins-09dx96dg&Limit=20&Nonce=11886&Offset=0&Region=ap-guangzhou&SecretId=AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******&Timestamp=1465185768&Version=2017-03-121681973331';
$macHex = hash_hmac('sha1', $srcStr, $apiSecret, false); // 十六进制字符串
$signStr = base64_encode($macHex);
echo $signStr;

最终得到的签名串为:

zmmjn35mikh6pM3V7sUEuX4wyYM=

使用其它程序设计语言开发时,可用上面示例中的原文进行签名验证,得到的签名串与例子中的一致即可。

3. 发起请求

生成的签名串放置在请求头(Request Header)中,参数名为FP-SIGN

4. 签名失败

根据实际情况,存在以下签名失败的错误码,请根据实际情况处理。

错误代码 错误信息 错误描述
10027 Signature expire 签名过期
10015 Api Key not found Api Key不存在
10016 Invalid Signature 签名错误

results matching ""

    No results matching ""