第三方支付-反扫和js支付的区别?

985 阅读4分钟

反扫和非反扫最大的区别?

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…

参考

微信文档:pay.weixin.qq.com/wiki/doc/ap…

支付宝文档:opendocs.alipay.com/open/194/10…