签名
基于安全考虑,我们要求所有的 IOTPay API 请求都必须经过签名。
此签名应作为每个 API 请求的一部分包含在内。
签名算法
示例: var ex_body= { "c":"cat", "a":"apple", "b":"boat", "d":""};
步骤 1:
从复制的请求主体对象中删除所有值为空的键值对
ex_body= { "c":"cat", "a":"apple", "b":"boat"};
步骤 2:
按升序的词典序(a,b,c,...,z)对结果主体进行排序
ex_body= {"a":"apple" "b":"boat", "c":"cat"};
步骤 3:
将结果主体连接成新字符串,格式为 URL 参数 "key1=value1&key2=value2"
mystr="a=apple&b=boat&c=cat"
步骤 4:
将您的商户密钥(在 IOTPay 入门过程中分配给您)附加到 mystr
的末尾
mystr+="&key={your_merchant_key}"
步骤 5:
对 mystr
进行 MD5 哈希,然后将哈希结果转换为全大写字母。这就是您的 sign
sign = toUpper(md5(mystr));
步骤 6:
将 sign
的值附加到原始请求主体
ex_body.sign = sign; // 现在您可以发送签名请求
//发送请求前的 ex_body
{"a":"apple", "b":"boat", "c":"cat", "sign": "DAC619FA1BC9526EBDA688A9DC842B7A"};
推荐: 使用 签名验证器 来确认您的签名结果是否正确
步骤 7 (条件性):
仅当满足以下所有条件时,您可能需要执行一个额外的步骤:
您已经完成了步骤 1-6,并仍然遇到签名验证错误
请求中存在
subject
且不为空subject
包含非 UTF8 编码的字符如果所有上述条件都适用,则应对
subject
的内容进行 URL 编码,并覆盖原始值;如下所示:ex_body.subject = url_encode(ex_body.subject);
步骤 8 (条件性):
为 body
字段重复执行步骤 7
步骤 9:
Info
如果端点是用于信用卡,则跳过此步骤,否则必须执行。
在验证了 sign 值后,使用 json_encode 将 json 对象串联起来,然后与 param = 连接。
params={"a":"apple", "b":"boat", "c":"cat", "sign": "DAC619FA1BC9526EBDA688A9DC842B7A"}
使用头部 Content-Type: application/x-www-form-urlencoded
发送请求。