二码合一 支持微信、支付宝App和手机系统浏览器扫码支付
支付场景
医院his确定金额,调用平台接口获得聚合码URL,通过自助设备展现聚合码,由用户使用第三方支付软件(微信、支付宝)进行付款
接入指引
微信
渠道使用公众号JSAPI支付模式,需要医院申请微信公众号。由于JSAPI支付下单接口需要提供用户OpenId参数,所以需要医院提供公众号AppSecret参数,如果医院不能提供此参数,那么必须将微信AuthURL作为参数。在下单时提交,并且在接收微信回调,取得OpenId后,再次跳转到URL:https://online.bsoftpay.com/gatewayOnline/page/qrCode/weChat
(测试环境URL:http://onlinetest.bsoftpay.com/gatewayOnline/page/qrCode/weChat
)并带上参数openId
和state
支付宝
渠道使用H5支付模式,需要医院申请支付宝H5支付方式。因为支付宝H5支付可以在支付宝App内和支付宝App外都可以唤起支付宝收银台,所以如果是使用手机系统浏览器扫码时,点击支付按钮也是调用支付宝渠道进行支付。
API列表
获取聚合码
- 功能码:P7007
- 接口说明:根据订单信息,获取聚合码
- 请求参数:
<xml>
参数 |
名称 |
类型 |
长度 |
是否必填 |
说明 |
示例 |
payAppMode |
app模式 |
String |
8 |
是 |
公众号模式或小程序模式 |
公众号聚合码:mp 小程序聚合码 union |
merchantNo |
商户号 |
String |
32 |
是 |
医院商户号 |
109900020001 |
username |
支付者姓名 |
String |
32 |
否 |
付款者姓名 |
张三 |
totalAmt |
支付金额 |
Price |
7.2 |
是 |
以元为单位 |
0.01 |
orderSubject |
商品标题 |
String |
42 |
是 |
如:门诊、住院预交、住院结算、自助缴费等 |
自助挂号 |
orderDetail |
商品描述 |
String |
127 |
是 |
如:门诊挂号、门诊结算、住院预交、住院结算、自助挂号、自助结算、自助住院预交等 |
呼吸科普通挂号 |
subMerchant |
分店号 |
String |
30 |
否 |
商户内部区分订单字段 |
109900020001 |
mobile |
手机号码 |
String |
32 |
否 |
用户手机号 |
13211112222 |
expireDate |
时效时间点,此时间点后时效 |
String |
32 |
否 |
yyyy-MM-dd HH:mm:ss |
2000-01-01 00:00:00 |
timeout |
时效分钟 |
String |
32 |
否 |
几分钟后时效 |
5 |
urlSuccess |
支付成功跳转页面 |
String |
200 |
否 |
目前微信和支付宝都不再支持 |
http://xxx.merchantno.com/pay/success |
urlFail |
支付失败跳转页面 |
String |
200 |
否 |
目前微信和支付宝都不再支持 |
http://xxx.merchantno.com/pay/fail |
remark |
备注 |
String |
32 |
否 |
备注 |
109900020001 |
notifyURL |
自定义支付结果通知地址 |
String |
128 |
否 |
单独为此订单配置的支付结果通知地址 |
http://test.com/callback |
order_no |
业务单号 |
String |
48 |
是 |
商户业务系统的唯一订单号 |
BX20190722902141 |
weChatAuthURL |
微信AuthURL |
String |
128 |
否 |
如果不能提供微信公众号AppSecret或者不能配置网页授权域名 需要提供此url,微信会带着认证code 和订单信息state 来请求此url,在callback中调用微信接口获取用户openId后,再跳转http://online.bsoftpay.com/gatewayOnline/page/qrCode/weChat?openId=XXX&state=XXX (测试环境为:http://onlinetest.bsoftpay.com/gatewayOnline/page/qrCode/weChat ) |
http://xxx.merchantno.com/authCallback |
alipayAuthURL |
支付宝AuthURL |
String |
128 |
否 |
因为支付宝基于H5支付 此参数暂时没有使用到 |
http://xxx.merchantno.com/authCallback |
参数 |
名称 |
类型 |
长度 |
必输 |
说明 |
示例 |
return_code |
返回状态码 |
String |
16 |
否 |
0000代表成功 其他 代表失败 |
0000 |
return_msg |
返回信息 |
String |
128 |
否 |
返回信息 |
OK |
qr_code |
聚合码字符串 |
String |
256 |
否 |
根据此字符串创建二维码 |
http://onlinetest.bsoftpay.com/gatewayOnline/page/qrCode/64?timestamp=20221025142732&sign=pGkHjoNBriwsioV1Vbzx22lFqQvv4x3%2B8oKPsEaTL5ofjyipLK%2F2djl33AoJ%2BVrg1DecLInZo7QflnuIYEbPAg%3D%3D |
<xml>
<payAppMode>mp</payAppMode>
<merchantNo>809900000025</merchantNo>
<username>测试用户</username>
<order_no>809900000025-20221121-349990</order_no>
<totalAmt>0.01</totalAmt>
<orderSubject>一二三四五六七八九十</orderSubject>
<orderDetail>一二三四五六七八九十</orderDetail>
<notifyURL>http://test.com.cn/callback</notifyURL>
</xml>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xml>
<return_code>0000</return_code>
<return_msg>OK</return_msg>
<qr_code>http://online.bsoftpay.com/gatewayOnline/page/qrCode/43?timestamp=20221121152351&sign=AyPtKTlfEytefoQNRA%2B6mqSflS0s8YjxPgK4FIdTxDoL19er2AwPMPzqJfgUlp4QFsz2B1RIkNDn%2B%2BwYlmozWg%3D%3D</qr_code>
</xml>
交易查询
- 功能码:P2005
- 接口说明:通过该接口获取某个订单的支付结果
- 请求参数:
<Data>
参数 |
名称 |
类型 |
长度 |
是否必填 |
说明 |
示例 |
order_no |
业务单号 |
String |
32 |
是 |
商户内部业务单号 |
WX2019072200001 |
merchant_no |
收款商户号 |
String |
32 |
是 |
商户号 |
809900000001 |
参数 |
名称 |
类型 |
长度 |
是否必输 |
说明 |
示例 |
TradeNo |
平台流水号 |
String |
32 |
否 |
聚合支付平台流水号 |
34411000 |
PayTradeNo |
渠道流水号 |
String |
32 |
否 |
各个支付渠道返回的流水号 |
4200000376201907220000000000 |
OrderNo |
业务单号 |
String |
32 |
是 |
商户内部业务单号 |
WX2019072200001 |
Amt |
实际支付金额 |
Price |
16.2 |
是 |
用户实际付款金额 |
0.01 |
PayTime |
实际支付时间 |
String |
16 |
否 |
yyyy-MM-dd hh:mm:ss |
2019-07-22 21:37:31 |
PayStatus |
支付状态 |
String |
6 |
是 |
0=未支付;1=支付成功;2=支付失败;-1=关闭或撤销 |
1 |
receipt_amount |
商户收到的金额 |
Price |
16.2 |
是 |
相当于订单支付金额 |
0.01 |
PayChannel |
支付渠道 |
String |
1 |
是 |
0 未知 2 支付宝 3 微信 查询聚合码订单时会返回此参数 |
2 |
退费请求
- 功能码:P2008
- 接口说明:当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给买家(原路返回)。注意的地方:微信超过1年的订单无法提交退款,支付宝超过3个月的订单无法提交退款,可以一笔订单多次退款,但是累计金额不能超过原支付金额
- 请求参数:
<Data>
参数 |
名称 |
类型 |
长度 |
是否必填 |
说明 |
示例 |
RequestNo |
退款订单号 |
String |
32 |
是 |
商户内部唯一退款单号 |
TK20190722001 |
PayType |
退款渠道 |
String |
2 |
否 |
2=支付宝;3=微信 聚合码订单可不传 |
2 |
Amt |
退款金额 |
Price |
16.2 |
是 |
退款金额不得超过原支付金额 |
0.01 |
TradeNo |
原支付业务单号 |
String |
32 |
是 |
商户原支付订单号 |
WX2019072200001 |
merchant_no |
商户号 |
String |
32 |
是 |
平台商户号 |
809900000001 |
参数 |
名称 |
类型 |
长度 |
是否必输 |
说明 |
示例 |
RequestNo |
退款订单号 |
String |
32 |
是 |
申请退款订单号 |
TK20190722001 |
Amt |
退款金额 |
Price |
16.2 |
是 |
申请退款金额 |
0.01 |
退费查询
- 功能码:P2009
- 接口说明:提交退款申请后,通过调用该接口查询退款状态。退款有一定延时,用微信零钱或者支付宝余额宝、花呗等支付的退款20分钟内到账,银行卡支付的退款3个工作日后重新查询退款状态(20分钟、3 个工作日都是大概时间,不一定为准,有可能提前,有可能延迟)
- 请求参数:
<Data>
参数 |
名称 |
类型 |
长度 |
是否必填 |
说明 |
示例 |
RequestNo |
退款订单号 |
String |
32 |
是 |
商户内部唯一退款单号 |
TK20190722001 |
PayType |
退款渠道 |
String |
2 |
是 |
2=支付宝;3=微信 |
2 |
参数 |
名称 |
类型 |
长度 |
是否必输 |
说明 |
示例 |
RequestNo |
退款订单号 |
String |
32 |
是 |
申请退款订单号 |
TK20190722001 |
Amt |
退款金额 |
Price |
16.2 |
是 |
当code为1时这里会显示退款金额 |
0.01 |
Code |
退款状态 |
String |
2 |
是 |
-1交易不存在 1 成功 2 失败 |
1 |
Msg |
错误信息描述 |
String |
100 |
是 |
当code为2时这里会显示错误信息 |
0.01 |
交易结果通知
- 功能码:P3001
- 接口说明:支付状态改变(支付或作废)后,平台异步通知用户端(平台不保证异步通知能够准时到达,建议接入方有自己的定时主动查询策略,以异步通知作为辅助查询)。交易结果通知的地址,需要提前告知平台商务对接人员进行配置。
注意:商户在接受到支付平台回调后,如果业务成功,返回 success
,失败返回 fail
,注意都是小写,不要用空格或者换行。
支付平台服务器在没有收到业务成功回调信息时,会尝试重发消息,总共3
次通知(通知的间隔频率一般是:30s,1m,2m),3 次以后将不再通知,所以不保证通知最终能成功(建议以交易结果查询接口为主,异步通知为辅,如果 3 秒左右还没有接受到异步通知,就应该主动调用交易结果查询接口)
参数 |
名称 |
类型 |
长度 |
是否必输 |
说明 |
示例 |
TradeNo |
支付平台交易流水号 |
String |
32 |
是 |
支付平台交易流水号 |
32013134 |
PayTradeNo |
渠道流水号 |
String |
32 |
是 |
第三方支付渠道流水号 |
20192323971391918391121 |
OrderNo |
业务单号 |
String |
32 |
是 |
商户内部业务单号 |
wx201907150001 |
Amt |
支付金额 |
Price |
16.2 |
是 |
支付金额 |
0.01 |
PayTime |
实际支付时间 |
String |
16 |
是 |
yyyyMMddhhmmss |
20190725123012 |
PayStatus |
支付状态 |
String |
6 |
是 |
0=未支付;1=支付成功;2=支付失败;-1=关闭或撤销 |
1 |
PayChannel |
支付渠道 |
String |
1 |
是 |
2 支付宝 3 微信 查询聚合码订单时会返回此参数 |
2 |
文档更新时间: 2023-03-10 18:45 作者:甘世敏