签名规则
签名机制
签名生成流程
1.
2.
3.
4.
构造认证串 authString
规则说明
内容说明
${签名算法}空格app_id=${app_id},nonce=${nonce},timestamp=${timestamp}
参数说明
签名算法
,必传参数,RSA2或RSA或SM2,与app_id间隔一个空格。app_id
,必传参数,开放平台颁发的应用id,参考 应用介绍。nonce
,必传参数,随机字符串,每次请求需要保持唯一。财资云使用字段值用于防重放,nonce 值重复的请求很有可能被拒绝处理。timestamp
,必传参数,请求发起时间,使用Unix时间戳,精确到毫秒。财资云会拒绝处理过期10分钟后的请求,请保持商家自身系统的时间准确性。authString 示例
RSA2 app_id=2014060600164699,nonce=5f9fba93-bbb2-40f0-b328-04d5ead3e131,timestamp=1667804301218
构造待签名内容
普通请求
按照下述拼接规则,将需要签名的数 据拼接为字符串。
${authString}\n
${httpMethod}\n
${httpReuqestUrl}\n
${httpRequestBody}\n
authString
:步骤1中生成的认证串 authString。httpMethod
:本次请求的 http 方法,例如 GET\POST\PUT 等。httpReuqestUrl
: 本次请求的 uri 信息,包括 queryString,不包括域名,例如 /v3/cfs/settlement/payment/query?trade_no=123。httpRequestBody
:本次请求的 body 内容。当使用GET等请求时,body 为空,该值传入空字符串,即""。RSA2 app_id=2014060600164699,timestamp=1655869956477,nonce=eb4ade8f-8cfa-4ebf-a048-7eb52684ab32,expired_seconds=120
POST
/v3/cfs/settlement/payment/create?trade_no=123
{"trade_amount": "1000","out_trade_no": "FKD12345678"}
RSA2 app_id=2014060600164699,timestamp=1655869956477,nonce=eb4ade8f-8cfa-4ebf-a048-7eb52684ab32,expired_seconds=120
GET
/v3/cfs/settlement/payment/query?trade_no=123
文件上传请求
具体格式同普通请求,其中 httpRequestBody 使用 multpart 中的 data 参数,具体参考 文件上传。
计算签名
SHA256withRSA
和 SM3WithSM2
两种,计算逻辑为: 使用签名算法对上文中得到的 content
计算签名,得到 byte
数组,然后将 byte
数组通过 Base64
方法编码得到字符串。java 计算 RSA 签名示例:
we4W72MTS/icITRWbuYxKkRShl2KTsA6W0m28Wd5VH9entVVzBkenQOJ2MOOCb4izOdBqdH+LlBfqVGygjrgQQFD3bhVH8KwsoWtFBXsXNTLDvPXl2xDn0mejJP2hHCI7sCEmGPGqZ94YOZB5o7QZEEme05ImJjg6nFbir7oE0UszB2N3IgV080BU/dsmnaLKHHNOcnJ4Jj3cyYfFG+mJwaESDv07X5YGkHHiRKpfMeuXIKXLabBWGabpPv+fwkX0OP3hvew8QMQBZ1D30r2TdDzyCF/lxkA3HmFEV1EMhRrTA3+HS9ChZRn7p/8aCZ/IdkfGj1I63it73NmpUfmgA==
将签名信息添加到请求
具体请求头及对应值规则如下:
authorization: ${authString},sign=${signature}
签名算法,计算签名时使用的算法,目前支持 SHA256withRSA、SM3withSM2。