為了避免出現訂單重復支付的現象,產品的支付邏輯該怎么設計?


1.避免重復支付肯定是要先找到源頭,重復支付的主要原因是跳轉到第三方支付,支付后沒有及時收到支付成功的返回參數,訂單一直卡在待支付狀態。所以應該設置同一個訂單,x秒內不能再次發起支付,大部分訂單可以在這個x秒內獲取到返回的支付參數。一些極個別的情況可能無法完美避免,比如極端情況x秒內還是沒有返回參數,進行了二次支付。但是這樣大大減少了重復支付的概率,再配和第一個問題所說,進行重復支付退款,就能完美解決題主的問題。

 
2.重復支付最根本的原因是接口回調結果引起的,先重視這個問題。
另外,避免方案,當用戶發起一次支付后,是會返回結果頁的,如果沒有返回,當發起第二次支付時做出是否已支付的判斷或做一個預警機制,多少時間內不允許重復支付。
 
3.一般重復支付發生在用戶支付成功,卡余額已扣除,系統未收到銀行通知,用戶再次發生支付。

1 系統未收到銀行通知,可以是由於網絡問題,或者其他異常調單,一般系統這里會做一個自動補單機制,就是根據訂單號到銀行查詢該訂單的狀態,考慮到系統性能等情況3-5分鍾查詢一次就可以,查詢半個小時的訂單,通過這種機制可以90%的訂單狀態能夠正常

2 訂單未查詢回來或者期間用戶又發生支付,一般系統設計一筆訂單號有一個交易狀態,重復支付更新交易狀態時可增加判斷,如果訂單已成功,系統自動發起退款交易即可

 

4.訂單支付這些接口都會做冪等處理,避免重復重復支付。成功調用下單接口后,此時會鎖單,包括用戶積分,優惠券...這些都會做相應的扣減。成功調用支付接口,訂單狀態會變成"支付中",后台會等待銀行支付結果的回調通知,當然,可能會出現后台或者銀行的原因,導致沒收到銀行回調通知(這種情況比較少發生,銀行的回調一般都會回調好幾次,直到收到后台確認),所以后台還需要在某個閾值時間后,如果還沒收到銀行回調通知的話,定時去拉幾遍支付結果,然后更新訂單狀態,再通知其他業務服務。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM