第三方支付非同步通知的陷阱

2021-09-07 20:23:55 字數 591 閱讀 6489

使用者下單後呼叫第三方支付付款,然後接收第三方支付的非同步通知,以便確認支付是否成功。

如下圖

但非同步通知可能由於網路原因,或者應用服務崩潰沒有接收到。為了應對這種情況需要後台建立乙個定時任務去呼叫第三方介面,主動查詢支付結果。這種情形下就涉及併發的問題,可能後台定時任務跟非同步通知同時收到了支付成功結果,同時對響應資料進行處理。通常通過加鎖來避免這種問題。

到了這裡一切看起來很美好。**提交後在測試環境順利通過。由於測試環境情形單一,測試用例不夠,非同步通知總是成功的,做為備用手段的後台定時任務沒有被測試覆蓋到就進入了生產環境。後台定時任務的邏輯有可能是錯的,而由於生產環境配置了負載平衡,保證了高可用,直到很久都不會發現定時任務的錯誤。筆者就遇到過在長達一年的時間裡定時任務從來就不起作用。

所以開發要在qa階段跟測試人員緊密配合,保證每個測試用例都覆蓋到,比如關掉非同步通知服務,看定時任務是否能正確處理。直到有一天我發現其他部門一位同事採用了乙個很有創意的做法,既然非同步通知不靠譜,乾脆就不要,完全靠後台定時任務主動查詢第三方支付結果,然後進一步處理。

第三方支付非同步通知的陷阱

使用者下單後呼叫第三方支付付款,然後接收第三方支付的非同步通知,以便確認支付是否成功。如下圖 但非同步通知可能由於網路原因,或者應用服務崩潰沒有接收到。為了應對這種情況需要後台建立乙個定時任務去呼叫第三方介面,主動查詢支付結果。這種情形下就涉及併發的問題,可能後台定時任務跟非同步通知同時收到了支付成...

第三方支付

1.什麼是第三方支付 所謂第三方支付,就是一些和各大銀行簽約 並具備一定實力和信譽保障的第三方獨立機構提供的交易支援平台。在通過第三方支付平台的交易中,買方選購商品後,使用第三方平台提供的賬戶進行貨款支付,由第三方通知賣家貨款到達。為什麼要使用第三方支付?因為第三方支付平台已經與各大銀行進行簽約,主...

ios 第三方支付

1.封裝訂單模型 alixpayorder order alixpayorder alloc init 生成訂單描述 nsstring orderspec order description 2.簽名 idsigner creatersadatasigner 私鑰key 傳入訂單描述 進行 簽名 n...