Bacs ダイレクトデビットの銀行詳細を保存する
今後の Bacs ダイレクトデビット支払いに備えて、Checkout を使用して支払い方法の詳細を保存する方法を紹介します。
Stripe Checkout を使用して、事前に Bacs ダイレクトデビット支払いの詳細を収集し、後から最終的な金額や支払い日を決定します。この機能が役立つ用途を紹介します。
- 支払い方法をウォレットに保存して、以降の購入を効率化する。
- サービスの提供後に追加料金を回収する。
- サブスクリプションの無料トライアルを開始する。
Customer の作成サーバ側
将来の支払いで Bacs ダイレクトデビットの支払い方法を再利用するには、この支払い方法を Customer に関連付ける必要があります。顧客がお客様のビジネスでアカウントを作成するときに Customer オブジェクトを作成し、その Customer オブジェクトの ID を顧客を表す独自の内部表現に関連付け、保存した支払い方法の詳細を後で使用できるようにします。既存の Customer オブジェクトがある場合は、このステップをスキップしてください。
Checkout セッションを作成するクライアント側サーバ側
ダイレクトデビットによる支払いを受け付ける前に、顧客は Stripe Checkout を介して銀行口座情報を提供し、口座からの引き落としを許可する必要があります (同意書とも呼ばれます)。
Web サイトに決済ボタンを追加し、サーバー側のエンドポイントを呼び出して Checkout セッションを作成します。
<html> <head> <title>Checkout</title> </head> <body> <form action="/create-checkout-session" method="POST"> <button type="submit">Checkout</button> </form> </body> </html>
setup
モードで Checkout セッションを作成して、必要な情報を収集します。Checkout セッションを作成したら、レスポンスで返された URL に顧客をリダイレクトします。
顧客は支払いを正常に完了すると、success_
にリダイレクトされます。これはお客様の Web サイト上にある、支払いが成功したことを顧客に知らせるページです。上記の例のように success_
に {CHECKOUT_
テンプレート変数を含めることによって、成功ページでセッション ID を使用できるようにします。
顧客が支払い方法の詳細を提供せずに Checkout セッションでお客様のロゴをクリックすると、Checkout は、cancel_
に移動して、顧客をお客様の Web サイトにリダイレクトします。このページは通常、顧客が Stripe Checkout にリダイレクトされる前に表示していた Web サイトのページです。
注意
次に挙げる理由により、支払い開始の検出時には、success_
へのリダイレクトのみに依存しないでください。
- 悪意を持つユーザが、支払いをせずに
success_
に直接アクセスし、商品やサービスにアクセスできるようになる可能性があります。url - 顧客が支払いの成功後に
success_
に到達するとは限りません。リダイレクトが発生する前に、顧客がブラウザタブを閉じることがあります。url
注
Bacs ダイレクトデビットのルールでは、支払い詳細を収集したときに、顧客にメール通知を送信することが義務付けられています。デフォルトでは、これらのメールは Stripe によって自動的に送信されます。独自の Bacs 通知を送信することも選択できます。
支払い方法を取得するサーバ側
顧客が支払いの詳細を送信した後に、PaymentMethod (決済手段) オブジェクトを取得します。PaymentMethod は、顧客のbank account情報を保存して今後の支払いに利用できるようにします。PaymentMethod は、success_
を使用して同期的に取得することも、Webhook を使用して非同期的に取得することもできます。
顧客が支払いの成功後に必ず success_
に到達するとは限らないため (たとえば、リダイレクトが行われる前に顧客がブラウザータブを閉じることもあります)、PaymentMethod を同期的に取得するか非同期的に取得するかは、ドロップオフの許容度によって異なります。Webhook を使用すると、組み込みでこの種のドロップオフを防止できます。
設定後のイベントを処理するサーバ側
Checkout セッションが完了すると、支払い詳細が同意書として銀行に送信されます。
同意書は、収集後にいつでも変更される可能があります。同意書の変更が行われるのは、顧客が銀行に同意書の修正を指示した場合や、銀行自体が変更された場合 (たとえば、顧客が別の銀行に変更した場合など) などが考えられます。同意書が変更されると、Stripe は 以下のイベントを送信します。
イベント名 | 説明 | 支払いの受け付けが可能か |
---|---|---|
mandate. | 同意書が Bacs ネットワークによって拒否、キャンセル、または再度有効化された場合に発生します。mandate.status を確認し、同意書を引き続き使用できるかどうかを判断してください。 | はい (新しいステータスが active の場合) |
payment_ | 顧客の銀行口座詳細が変わった場合に発生します。 | はい |
組み込みをテストする
実装の準備ができていることを確認するために、テスト環境で使用できるテスト用の銀行口座番号が複数あります。
銀行コード | 口座番号 | 説明 |
---|---|---|
108800 | 00012345 | 支払いが成功し、PaymentIntent が processing から succeeded に変化します。 |
108800 | 90012345 | 支払いが 3 分後に成功し、PaymentIntent が processing から succeeded に変化します。 |
108800 | 33333335 | 支払いが承認されますが、すぐに debit_ エラーコードによって失敗し、PaymentIntent が processing から requires_ に変わります。同意書は inactive になり、この PaymentMethod を再び使用することはできません。 |
108800 | 93333335 | 支払いが debit_ エラーコードによって 3 分後に失敗し、PaymentIntent が processing から requires_ に変化します。同意書は inactive になり、この PaymentMethod を再び使用することはできません。 |
108800 | 22222227 | 支払いが insufficient_ エラーコードによって失敗し、PaymentIntent が processing から requires_ に変化します。同意書は active のままで、この PaymentMethod は再使用が可能です。 |
108800 | 92222227 | 支払いが insufficient_ エラーコードによって 3 分後に失敗し、PaymentIntent が processing から requires_ に変化します。同意書は active のままで、この PaymentMethod は再使用が可能です。 |
108800 | 55555559 | 支払いが 3 分後に成功し、PaymentIntent が processing から succeeded に変わりますが、不審請求の申請が直ちに作成されます。 |
108800 | 00033333 | 支払い方法の作成は成功しますが、同意書が顧客の銀行によって拒否され、即座に inactive に変化します。 |
108800 | 00044444 | Bacs ダイレクトデビットの設定を求めるリクエストが、口座番号が無効なため即座に失敗し、顧客は送信前に情報を更新するように求められます。支払いの詳細は収集されません。 |
108800 | 34343434 | The payment fails with a charge_ failure code due to the payment amount causing the account to exceed its weekly payment volume limit. |
108800 | 12121212 | The payment fails with a charge_ failure code due to the payment amount exceeding the account’s transaction volume limit. |
テストの実行には前述の任意の口座番号を使用できます。ただし、Bacs ダイレクトデビットによる支払いは処理に数日かかるため、3 分の遅延で動作するテスト用口座番号を使用して、本番環境の支払いの動作のシミュレーションをしやすくします。
注
デフォルトでは、Stripe は支払いの詳細が最初に収集されたときと、顧客の口座から引き落としが行われるたびに、顧客にメールを送信します。テスト環境では、これらの通知は送信されません。
支払い方法を将来の支払いに使用するサーバ側
PaymentMethod を設定した後、PaymentIntent を作成して確定することで、将来の Bacs ダイレクトデビットによる支払いの受け付けが可能になります。