签名算法
#
1. 描述API网关将验证每个API请求的标识,服务器还将验证调用参数是否有效。因此,每个HTTP请求都必须包含签名信息。具有无效签名的请求将被拒绝。
API网关通过分配给应用程序的令牌来验证请求的标识。该令牌用于在HTTP请求和服务器生成签名字符串,必须严格保密。
如果您手动编写HTTP请求(而不是使用官方的SDK),则需要理解以下签名算法。
生成签名的过程如下:
- 根据ASCII表中的参数名称对所有请求参数(包括系统和应用程序参数,但除了“签名”和具有字节数组类型的参数)进行排序。例如:
- 将排序的参数及其值连接到字符串中。例如:
- 在连接的字符串的前面添加API名称。例如,添加API名称“/test/API”:
- 用UTF-8格式对连接的字符串进行编码,并通过签名算法进行摘要(使用HMAC_SHA256)。例如:
- 将摘要转换为十六进制格式。例如:
#
2. 示例Please find below some samples on how to caculate signature based on token(secret), API, and parameters.
请在查看下面有关基于令牌(密钥)、API和参数计算签名的示例。
#
2.1. PYTHON#
2.2. JAVA#
2.3. C#有关其他编程语言中的签名示例代码,请参考官方SDK的源代码。
#
3. 如何获得令牌您可以通过登录到API网关来找到用于生成签名的令牌(密钥)。
在上面的示例中,186d6c953c90f39c2973e6dd2e110d4057194996ef08fb4b3338180517b509c7
是令牌。
#
4. 如何调试签名错误?在沙箱中有两中调试方法。
#
4.1. DO_NOT_CHECK您可以通过将签名算法设置为DO_NOT_CHECK
来禁用具有测试目的的签名算法。
#
4.2. Echo Signature Modeinfo
如果Echo Signature Mode
打开,所有API将处于回波模式,每个API调用的响应将只使用有效签名和HMAC_SHA256的输入字符串。
在网关的集成->配置
菜单下,您可以打开或关闭此签名计算模式。
当签名计算模式打开时,网关将使用发送到网关的任何请求来计算签名,并且在哈希之前的计算签名和原始字符串将返回给客户端,以协助客户端验证签名算法的实现。
下面是打开签名计算模式后的返回值的一个示例。
In the note field there is the original concatenated string before the HMAC-SHA256 operation, and there is the calculated hash value in the reference field.
在note
字段中,有在HMAC-SHA256操作之前的原始连接字符串,并且在参考字段中有计算出的哈希值。
#
5. 参考设计- https://github.com/ksher-solutions/payment_sdk_nodejs/blob/main/src/utils.js - https://github.com/ksher-solutions/payment_sdk_python/blob/main/ksherpay/order.py