Appearance
接口规则
协议规则
- 传输方式:采用HTTP传输(生产环境建议HTTPS)
- 内容类型:
application/json - 字符编码:
UTF-8 - 签名算法:
RSA2(密钥长度2048位) - 签名用途:确保请求 / 响应数据的完整性(未被篡改)和真实性(确实来自平台 / 商户)
- 密钥对:平台和商户各自持有一对密钥(私钥用于签名,公钥用于验签)
参数规范
- 商户订单号:同一商户号下的订单号不可重复
- 应用Id:注册进入商户后台创建app获取
- 接口版本:当前版本固定v1.0
- 签名类型:当前v1.0版本仅支持RSA2
- 交易金额:支持小数点后6位
- 枚举类型:ChainTypeEnum(链)、CurrencyTypeEnum(币种)
签名算法
签名生成的规则1. 收集待签名参数
提取请求中所有 非空参数(
null或空字符串""需排除)不包含
sign字段本身(避免自签名)示请求支付系统参数如下:
json{ "mchNo": "M1751937702", "appId": "688acab1e4b06988f93da059", "mchOrderNo": "4f-2359-4995-b5b6-e3e41ccd40d8", "amount": 12.11, "currency": "USDC", "network": "Solana", "goods": { "goodsName": "T-Shirt", "goodsDetail": "A comfortable cotton t-shirt with a modern design.", "goodsType": "shop" }, "mchUserId": "McDonald's", "bizCode": 0, "version":"v1.0", "signType":"RSA2" }
2. 参数排序
- 按 参数名 ASCII 码升序 排序(字典序)
- 示例排序后:
amount→appId→bizCode→currency→goods→mchNo→mchOrderNo→mchUserId→network→signType→version
3. 拼接为待签名字符串
格式:
key1=value1&key2=value2&...&keyN=valueN注意:
键值对直接拼接,无空格
金额数值类型注意小数位
必须将
Goods转换为标准 JSON 字符串(双引号、键值对格式)bizCode【Integer类型】:通道编号,不确定时不要传,由接口自动适配
示例如下:
textamount=12.11&appId=688acab1e4b06988f93da059&bizCode=0¤cy=USDC&goods={"goodsName":"T-Shirt","goodsDetail":"A comfortable cotton t-shirt with a modern design.","goodsType":"shop"}&mchNo=M1751937702&mchOrderNo=4f-2359-4995-b5b6-e3e41ccd40d8&mchUserId=McDonald's&network=Solana&signType=RSA2&version=1.0
4. 生成签名
- 使用 商户私钥 对上述字符串进行 RSA2 签名(SHA256 哈希 + RSA 加密)
- 签名结果需进行 Base64 编码
5. 附加签名到请求
将生成的签名放入
sign字段,与其他参数一起发送最终请求参数包含sign
json{ "mchNo": "M1751937702", "appId": "688acab1e4b06988f93da059", "mchOrderNo": "4f-2359-4995-b5b6-e3e41ccd40d8", "amount": 12.11, "currency": "USDC", "network": "Solana", "goods": { "goodsName": "T-Shirt", "goodsDetail": "A comfortable cotton t-shirt with a modern design.", "goodsType": "shop" }, "mchUserId": "McDonald's", "bizCode": 0, "version":"v1.0", "signType":"RSA2", "sign":"SLvwl4CZ5AaG+ebwitK4PHtvMhqXKEOVJnpgENOdmvv3BGhEG/kQesTksDgG7MJd4SScMvXqAzCA5LX/FS3vLb4u35FB/08+9PPX4CSsFQNM6iRKvBQ1YAxMHO4lIlaJCAU+BpX8h0N/qqR8v23H8OEEYlk1vYerZmy3wTuPvsV4nVdhb3bGI73UIfHau+MOVPPcxRTiy4TCj7g+M19hK1JJdyAw5OMjpeljna98hayYj0aiTxHsl/bTI55Yc+QbyVXnZYMQ0xzvyOMH569JFM8RPhVmlxMq1N1y1dwtiFlK9gDmO/IB6SV9V22GOs5xbZ7CCrukQjSrRc0LXgQjqA==" }
返回码
| code | 描述 |
|---|---|
| 0 | 成功 |
| 9999 | 异常,具体错误详见msg字段 |