金流服務如何避免重複付款?

整合金流服務 100% 會遇到的經典問題,就是「重複付款」,這原因不外乎是使用者在前端介面按了好幾次的付款,或者後端請款的 API 因為錯誤重試(retry)導致重複請款,這些情況都會導致使用者重複付款,一旦被發現絕對是會重創公司聲譽的情況,一定要小心! 所以針對這種絕對不能重複發生的 API, 開發上會要求羃(ㄇㄧˋ)等性(idempotency),也就是說無論前端或後端怎麼呼叫 API ,只要 API 參數相同,結果就會 100% 相同,譬如付款 API 回傳失敗就是失敗,不會多呼叫幾次就突然變成付款成功。

為了讓 API 有所謂的羃等性,我們通常會在 API 裡添加所謂的 idempotency key (一定愛配 lock ),這個 key 通常由後端產生,最直覺的值就是訂單編號,前端拿到 idempotency key 之後,後續呼叫 API 就得代入這組 key, 後端伺服器在後續的處理都會以這組 idempotency key 進行檢查,例如檢查是否已經訂單取消、或者請過款等等,並回傳結果予前端。

Airbnb 也分享他們怎麼處理重複付款的文章,有興趣的話可以花點時間閱讀一下 Avoiding Double Payments in a Distributed Payments System

FOLLOW US

對抗久坐職業傷害

研究指出每天增加 2 小時坐著的時間,會增加大腸癌、心臟疾病、肺癌的風險,也造成肩頸、腰背疼痛等常見問題。

然而對抗這些問題,卻只需要工作時定期休息跟伸展身體即可!

你想輕鬆改變現狀嗎?試試看我們的 PomodoRoll 番茄鐘吧! PomodoRoll 番茄鐘會根據你所設定的專注時間,定期建議你 1 項辦公族適用的伸展運動,幫助你打敗久坐所帶來的傷害!

贊助我們的創作

看完這篇文章了嗎? 休息一下,喝杯咖啡吧!

如果你覺得 MyApollo 有讓你獲得實用的資訊,希望能看到更多的技術分享,邀請你贊助我們一杯咖啡,讓我們有更多的動力與精力繼續提供高品質的文章,感謝你的支持!