正常なら問題ありませんが、エラーが発生した場合を考えると、処理する順番が気になります。
photo credit: tec_estromberg via photopin cc
ECサイトでは、
- 名前や住所、購入する物の他にクレジットカードの情報を入力
- 入力内容の確認
- 決済とデータベースへの登録をして、処理結果を表示およびメール送信
といった順番で処理を作っています。
エラーは起きるのか?
3.の決済では他社の決済代行サービスを利用していて、クレジットカードの番号が正しくなかった場合は、当然エラーが戻ってきます。データベースへの登録は、入力時に入力内容をチェックしているので、エラーが発生しないはずですが、100%エラーが発生しないということはありません。
考慮すべき点
決済とデータベースへの登録の、どちらでもエラーが発生するという点は、当然考慮してコーディングが必要です。どちらを先に処理すべきかを考えると、データベースへの登録が先で、決済が後になります。
決済を先に行って正常で、データベースへの登録を後から行ってエラーの場合、データベースはロールバックか削除で対処できますが、決済は取り消すことが容易ではありません。
そのため、データベースへの登録が先で、決済が後という考えにいたっています。
現在は、決済の結果が正常だったらデータベースをコミットして一旦確定しています。
決済の結果、なんらかの戻り値をデータベースに登録したい場合は、再度データベースに登録しています。
そうしないと、決済の結果をデータベースに登録するときにエラーが発生した場合、決済を取り消さなければいけません。
正常だけなら簡単ですが、エラーが発生した場合の考慮が必要なので、よくよく考えていかないといけません。