问题:
支付宝扫码支付成功异步回调了处理函数,需要返回信息告诉支付宝的。这样导致了我没办法去处理支付成功的页面跳转。想到一种方法就是ajax轮询,但是觉得如果用户一直不扫码,或一直不支付,那轮询就会不断地发请求,感觉不大好。请问有没有好一点的处理方法?
网友支招:
1、
ajax长轮询, websocket
2、
我的建议就是ajax轮询!其实支付宝也是是ajax轮询。关键的问题就是如果考虑性能的话。可以依靠redis。发起支付后,key_订单号
的值为0
,代表未支付;异步处理成功后,redis的值变更为1
;而前端ajax轮询的时候,只需要去查这个key。只要变成1,就做相应操作!
3、
对于这种问题,只要把支付宝的回调跟自己的业务逻辑分开就行了,首先,用户页面的跳转跟支付宝是没关系了,所以支付宝的回调不应该跟页面跳转混在一起,支付宝的回调只是通知你用户付没付钱,所以回调代码里面只负责用户支付后的逻辑,至于页面跳转,常规方案是轮询,浏览器不断的发起请求来询问支付状态,但可以转个弯来实现,比如让这个二维码以弹框的形式出现,用户扫没扫码根本就不用管,因为支付后的逻辑是有支付宝回调,当用户扫完后点关闭二维码时这时去发起请求查询支付状态,这时想怎么跳转就怎么跳转,如果实在是需要用户一扫完码当前页面就需要知道状态的话那只能是用轮询或者websocket,因为扫码到支付这一系列操作都是用户跟支付宝服务器通信,只有支付宝服务器通知你的服务器你才知道用户具体到哪步了,所以除了全双工通信外想要实时得到用户操作进度的话只能是通过轮询,这还是要看支付宝有没有给你推送用户操作进度,如果支付宝只有支付回调的话不给你推送用户扫没扫码的话轮询获取用户扫码进度这些都是没多大用处的。