支付API对接
支付API对接
统一支付接口,用户应该通过该接口来进行下单,该接口会返回对应的支付链接。
发起支付
接口说明
请求URL:请在后台API信息中查看
请求方式:POST
body 指该参数需在请求JSON传参请求参数
| 参数名 | 类型 | 必填 | 描述 |
|---|---|---|---|
| body appKey | string | yes | 后台API信息中的appKey |
| body amount | string | yes | 订单金额 |
| body channelCode | string | yes | 通道编码,详见通道文档 |
| body payMode | string | yes | 支付方式,详见通道文档 |
| body orderId | string | yes | 订单ID |
| body timestamp | long string | yes | 毫秒级时间戳,有效期为一分钟 |
| body nonceStr | string | yes | 随机字符串,UUID即可 |
| body signType | string | yes | 签名类型,固定为MD5 |
| body callbackUrl | string | yes | 回调URL |
| body sign | string | yes | 利用MD5签名,不可重复使用 |
| body attach | string | no | 附加信息,会在回调中回传 |
| body payInfo | jsonstring | no | 支付信息,在某些通道会用到,JSON字符串 |
签名方法
MD5(appKey+orderId+timestamp+nonceStr+appSecret),appSecret为后台API信息中的appSecret
参数示例
{
"appKey": "ThisIsYourAppKey",
"amount": "100",
"channelCode": "THIS_IS_CHANNEL_CODE",
"payMode": "WX_H5",
"orderId": "10002022010348281234",
"timestamp": 1647344736869,
"nonceStr": "57D1JD8SRH",
"signType": "MD5",
"callbackUrl": "http://www.callback-url.com/callback",
"sign": "3efbb814bf930afd6af301873a7b1ace"
}
注意
上述参数示例中,AppKey为 ThisIsYourAppKey ,AppSecret为 ThisIsYourAppSecret ,签名文本为 ThisIsYourAppKey10002022010348281234164734473686957D1JD8SRHThisIsYourAppSecret
返回示例
{
"msg": "操作成功",
"code": 0, // 状态码为0则为成功,其他皆为异常
"data": {
"androidPayUrl": "安卓异步查单的URL,用于获取真实的支付链接,直接用Get请求",
"iosPayUrl": "IOS异步查单的URL,用于获取真实的支付链接,直接用Get请求",
"expireTime": "2022-03-16T00:00:00"
},
"timestamp": 1647344736869 // 失败时会返回该字段,该字段为服务器当前时间戳
}
注意
下单接口并不会直接返回真实的支付链接,只是给一个异步查询真实链接的URL,应当通过URL获取真实链接
异步查询真实支付链接
请在支付页面间隔1秒轮询该接口查询真实的支付链接然后进行跳转
接口说明
请求URL:下单结果中返回的androidPayUrl/iosPayUrl,不再需要任何多余的传参
请求方式:GET
响应参数
| 参数名 | 类型 | 描述 |
|---|---|---|
| body code | int | 业务状态码,0为正常返回,其他皆为下单失败 |
| body msg | string | 系统提示信息,返回非0时可参考 |
| body data | string | 真实的支付URL,code=0且当该字段为空或没有该字段时,代表订单还未下单完成 |
示例响应
{
code: 0,
msg: '成功',
data: 'weixin://pay/xxxxxxxx'
}
回调
回调URL:下单时所传callbackUrl
回调方式:POST
回调时的RequestBody
{
"attach": "下单时传的attach",
"orderId": "下单时传的orderId",
"timestamp": "回调时的毫秒时间戳",
"sign": "MD5(orderId+timestamp+appSecret)"
}
最佳实践
被回调时应当校验签名,且保证timestamp和当前时间相差不超过一分钟,如果无法完成校验请返回HttpStatusCode>=300的响应,系统会重新回调
常见问题
Q: 下单提示
签名不可重复使用A: 请保证nonceStr是随机字符串,且每次下单都进行了签名
Q: 下单提示
签名过期A: 请检查timestamp和返回的timestamp的时间差,不能超过一分钟
Q: 提示
通道不支持该金额、通道不支持该支付模式A: 请查阅相关通道文档,并修改对应的
amount、payMode