微信支付并回调跳转成功页面的实现思路
遇到的问题
当微信支付成功(付款后)后,如何自动跳转页面到付款成功?
当我们微信支付成功后有一个回调函数,可以去对订单进行某些处理。但是我们前端与后端是分离的,我们必须从前端再发送一个请求去询问是否已经支付成功,下面是解决这个问题的一些方法。
ajax短轮询(常用)
每隔几秒钟去通过ajax请求通过api查询是否支付成功。每隔几秒钟去查询的做法相对简单,但是对于服务器的压力是倍数级的。当我们一直未支付的时候,每隔几秒的ajax请求对服务器的压力也是不小。
ajax长轮询
在一次ajax请求后,我们在内部阻塞监听一段时间,检查订单是否已经支付成功。如果我们是去数据库查询订单的话,也会对数据库造成一定的压力;同时阻塞监听也会造成一些服务器资源的占用。
webSocket连接(推荐)
通过webSocket去建立起web客户端与服务器之间的一个长连接(),当我们支付成功后,调用回调函数去修改订单的一些信息时,就可以向web发送一个消息实现跳转。
我们可以借助 rabbitMQ-stomp技术(基于webSocket),建立起三方的连接。
web客户端 <-> rabbitMQ-stomp <-> Server
通过监听队列或者exchange消息传过来的订单号,判断是否是当前的订单去跳转页面。
当有订单完成时,服务器都会向mq发送一个订单号信息(唯一),每个订单页面也都会接收到所有已经完成支付的订单信息,所以在每个页面需要再去做一个判断是否是当前订单才能做出跳转动作。