反扫和非反扫最大的区别?
1.正扫和反扫
一个是正扫,一个是反扫。
比如,js支付是正扫,就是你拿微信扫商户的二维码(即收款码)。而反扫是商家拿扫码枪扫你的微信二维码(即付款码)。
2.速度
反扫速度很慢,秒级别,大概3s。
js支付只要几百ms,ms级别。
为什么慢?因为反扫是返回最终结果,即支付成功,而不是支付中。本质是渠道已经从消费者扣款成功,然后同步返回支付成功状态。而js支付在渠道侧只是先受理成功,然后同步返回中间状态。
3.同步返回结果
渠道侧同步返回最终支付成功。
js支付也是同步返回结果,但不是最终支付成功,而是支付中。何时最终成功?1.渠道通知成功 2.job查询是否支付成功。
所以,都是同步返回结果,只不过一个是最终结果,一个是非最终结果。
4.渠道通知
js支付由于是支付中,所以为了确保订单成功,有两种方法,一种是渠道通知成功,一种是支付公司主动查询渠道是否支付成功。
但是,反扫由于是同步返回最终成功,所以可以没有渠道通知,微信的反扫就没有通知接口,但是支付宝反扫是有通知接口的。
支付宝反扫的通知接口文档描述如下:
第一次交易状态改变(即时到账中此时交易状态是交易完成)时,不仅会返回同步处理结果,而且服务器异步通知页面也会收到支付宝发来的处理结果通知。
opendocs.alipay.com/open/194/10…
为什么反扫要同步返回最终成功?
因为反扫的应用场景,一般是在线下超市,很多人排队买单,都是商家用扫码枪扫用户微信二维码,扫码支付成功之后,商家立马把货给到用户,用户拿着货直接就走了。如果不是同步返回最终成功,可能用户拿着货走了,但是消费者并没有最终支付成功,这个时候商家就会亏钱,因为没有收到钱。
微信
其实反扫有两种模式,一般不需要输入密码,特殊情况下才需要输入密码。
免密模式
时序图
渠道直接同步返回最终成功,支付公司根据同步返回最终成功,然后也同步更新本地订单状态为最终成功。
支付公司也会通知商户成功。
微信也会通知用户成功。
都成功之后,商家就把商品给用户。
密码模式
什么情况下,会触发密码模式?
微信文档描述如下:
验证密码规则
◆ 支付金额>1000元的交易需要验证用户支付密码
◆ 用户账号每天最多有10笔交易可以免密,超过后需要验证密码
◆ 微信支付后台判断用户支付行为有异常情况,符合免密规则的交易也会要求验证密码
注:基于一定的风控策略,存在随时需要验密的可能性。
时序图
核心流程:
1.用户支付
商家拿扫码枪扫用户微信二维码支付之后,这个时候渠道也会同步返回,但不是最终结果,而是支付中。
而且,这个时候,微信会弹起密码框,提示用户输入密码。
2.用户输入密码
微信提示用户成功。注意,这个阶段,只是微信和用户通信,微信和支付公司没有通信。
3.那支付公司怎么知道最终结果?
job查询是否支付成功。
商家侧的状态
1.渠道同步返回支付中,支付公司返回商户也是支付中。
2.支付公司主动查询渠道是否支付成功,如果成功,就通知商户支付成功。
所以,渠道给支付公司是什么状态,支付公司给商户就是什么状态。
第一个阶段-用户支付:渠道返回支付中
微信返回数据如下:
USERPAYING | 用户支付中,需要输入密码 | 支付结果未知 | 该笔交易因为业务规则要求,需要用户输入支付密码。 | 等待5秒,然后调用被扫订单结果查询API,查询当前订单的不同状态,决定下一步的操作。 |
---|
pay.weixin.qq.com/wiki/doc/ap…