二码合一 支持微信、支付宝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)并带上参数openIdstate

支付宝渠道使用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&amp;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&amp;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   作者:甘世敏