EC サイトの決済(与信)処理を非同期的に実施する場合の処理フローについて紹介
概要
先日 EC サイト決済で特によく用いる 「与信」 と 「売上」 および関連する決済処理 についての記事をまとめました。
上記では主にクレジットカード決済での同期的な処理フローを例に話をしました。ただし、決済方法によってはこのような単純なフローではなく、非同期的な処理フローとなる場合があります。
当記事では非同期処理の代表的なフローをご紹介します。特に「与信」の処理は非同期で行うことが多いので、以下与信の非同期処理フローについて紹介します。
- クレジットカードの本人認証(3Dセキュア)
- その他オンライン決済
prismatix ( EC / CRM 向け API プラットフォーム) の決済サービスは、以下で紹介するフローを考慮した機能を提供しております。
非同期的な処理フローについて
「完了の結果を受け取る処理は、そのリクエストを受けた処理とは別となる」 フローのことを、ここでは非同期的な処理フローと呼びます。例えば与信の場合ですと以下の様なフローを指します。
以前紹介したフローでは EC サイトが与信のリクエストを受けて、クレジットカード会社や決済代行サービスは「与信処理が完了」して結果を返しています。非同期的な処理フローの場合、与信のリクエストを受けて結果は返しますが、この時点では まだ与信が完了していません。
与信完了するためには顧客が何らかの操作をする必要があり、 EC サイトはその操作の結果を受けて初めて与信処理が完了できます。
クレジットカードの本人認証(3Dセキュア)
クレジットカードを発行する各ブランドが本人認証のサービス(以下、3Dセキュア)を提供しています。 1
3Dセキュアを利用した決済機能を使う場合、 カード会社が提供する本人認証のパスワード入力画面に促すステップが必要です。「与信をリクエストした人=カードを所持する本人」 であると認めて初めて与信を実行します。
カードの不正利用に対するセキュリティ対策として、3Dセキュアを利用したカード決済は有効な手段の一つと言えます。
3Dセキュア決済のフロー
以下はクレジットカード3Dセキュア決済フローの一例です。
- 顧客が商品の注文確定をリクエストする
- EC サイトは3Dセキュアを利用した与信リクエストを実施する
- EC サイトは本人認証画面の情報をブラウザ経由で顧客に表示する
- 顧客が本人認証を実施する
- 決済代行サービスおよび決済会社が結果を元に与信処理を完了する
- EC サイトが結果を受けて与信処理を完了する
顧客が3Dセキュアによる認証をして初めて与信を実行し、 EC サイトにその結果を連携します。
その他オンライン決済
これまではクレジットカード決済を前提に話をしましたが、最近では決済代行会社がオンライン決済サービス 2 を提供し、顧客はそのサービスを利用して金額の支払いを行うケースもあります。
顧客やカードの情報はオンライン決済サービスが管理します。 EC サイトは顧客へオンライン決済サービスへのログインを促し、顧客がそのサービスへログインして自身が登録したカード等決済手段を選択して決済を実行します。
オンライン決済の処理フロー
以下はオンライン決済サービスを使用した与信の代表的なフローを挙げています。 3
- 顧客が商品の注文確定をリクエストする
- EC サイトはオンライン決済サービスへの画面遷移情報をブラウザ経由で顧客に表示する
- 顧客がオンライン決済サービスに対するログインや決済手段の選択をして与信完了の操作をする
- オンライン決済サービスが結果を元に与信処理を完了する
- EC サイトが結果を受けて与信処理を完了する
クレジットカード決済の3Dセキュアと同様、顧客の決済操作が完了した時点で EC サイトにその結果を連携します。
与信完了とみなすタイミングについて
上記で紹介した3Dセキュア・オンライン決済ですが、与信の結果が返るタイミングが2通りあります。
- 顧客が使用するブラウザを経由して、完了画面にリダイレクトする時
- 決済代行サービス (またはオンライン決済サービス) から与信完了の通知を受信する時
顧客から見ると、1の注文確定画面に遷移できたのを見て与信が完了したように見えます。ただし、 EC サイト(とりわけサーバーサイド)では2の 決済代行サービスやオンライン決済サービスからの通知を受けた時点で与信完了とみなす ことを推奨します。
ブラウザ経由でのリダイレクトは、途中で顧客がブラウザを閉じてしまった場合や、ブラウザから EC サイトへのリダイレクト遷移時に通信エラーが発生し、 EC サイトに結果が届かない可能性があります。 EC サイトのサーバーサイドで決済代行サービスからの結果を受信し、与信完了とみなす処理をすることが確実です。
非同期での処理となるため、顧客には与信完了とみなした際にメール等の手段で決済完了したことを伝える必要があります。
タイムアウトの考慮
3Dセキュアやオンライン決済は、いずれも顧客が与信完了するための操作をする事が前提となります。 EC サイトは顧客の操作が完了するまで待つ必要があります。ですが、 顧客が途中で何も操作しなかったり、ブラウザを閉じたりすると、そこで操作が止まります。 与信は一向に完了せずその結果を受け取ることもできないため、 EC サイト側は顧客が商品の注文をリクエストしたにも関わらず確定できない状態が続いてしまいます。
この事態を回避するため、一定の期間を決めて適切な タイムアウト処理 が必要となります。
以下はカード決済で3Dセキュアの与信リクエストを受けた後、顧客が一定時間の間に操作をしなかった場合のタイムアウトの一例です。
EC サイト側でタイムアウトとみなした後に、顧客が与信の操作をする場合もあります。EC サイト上ではすでに与信失敗とみなしているので、この場合は与信を適切にキャンセルして顧客に与信成立していない旨を提示します。
以上で、決済の非同期的な処理フローの代表的な例を挙げさせていただきました。
さいごに
prismatix をより良いサービスにしていくエンジニアを引き続き募集しています
当記事で紹介したフローを考慮した決済サービスを prismatix では提供しております。決済サービスを始め、 prismatix を構成する様々なマイクロサービスを一緒に開発・運用していくメンバーを現在も引き続き募集しております。
弊社オンラインイベント「Developers.IO 2020 Connect」で今回の記事を元にした決済の話をします
弊社が主催するオンラインイベント Developers.IO 2020 CONNECT の 5日目(6/30)にライブセッションで登壇することになりました。
前回の記事と今回の記事を踏まえた決済の話をする予定です。ライブセッションでは質疑応答の場も用意していますので、私のブログを見て疑問点や気になった点があればこの機会に質問をぶつけてみてください。
よろしくおねがいします。
補足
- 3Dセキュアは、例えば VISA なら Visa Secure, JCB なら J/Secure などがあります。 ↩
- オンライン決済サービスとは、例えば Amazon が提供する Amazon Pay のようなサービスのことです。 ↩
- ほとんどのオンライン決済サービスではエンドユーザーを介した非同期的なフローとなります。ただしサービスの仕様によっては当記事で挙げたフローが一概に適用できるとは限りません。 ↩