SparkPay OpenAPI 文档
简体中文
简体中文
English
简体中文
简体中文
English
快速指引
复制页面
产品介绍
快速指引
接入准备
接口加签说明
接入必读
接口规则
异步通知
接口错误码
网络与币种
对接场景
支付
关闭订单
API列表
统一收银台付款
POST
支付订单关闭
POST
支付订单查询
GET
统一收银台付款(专业版)
POST
支付订单查询(专业版)
GET
常见问题
通知相关问题
跳转失败问题
接口报错提示问题
测试币领取/测试网连接
对接示例
接口签名示例-Postman
接口签名示例-php
版本说明
版本说明
快速指引
复制页面
接口加签说明
接口加签,是指应用在调用SPARK OpenAPI时,需要通过公私钥对信息内容进行加签、验签,从而保证双方通信消息的安全性和真实性。
开发者需准备一对RSA公私钥(位数为2048,Base64编码,密钥以PKCS#8格式生成,公钥以X.509格式生成),通过SPARK商户后台将RSA公钥上传,支付平台进行验证通过后即可使用。
同时SPARK平台也会提供支付平台公钥,用于商户应用对支付平台返回的数据进行签名验签。请求和验签的过程如下:
1.
请求参数:中文编码为 UTF-8,类型为 String。
2.
请求业务报文发送前,需要商户应用使用自己的RSA私钥对请求业务报文进行签名。
3.
请求成功后,商户应用需要使用支付平台公钥对响应报文进行验签。
第三方工具生成公私钥
#
工具生成的公私钥内容,在上传商户公钥时,如果没有标准前后缀内容时需要补充标准前后缀格式内容。
https://www.devglan.com/online-tools/rsa-encryption-decryption
选择位数2048,自动生成一对公私钥内容。
签名算法
#
RSA介绍:
https://en.wikipedia.org/wiki/RSA_(cryptosystem)
RSA签名算法介绍:
https://cryptobook.nakov.com/digital-signatures/rsa-signatures
生成请求签名
#
1.
准备
需先登录商户平台,进入“应用”页查看商户应用的AppID。
上传完商户RSA公钥后,需要使用对应RSA私钥进行签名。
2.
构造签名串
根据请求参数构造的请求报文主体,数据格式为json格式。
请按照签名串格式(
'请求时间戳\n'+'请求随机串\n'+'请求报文主体\n'
)构造请求签名串。注意这里\n是换行符
3.
计算签名值
绝大多数编程语言提供的签名函数支持对签名数据进行签名。强烈建议商户调用该类函数,使用商户私钥对待签名串进行SHA256 with RSA签名,并对签名结果进行Base64编码得到签名值。
4.
设置HTTP头
Http头
说明
Sparkpay-App-Id
商户应用ID
Sparkpay-Nonce
请求随机串,同一商户应用ID5分钟内不应重复,否则open-api会拒绝这次请求
Sparkpay-Timestamp
请求时间戳(精确到秒)
Sparkpay-Signature
签名值
注意:
#
商户应用使用自己的RSA私钥对请求的业务参数json串进行签名。
签名值采用标准base64编码。
验证签名
#
1.
前置条件
获取支付平台公钥,登录商户平台,进入“应用”页即可下载。
2.
防止重放攻击
为了降低重放攻击的风险,在HTTP头Sparkpay-Timestamp中提供了生成签名的时间戳。若需要重新发送某个请求,Spark支付都会重新生成相应的时间戳和签名。
在验证签名之前,商户系统应检查时间戳是否已过期。我们建议商户系统允许最多5分钟的时间偏差。如果时间戳与当前时间的偏差超过5分钟,您应拒绝处理当前的响应。
3.
构造验签名串
HTTP头
Sparkpay-Timestamp
中值即为应答时间戳(精确到秒)。
HTTP头
Sparkpay-Nonce
中值即为应答随机串。
响应报文主体,请使用响应报文主体执行验签。对报文主体的任何篡改都会导致验证失败。
然后,请按照签名串格式(
'应答时间戳\n'+'应答随机串\n'+'响应报文主体\n'
)构造应答的验签名串。
4.
获取应答签名
HTTP头
Sparkpay-Signature
中值即为签名值。
5.
验证签名
绝大多数编程语言提供的签名验证函数支持对验签名串和签名进行签名验证。强烈建议商户调用该类函数,使用商户私钥对验签名串和签名进行SHA256 with RSA签名验证。
修改于
2024-08-15 10:06:15
上一页
接入准备
下一页
接口规则