微信 JSAPI 支付的流程是:
服务端根据情况,向微信服务器发起“下单”请求。此处需要提供自己维护唯一的订单号,并要求签名加密。
根据“下单”反馈的微信提供的预支付“订单号”,用刚才下单请求参数同样的签名方式,对几个基本数据进行封包签名。
将签名摘要,和这几个基本数据,传输给 JavaScript 端。
JavaScript 通过微信内置对象的方法,唤起支付,并前端返回支付操作结果。
微信服务端会异步通知服务端,支付结果;此处通知地址是之前“下单”时指定的。
如果因故服务端没有收到通知,可以主动发起查询,使用之前向微信服务端“下单”时提供的自己维护唯一的订单号。
.
经过试验,我发现了这么几个有意思的现象。
首先,支付参数里边有时间戳,但哪怕过了 5 分钟,这个时间戳及相关配套参数,依然可以用于支付。
.
其次,在微信预支付订单过期之前,用时间戳生成支付参数,拖到订单过期之后使用,报过期。这意味着微信可能根本就没有去识别微信支付参数里边的时间戳,或许只检查了非常基本的时间顺序性:支付时间戳不得早于预支付下单时间(?未验证)
.
第三,对于重复支付,具备如下现象。
○ 特殊发现:在微信登记订单,是跟微信账号绑定的。一个订单,利用外部系统订单号,换微信去查询,依然是无此订单。
一个微信号 pending ,用另一个微信号再发起支付,报订单与微信号不一致。
一个微信号 cancel ,此微信单,同微信可以再支付,别的微信不能。
一个微信号 ok ,此微信单,同微信报已支付,别的微信报订单与微信号不一致。
.
本文还发表于在其它网站
CSDN : https://blog.csdn.net/ShaneLooLi/article/details/104021907
ITeye : https://www.iteye.com/blog/surmounting-2512113
中国开源社区: https://my.oschina.net/shane1984/blog/3159557
相关文章
- 10-28微信JSAPI支付提示支付签名验证失败、jsapi缺少参数 total_fee、当前url未注册问题的解决方法
- 10-28微信支付的坑(jsapi)
- 10-28公众化网页,微信支付 JSAPI
- 10-2812、xamarin form中实现H5 网页唤醒微信支付的方法
- 10-28PHP微信公众号JSAPI网页支付(下)
- 10-28[5] 微信公众号开发 - 微信支付功能开发(网页JSAPI调用)
- 10-28php 微信支付jsapi 转的,好像能用。。
- 10-28微信公众号JSAPI网页支付
- 10-28jsapi 调起微信支付的的踩坑
- 10-28微信公众号JSAPI支付-多公众号向同一商户号支付的问题解决