Java 支付对接之银联电子商务(海南)聚合二维码支付(POS 通插件 C 扫 B 业务)

写在前面

二维码支付宝有两种表现形式:第一种是动态的二维码,就是每生成一个订单就会生成一个二维码;第二种是固定的二维码,就是每个订单都是同一个二维码作为入口。本文主要描述的是如何使用银联的线下C扫B方式来实现固定的二维码扫码支付。
具体对接请参考接口文档,对接文档写的会更详细,本文只探讨支付实现思路

应用场景:

用于停车场出场扫码支付,由于业务需求,出口需要粘贴一张固定的二维码,但是每次车辆出场都必须生成一个新的订单,并且需要同时支持微信支付和支付宝支付。

选择POS 通插件 C 扫 B 业务的原因

同时支持微信支付和支付宝支付

支付流程:

在这里插入图片描述
支付实现思路

  1. 先在商户系统调用创建二维码接口创建一个二维码,会返回 二维码url 和 二维码 id
  2. 将二维码Id 与商户系统的收费实体绑定,如停车场的出口道闸;并将二维码url 以二维码图片的方式显示,并贴在对应收费实体上
  3. 当商户系统生成新账单时,如出口有车辆经过,生成一个收费订单,并调用修改二维码接口,修改二维码信息。

需要注意是:调用修改二维码账单接口时不仅需要上传商品信息及商品价格,还需要上传商品订单号,每一个商品订单都有一个唯一订单号,这是银联系统与商户系统信息通信的桥梁,银联会在支付成功异步回调原样返回

  1. 用户扫码并输入密码支付。这一步就和商户系统没有关系了,属于用户直接和银联系统交互,包括账单确认页面都是他们的(这也是我最不喜欢的一个地方T^T)

需要注意是:因为用户扫码是直接到银联系统,我们系统完成感知不到,这就经常会产生用户会提前扫码(也就是还没有生成账单之前就去扫码,还很多T^T,这就是银联线下二维码的弊端,就跟商家放在柜台上的收款码一样,可以一直扫,一直付(。>︿<)_θ)。

所以商户系统需要及时对已支付订单和很久不支付订单进行清除,我的解决方案就是在支付成功后或者支付超时后再次调用更新二维码接口,把金额设置为1(也就是1分钱),并在商品详情写上提示信息,如二维码未刷新,请识别后扫码。

此方法并不是良策,但是我暂时也只能止步于此了,因为调用关闭二维码接口后,二维码就彻底凉凉了

  1. 支付后当然是回调了,银联C扫B接口只开放异步回调,同步回调不开发(又强制跳到他们的支付成功界面,狗贼T^T),异步回调主要用来处理一些支付成功后续的操作,比如说订单状态修改和支付成功通知;

在支付成功异步回调的接口中拿到回调数据后:
第一步就是验签,先判断回调数据是否合法;
第二步,拿到支付订单号(每一笔支付订单都有唯一的订单号),用于判断是否重复回调,因为有可能因为网络等原因,银联会重复发送支付成功通知;
第三步,保存支付成功回调信息,每一个支付完的信息都要保存好,方便后续查看,并且要用于判断是否重复回调;
第四步,拿到回调信息中商户订单号,也就是第三步上传的收费订单号,银联会原样返回,拿到订单号后调出未支付订单并修改支付状态,以及处理一下需要支付完成后才能执行的操作,比如说开闸。
最后,业务处理结束后记得再给银联回复“SUCCESS"字符串,因为如果你没有回复接收成的话他们会误以为你没有收到,然后再给你发一次。

  1. 真实环境中难免会有特殊情况,当账单生成后一定时间内,还未收到支付成功回调,可调用账单状态查询接口查看支付状态

总结:

总体来说POS 通插件 C 扫 B 业务来实现二维码支付并不是特别合适,只能说勉强能使用,因为局限太多了,当初会选用此方式是因为他能同时满足微信支付和支付宝支付,条件允许的情况下不建议小伙伴选择使用此方案实现扫码支付。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值