微信支付除了異步回調(diào)通知,還要求后端主動輪詢訂單是否支付成功做為輔助,
前端輪詢方案比較多,后端PHP不懂有什么方法?
TP6+使用Workerman執(zhí)行定時任務(wù)?
Workerman有輪詢方案嗎?
先謝謝了!
我是這樣干的,創(chuàng)建一個2秒定時器,下單時將訂單信息存儲在緩存中,在定時器里從緩存里讀取訂單信息向微信接口請求狀態(tài)再更新。
為啥不是在前端處理定時呢,我們最近有個購票的業(yè)務(wù),需要h5下單成功后去票務(wù)系統(tǒng)下單,但是靠微信異步通知再去票務(wù)系統(tǒng)下單會出現(xiàn)延遲問題 還有就是用戶h5下單成功了 票務(wù)可能會出票失敗,基于這個問題我們解決的方式是
1.前端用戶支付成功后,開啟定時請求后臺訂單支付結(jié)果查詢接口
2.查詢支付成功后對票務(wù)系統(tǒng)下單,票務(wù)系統(tǒng)下單成功,h5訂單下單才算成功,票務(wù)系統(tǒng)失敗,對該筆訂單自動執(zhí)行退款,退款失敗提醒客戶聯(lián)系平臺(一般不會出現(xiàn)這種情況)
做完這個小系統(tǒng)后 我思索了很久之前做過的支付,其實都存在支付問題,單純的靠異步通知是解決不了訂單的狀態(tài)更新問題的,尤其前端要求下單成功后進(jìn)入訂單詳情的場景,回調(diào)稍微延遲下,按我以前的做法都會面臨客戶明明支付成功了,進(jìn)入訂單卻是待支付
微信下單,后端只是生成前端拉起支付的數(shù)據(jù)。若想后端獲取該筆交易的支付狀態(tài),有以下方案:
其實也很簡單了
1、用戶下單創(chuàng)建支付訂單時,把支付信息也一起放到隊列去
2、在創(chuàng)建一個時間任務(wù)去查詢隊列(消費),查詢是否已經(jīng)支付成功
3、查詢用戶未支付時,再放到隊列去
4、設(shè)置一個閥值,輪詢N次還是未支付情況下基本上用戶是不會去支付了,所以可以關(guān)閉此條消費記錄了(創(chuàng)建微信支付時,有一個支付超時,可以聯(lián)動起來)
感謝回復(fù)!現(xiàn)在下單時是建有queue隊列任務(wù)檢查是否支付超時。文檔要求前兩分鐘間隔3~5秒查一次,之后間隔10秒查一次,如果超出 6 分鐘后還未獲取到訂單最終狀態(tài),停止輪詢。不懂是用什么來做時間任務(wù)