問題:
支付寶掃碼支付成功異步回調了處理函數,需要返回信息告訴支付寶的。這樣導致了我沒辦法去處理支付成功的頁面跳轉。想到一種方法就是ajax輪詢,但是覺得如果用戶一直不掃碼,或一直不支付,那輪詢就會不斷地發請求,感覺不大好。請問有沒有好一點的處理方法?
網友支招:
1、
ajax長輪詢, websocket
2、
我的建議就是ajax輪詢!其實支付寶也是是ajax輪詢。關鍵的問題就是如果考慮性能的話。可以依靠redis。發起支付后,key_訂單號
的值為0
,代表未支付;異步處理成功后,redis的值變更為1
;而前端ajax輪詢的時候,只需要去查這個key。只要變成1,就做相應操作!
3、
對於這種問題,只要把支付寶的回調跟自己的業務邏輯分開就行了,首先,用戶頁面的跳轉跟支付寶是沒關系了,所以支付寶的回調不應該跟頁面跳轉混在一起,支付寶的回調只是通知你用戶付沒付錢,所以回調代碼里面只負責用戶支付后的邏輯,至於頁面跳轉,常規方案是輪詢,瀏覽器不斷的發起請求來詢問支付狀態,但可以轉個彎來實現,比如讓這個二維碼以彈框的形式出現,用戶掃沒掃碼根本就不用管,因為支付后的邏輯是有支付寶回調,當用戶掃完后點關閉二維碼時這時去發起請求查詢支付狀態,這時想怎么跳轉就怎么跳轉,如果實在是需要用戶一掃完碼當前頁面就需要知道狀態的話那只能是用輪詢或者websocket,因為掃碼到支付這一系列操作都是用戶跟支付寶服務器通信,只有支付寶服務器通知你的服務器你才知道用戶具體到哪步了,所以除了全雙工通信外想要實時得到用戶操作進度的話只能是通過輪詢,這還是要看支付寶有沒有給你推送用戶操作進度,如果支付寶只有支付回調的話不給你推送用戶掃沒掃碼的話輪詢獲取用戶掃碼進度這些都是沒多大用處的。