code分成三類:
1. 明确成功的code
2. 明确失敗的code
3. 未知狀态的code(未知的code)
原則:
未知code保持進行中
1. 提現一定要查詢修複方式。同步的:隻相信success,其他保持不變,通過狀态來決定狀态。異步的:同步,維持狀态不變。
2. 充值(預充值),成功保持進行中,其他不關閉,隻是記錄已出錯過,下次重新擷取流水号。
如果未知code關閉,這樣就不會出現因為微信某種原因拒絕,重試還是拒絕,導緻使用者再也無法支付的現象。一直用同個流水号。導緻問題,支付後又來請求,會導緻關閉掉。
改進: 不關閉,隻是記錄已出錯過。 不影響狀态流轉。解決了支付的一個大問題,線上遇到的場景:未知code到底是保持進行中,還是保持關閉的問題。
對支付而言:這種case下,如果保持進行中,又支付,還是失敗的。如果關閉,可能已經支付成功了,但是又調用了一次。
3. 代扣。 未知code。 關閉對我方有好處,使用者損失,不會導緻使用者無法重複代扣的問題。進行中好處,可以通過後續狀态檢查校驗。
未知狀态的code。
這些code有些是錯誤可重試的,有些是不可重試的,不管可不可重試,最好都阻斷掉。
是以請求方可以重新請求,以擷取結果。也可以采用查詢狀态的方案來實作。
好的提供者,内部要保證完整性。采用狀态查詢修複和再次查詢的方案。
如果某個提供者,不提供内部完整性。
查詢到狀态為
1、進行中,重試,觸發流轉。
2、失敗,關閉。不重試。
3.、 成功。不重試
4. 、無,重試。可能觸發流轉,也可能繼續被拒絕傳回未知code,陷入無限死循環。
是以建議
如果對方明确接口是可重試的,内部不保證完整性,建議用後者。