決済照合エラーの解決
あるクライアントが2,000ドルの損失を出しました。財務責任者は、その差額を探すために4晩を費やしました。
問題はリトライジョブでした。システムが120件の決済を二重に処理してしまったのです。顧客への再請求は行われませんでしたが、台帳に二重のレコードが追加されていました。
私たちは「べき等性(idempotency)レイヤー」を導入することでこれを解決しました。これにより、決済が一度しか処理されないことが保証されます。
具体的な手法は以下の通りです:
- Redisロックを使用して、二重のリクエストを防止しました。
- バックアップとして、データベースにユニークインデックスを追加しました。
- ゲートウェイ名とトランザクションIDを組み合わせたキーを使用しました。
また、為替レートの問題も解決しました。以前のシステムはリアルタイムのレートを使用していましたが、レートは変動が激しいため、これが差額を生む原因となっていました。
現在は、注文開始時にレートを固定(ロック)しています。これにより、顧客が表示される価格と、財務チームが確認する価格が一致します。
さらに、日次レポートも作成しました。これは銀行のCSVファイルと自社の記録を照合するものです。その結果、月間の作業時間は15時間から2時間に短縮されました。
Excelや深夜までの作業に頼るのはやめましょう。決済エラーは設計上の問題なのです。
まずはデータベースのインデックスから始めましょう。規模が拡大するにつれてRedisロックを追加していきます。決済通知が一度しか届かないと決して決めつけないでください。