5.4.5 城市节点网关Xuperchain API
5.4.5.1 应用接入签名算法
链下业务系统向城市节点网关发送交易请求时,需使用应用接入密钥对中的私钥对交易请求报文进行数字签名,节点网关接收到交易请求报文后,使用已上传或托管的密钥对中的公钥对该报文进行验签。只有在交易报文验签通过时,网关才会对交易请求报文进行后续的交易处理。具体签名算法如下:
1. 组装签名字符串
将请求参数按照文档参数表格中的顺序转换为字符串进行拼接,其中请求参数优先拼接Header中的UserCode、AppCode;返回参数优先拼接code、msg,然后再次按照文档参数顺序拼接Body中的参数。
2.不同类型的转换格式
类型 | 规则 | 示例 | 结果 |
---|---|---|---|
String | 不转换 | abc | abc |
int/int64/long | 十进制转换 | -12 | -12 |
float | 十进制转换,小数位参考备注 | 1.23 | 1.23 |
bool | 转换为“true”或者“false” | true | true |
Array | 按照参数顺序和类型拼接 | [“abc”,”xyz”] | abcxyz |
Map[key]value | 按照顺序拼接key和value | [“a”:1,”b”:2] | a1b2 |
Object | 将对象内的属性按照文档循序依据上述格式转换 | {“name”:”abc”,”secret”:”123456”} | abc123456 |
- 哈希值计算:将需要签名的字符串按照UTF-8编码做SM3计算;
- 对哈希值获取签名:将哈希值与私钥进行SM2签名计算;
- 将签名结果做Base64计算。
4. 示例参数
{
"header":{
"userCode":"user01",
"appCode":"app01"
},
"mac":"",
"body":{
“userId”:”abc”,
”list”:[“abc”,”xyz”]
}
}
结果:user01app01abcabcxyz