第三方支付异步通知的陷阱
??用戶下單后調(diào)用第三方支付付款,然后接收第三方支付的異步通知,以便確認(rèn)支付是否成功。
如下圖
??但異步通知可能由于網(wǎng)絡(luò)原因,或者應(yīng)用服務(wù)崩潰沒有接收到。為了應(yīng)對這種情況需要后臺創(chuàng)建一個定時任務(wù)去調(diào)用第三方接口,主動查詢支付結(jié)果。這種情形下就涉及并發(fā)的問題,可能后臺定時任務(wù)跟異步通知同時收到了支付成功結(jié)果,同時對響應(yīng)數(shù)據(jù)進(jìn)行處理。通常通過加鎖來避免這種問題。
??到了這里一切看起來很美好。代碼提交后在測試環(huán)境順利通過。由于測試環(huán)境情形單一,測試用例不夠,異步通知總是成功的,做為備用手段的后臺定時任務(wù)沒有被測試覆蓋到就進(jìn)入了生產(chǎn)環(huán)境。后臺定時任務(wù)的邏輯有可能是錯的,而由于生產(chǎn)環(huán)境配置了負(fù)載平衡,保證了高可用,直到很久都不會發(fā)現(xiàn)定時任務(wù)的錯誤。筆者就遇到過在長達(dá)一年的時間里定時任務(wù)從來就不起作用。
??所以開發(fā)要在qa階段跟測試人員緊密配合,保證每個測試用例都覆蓋到,比如關(guān)掉異步通知服務(wù),看定時任務(wù)是否能正確處理。直到有一天我發(fā)現(xiàn)其他部門一位同事采用了一個很有創(chuàng)意的做法,既然異步通知不靠譜,干脆就不要,完全靠后臺定時任務(wù)主動查詢第三方支付結(jié)果,然后進(jìn)一步處理。
總結(jié)
以上是生活随笔為你收集整理的第三方支付异步通知的陷阱的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: R升级和包更新
- 下一篇: 中国HBase技术社区第五届MeetUp