微信支付的流程主要分为两大块,统一下单
和 支付
,当前端点击支付时,首先会调用后端接口,进行预下单,也就是将当前需要支付的商品信息告诉微信,然后微信生成一个预下单的订单,返回给我们的后端,后端会对返回的结果进行签名,将签名后的信息返回给前端。
然后前端就可以调用 微信支付的接口wx.requestPayment
,将后端返回的参数填充到微信支付的方法中。
我们使用的是 v2的文档,v3对于普通商户来说目前是不支持退款操作的(不过明年好像就支持了)
统一下单
这里的下单是指后端调用接口在 微信支付服务后台生成预支付交易单
, 然后将预支付
交易单进行处理,最终返回到前端的就是 wx.requestPayment
中所需的参数了。
支付
当后端预下单成功后,将返回的参数注入到 wx.requestPayment
当中,发起微信支付。
参数如下:
这里需要注意一下:package
这个字段,需要拼接上prepay_id=
, 而且后端签名时 也需要加上
遇到的坑:
- 在调试的过程中发生了多次支付时
签名验证失败
,这是由于后台的签名不正确,后面通过 这篇文章解决 wx.requestPayment
中的参数都是由后端传递回来的,因为后端签名时使用的到这些字段,如果前端传递的与后端不一致 将会导致签名验证失败
,比如nonceStr
这个字段,后端签名时就使用到了,如果前端传递的值与后端签名时不一致 就会导致签名失败