场景:我们去超市买东西经常都会要求打开付款码,然后扫码枪进行扫码支付。
特点:操作步骤简单、支持离线付款、付款效率高
1)先睹为快
或许在这里很多人会纳闷这里有条形码和二维码,最终的支付到底是扫条形码还是二维码呢?
其实这里取决于扫码枪,现阶段市面上有两类:一维扫码枪 (仅可以支持扫条形码)和二维扫码枪(两个都可以扫)。
2)被扫付款逻辑
- 用户打开付款码;
- 收银员输入用户应付款金额,并生成订单;
- 扫码枪扫码之后,将订单提交给商家收银台系统;
- 商家收银台系统将订单推给商家后台;
- 商家后台将订单推给支付宝请求完成扣款;
- 支付宝扣款成功,通知商家后台系统,同时给用户发送消息通知。
以上如果商家不是直连支付宝/微信,而是对接其他三方支付公司,那么支付订单可由商家推给支付宝/微信官方,改为推给对接的三方支付公司即可。一旦支付宝扣款成功,那么对接的支付公司会回调通知商家这笔订单的支付结果。
3. 主扫和被扫的对比
相同点:
- 两者的基本原理都是一样的;
- 扫码支付的限额都比较低,远低于网银支付;
不同点:
- 用户主动操作对象不一样,一个是用户,一个是商家;
- 被扫的话,在用户付款码中就会包含用户的唯一ID标识,支付宝/微信可以直接找到该用户完成扣款操作。
4. 异常情况处理
在我们进行扫码支付时,其实也会出现一些故障,那么针对这些故障,一般会有什么补救措施呢?
1)扫码枪付款时,突然网络不稳定不确定是否已付款了怎么办?
答:出现网络不稳定,可以由两种处理方式:
- 可以调用查询接口去主动查询微信/支付宝渠道该笔订单是否已支付;如已支付,则就会更新订单状态;
- 直接调用订单撤销接口,即不管用户有没有完成付款,这笔订单终止,已付款则会退回余额;
2)出现重复支付的问题怎么办?
答:系统作自动退款处理。一般重复支付指的是一个商品重复请求多次,并且多次完成支付了。针对这种情况,商家所接入的支付机构会判断出来,同时会作自动退款处理的。
二、静态聚合码正常来讲:支付宝和微信的二维码是不互通的,支付宝不会支持微信的二维码进行付款。而近几年我们经常看到商家贴出静态聚合码,消费者通过这个码使用微信付款,也可以使用支付宝付款,那么这里面的逻辑是怎样的呢?
1. 实现原理
任何支付行为都是通过一个支付链接来完成,而支付链接内容会包括必要信息,如来源、金额、商户信息等。
而每个支付链接只能其对应的服务端处理,即用户使用支付宝二维码完成支付行为的,最终付款会指向支付宝的服务端的;而微信二维码则会指向微信的服务端。
要实现上述的聚合码付款,那么就需要一个前置的中间环节,需要这样的一个通用的二维码来优先判断付款来源方。在技术实现上会有userAgent来判断用户来自哪种客户端。如果是MicroMessenger 则表示微信;AlipayClient是支付宝。
1) 时序图如下