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