`
Surmounting
  • 浏览: 66989 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

微信内网页支付(微信 JSAPI 支付)的一点经验

阅读更多

微信 JSAPI 支付的流程是:
服务端根据情况,向微信服务器发起“下单”请求。此处需要提供自己维护唯一的订单号,并要求签名加密。
根据“下单”反馈的微信提供的预支付“订单号”,用刚才下单请求参数同样的签名方式,对几个基本数据进行封包签名。
将签名摘要,和这几个基本数据,传输给 JavaScript 端。
JavaScript 通过微信内置对象的方法,唤起支付,并前端返回支付操作结果。
微信服务端会异步通知服务端,支付结果;此处通知地址是之前“下单”时指定的。
如果因故服务端没有收到通知,可以主动发起查询,使用之前向微信服务端“下单”时提供的自己维护唯一的订单号。

经过试验,我发现了这么几个有意思的现象。
首先,支付参数里边有时间戳,但哪怕过了 5 分钟,这个时间戳及相关配套参数,依然可以用于支付。

其次,在微信预支付订单过期之前,用时间戳生成支付参数,拖到订单过期之后使用,报过期。这意味着微信可能根本就没有去识别微信支付参数里边的时间戳,或许只检查了非常基本的时间顺序性:支付时间戳不得早于预支付下单时间(?未验证)

第三,对于重复支付,具备如下现象。
* 特殊发现:在微信登记订单,是跟微信账号绑定的。一个订单,利用外部系统订单号,换微信去查询,依然是无此订单。
一个微信号 pending ,用另一个微信号再发起支付,报订单与微信号不一致。
一个微信号 cancel ,此微信单,同微信可以再支付,别的微信不能。
一个微信号 ok ,此微信单,同微信报已支付,别的微信报订单与微信号不一致。

 

本文还发表于在其它网站

CSDN : https://blog.csdn.net/ShaneLooLi/article/details/104021907

中国开源社区: https://my.oschina.net/shane1984/blog/3159557

51CTO : https://blog.51cto.com/shanelooli/2467554

1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics