开放API鉴权方式
最后更新于
最后更新于
以下为支持的开放API列表:
所有开放API均需要走本文所述的签名流程, 在HTTP Header中传入以下三个参数:
appKey
商户后台产生的appkey
timestamp
时间(毫秒)
signToken
签名
其中签名流程及规则如下:
秘钥管理处生成app_key, app_secret, 保存在服务端pay_merchant_secret表中,并透出给商户。
商户使用在请求Header中传入appKey:secret_key123进行查询接口调用。
增删改接口在传入 2 步骤中的appKey的同时还需要用商户私钥签名和时间戳(都是在 Header中传入,如signToken:sign123, timestamp=1704643200000(ms))。
商户端拼接待签名字符串,拼接内容: 时间戳(单位ms)_URI_param
对以上待签名字符串进行使用私钥签名(私钥生成方式),作为signToken。
URI为Path部分,比如 /service-pay/sellerApi/getMerchantByUsername
请求将参数及其值拼接成一个字串参数名和参数值用=连接(按字母ASCII 码升序排序,首字母相同则对比下个字母,如前面全部一致短的排在先)
如 get 请求参数: ?aparam=2&aaparam=3&username=4802097272&abparam=1 处理完后为:aaparam=3&abparam=1&aparam=2&username=4802097272
如 post 请求参数如下 {"username":"4802097272","aparam":"2","abparam":"1","aaparam":"3"}
处理完后为aaparam=3&abparam=1&aparam=2&username=4802097272
注意: 参数拼接过程在调用者应当发生在参数被URL Encoded之前;拼接的参数不需要经过URL Encode,例如符号“&”,“:”或者中文等都应该保持原样。拼接过程与请求被传输过程中的编码过程是两件互不干扰的过程。
各部分内容用下划线"_" 连接一起作为完整拼接字符串
待签名参数示例: 以接口/service-pay/sellerApi/getMerchantByUsername接口为例
124124
/service-pay/sellerApi/getMerchantByUsername
null
124124_/service-pay/sellerApi/getMerchantByUsername_aaparam=3&abparam=1&aparam=2&username=4802097272
将'排序拼接后待签名字符串'的结果使用'商户私钥'产生一个SHA256withRSA摘要,并且以Base64编码,产生最终签名.
注意:将步骤3的结果传入SHA256withRSA进行计算时,要对字符串进行UTF8编码。以下为java代码示例
使用上文中的商户私钥, 产生的签名为