決済照合エラーの解決

あるクライアントが2,000ドルの損失を出しました。財務責任者は、その差額を探すために4晩を費やしました。

問題はリトライジョブでした。システムが120件の決済を二重に処理してしまったのです。顧客への再請求は行われませんでしたが、台帳に二重のレコードが追加されていました。

私たちは「べき等性(idempotency)レイヤー」を導入することでこれを解決しました。これにより、決済が一度しか処理されないことが保証されます。

具体的な手法は以下の通りです:

  • Redisロックを使用して、二重のリクエストを防止しました。
  • バックアップとして、データベースにユニークインデックスを追加しました。
  • ゲートウェイ名とトランザクションIDを組み合わせたキーを使用しました。

また、為替レートの問題も解決しました。以前のシステムはリアルタイムのレートを使用していましたが、レートは変動が激しいため、これが差額を生む原因となっていました。

現在は、注文開始時にレートを固定(ロック)しています。これにより、顧客が表示される価格と、財務チームが確認する価格が一致します。

さらに、日次レポートも作成しました。これは銀行のCSVファイルと自社の記録を照合するものです。その結果、月間の作業時間は15時間から2時間に短縮されました。

Excelや深夜までの作業に頼るのはやめましょう。決済エラーは設計上の問題なのです。

まずはデータベースのインデックスから始めましょう。規模が拡大するにつれてRedisロックを追加していきます。決済通知が一度しか届かないと決して決めつけないでください。

出典: https://dev.to/yanmoheluo/daigou-code-how-we-solved-payment-reconciliation-nightmares-in-cross-border-order-management-3df7