微信支付流程

流程:

支付

上图的网址为:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_4

如上图所示,微信网页支付的具体流程大致分为三个部分,最重要的是第一和第二部分:

  1. 第一部分:用户进入网页
    • 用户点击消息、链接或者扫描二维码,进入商品界面(即触发网页的window.onload事件的时候)。
    • 网页产生支付请求至商户服务器,支付服务器先产生商户订单,然后调用 统一下单API,向微信服务器发送请求。
    • 商户服务器接收到微信服务器对统一下单API的响应后,提取出参数prepay_id,并根据算法(后面会提到)生成支付签名,然后将prepay_id和支付签名作为上一步支付请求的响应数据返回给客户端,客户端 缓存此数据 。
  2. 第二部分:用户发起请求,服务器响应
    • 用户在商品界面中点击支付按钮后,根据第一部分取到的数据和商品数据调用jsapi接口(至微信服务器)请求支付,微信支付服务器对请求进行验证并响应,这个过程中,微信客户端显示“微信支付”的动画。
    • 如果上一步的请求验证通过,此时微信客户端会弹出密码输入对话框,让用户输入密码。
    • 用户输入密码点击支付后,微信客户端提交支付授权。
    • 微信客户端对支付授权进行验证,并将结果 同时发送 至用户客户端和商户服务器。其中微信服务器发送至商户服务器的通知url在第一部分的统一下单接口中由商户指定。
    • 商户服务器对上一步收到的结果进行处理,并响应。客户端也会收到微信支付结果的模板消息。

注意: 第二部分和商户的服务器没有任何交互。

  1. 第三部分
    • 微信跳转回商户的H5页面。
    • 商户网页调用请求查询订单结果。

具体的实现方案

上面的介绍详细解释了微信支付的流程,那么根据此流程,我们就可以分别对微信网页支付设计前端和后端的实现方案。

我们可以看到,上面的支付流程中有一点不是很合理的地方:就是每进入一次网页就请求一次支付接口,产生一个订单。因为很多时候,用户打开网页并不会点击购买产生实质的支付请求。这样会无故消耗不少服务器资源,特别是对于高并发网站来说。