ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

決済とデータベース登録の順序を考慮する

正常なら問題ありませんが、エラーが発生した場合を考えると、処理する順番が気になります。
f:id:AJYA:20141021053731j:plain
photo credit: tec_estromberg via photopin cc

ECサイトでは、

  1. 名前や住所、購入する物の他にクレジットカードの情報を入力
  2. 入力内容の確認
  3. 決済とデータベースへの登録をして、処理結果を表示およびメール送信

といった順番で処理を作っています。

エラーは起きるのか?

3.の決済では他社の決済代行サービスを利用していて、クレジットカードの番号が正しくなかった場合は、当然エラーが戻ってきます。
データベースへの登録は、入力時に入力内容をチェックしているので、エラーが発生しないはずですが、100%エラーが発生しないということはありません。

考慮すべき点

決済とデータベースへの登録の、どちらでもエラーが発生するという点は、当然考慮してコーディングが必要です。
どちらを先に処理すべきかを考えると、データベースへの登録が先で、決済が後になります。

決済を先に行って正常で、データベースへの登録を後から行ってエラーの場合、データベースはロールバックか削除で対処できますが、決済は取り消すことが容易ではありません。
そのため、データベースへの登録が先で、決済が後という考えにいたっています。

現在は、決済の結果が正常だったらデータベースをコミットして一旦確定しています。
決済の結果、なんらかの戻り値をデータベースに登録したい場合は、再度データベースに登録しています。
そうしないと、決済の結果をデータベースに登録するときにエラーが発生した場合、決済を取り消さなければいけません。


正常だけなら簡単ですが、エラーが発生した場合の考慮が必要なので、よくよく考えていかないといけません。