流程:php
上图的网址为:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_4前端
如上图所示,微信网页支付的具体流程大体分为三个部分,最重要的是第一和第二部分:java
window.onload
事件的时候)。prepay_id
,并根据算法(后面会提到)生成支付签名,而后将prepay_id
和支付签名做为上一步支付请求的响应数据返回给客户端,客户端 缓存此数据 。注意: 第二部分和商户的服务器没有任何交互。web
上面的介绍详细解释了微信支付的流程,那么根据此流程,咱们就能够分别对微信网页支付设计前端和后端的实现方案。算法
咱们能够看到,上面的支付流程中有一点不是很合理的地方:就是每进入一次网页就请求一次支付接口,产生一个订单。由于不少时候,用户打开网页并不会点击购买产生实质的支付请求。这样会无端消耗很多服务器资源,特别是对于高并发网站来讲。spring
对此个人改进方案是:在用户点击相关的产生实质支付的按钮时,才向商户后台发送支付,再调统一下单接口,返回
prepy_id
和签名,而后利用这个数据进行上面的第二部分,请求微信支付。这样作的好处是能够减小无效请求,可是坏处是两次请求的时间可能会较长,特别是第一个向商户后台下订单的请求,由于这个还须要调微信支付的服务,可能整个请求的响应会超过1s,慢的甚至2~3s,这会严重影响用户体验。并且此时,通常须要在前端显示一个“正在请求支付”的加载动画,否则几秒没响应用户会觉得没效果再点击形成重复下单。后端
咱们按照上面描述的改进方案进行前端和后端支付业务流程的设计。api
在第一节的图中忽略了一点,使用微信JSAPI支付的网页,必须在支付前使用微信JSAPI的
config
接口注入权限验证配置,这一步通常放在网页加载后,即window.onload()
函数中来执行。具体内容参考:微信网页开发说明缓存
前端的流程以下:服务器
window.onload()函数
编写wx.config()函数
),权限配置验证中须要向商户服务器请求签名,后面会提到。prepay_id
和生成的支付签名。签名算法说明 。WeixinJSBridge.invoke
函数调起支付,并编写支付成功和失败的回调函数。微信支付主要的逻辑在后端,后端的逻辑以下:
access_token
是:网页受权access_token处理上一步的响应,若是成功,根据说明连接产生签名字符串,响应上一步的请求。
为了前端处理方便,这一步能够将支付请求所需的全部参数都生成而后返回。
notify_url
添加支付结果处理逻辑,根据支付结果通知所述,返回指定信息,此接口要有处理重复通知的能力,具体详见前面的连接。下面几篇文章将展现实现微信网页支付逻辑的前端和后端(基于java web框架spring mvc)的示例代码。
若有错误和疑惑之处请在评论区指出,谢谢。