Bacs ダイレクトデビット支払い
Bacs ダイレクトデビット支払いの受け付けについてご紹介します。
イギリスの Stripe ユーザーは、Payment Element と Payment Intent を使用して、イギリスの銀行口座を持つ顧客から Bacs ダイレクトデビットによる決済を受け付けることができます。
はじめに
Payment Element を使用して Bacs ダイレクトデビットを受け付けるには、Payment Element の実装が必要です。Payment Element を使用して決済を受け付けるためのクイックスタートガイドに従って、この実装を作成できます。
注
Bacs ダイレクトデビットのスキームルールでは、顧客は Stripe が顧客の口座から引き落とすことへの同意書に同意するよう定められています。Payment Element は、顧客の支払い詳細を受け付けるときにこの同意書を収集します。そのため、お客様はこの要件に従うために特別な対策を取る必要はありません。
Bacs ダイレクトデビットを受け付けるように Payment Element を設定する
注
Bacs ダイレクトデビットは GBP の決済でのみ使用できます。Payment Intent (支払いインテント) で別の通貨を使用している場合は、Bacs ダイレクトデビットを使用できません。
Payment Element の実装で、決済手段として Bacs ダイレクトデビットを利用できるようにするには、次の 2 通りの方法があります。
支払い後のイベントを処理する
Bacs ダイレクトデビット支払いは、非同期型の方法であるため、売上はすぐには使用可能になりません。
Bacs ダイレクトデビットの PaymentIntent は、新しく作成された同意書に対するものである場合には作成から最長 5 営業日、そうでない場合には最長 3 営業日、pending 状態で保持することができます。支払いが完了すると、PaymentIntent のステータスが succeeded
に更新されます。
Bacs ダイレクトデビットのタイムライン
Bacs ダイレクトデビット支払いの成功または失敗の確認までにかかる日数は、同意書がすでに収集されている場合は 3 営業日、新しい同意書を収集する必要がある場合は 6 営業日です。20:00 UTC 以降に行われた支払いは、翌営業日に送信されます。
場合によっては、お客様の Stripe アカウントで支払い成功としてマークされた後に、銀行が支払いの失敗を通知してくることがあります。この場合には、その支払いの失敗は、適切な理由コードを持つ不審請求の申請として識別されます。
以下の表は Bacs のタイムラインで、新しい同意書の収集が必要な状況で支払いが行われた日 (T) からの所要日数を営業日で表示したものです。
T+0 | 同意書が提出される |
T+3 | 同意書が有効であり、支払いが送信される |
T+5 | 売上が顧客の銀行口座を離れる |
T+6 | 売上が Stripe で使用可能になる |
Webhook を設定する
支払いプロセス中と支払い完了後に、Stripe は複数のイベントを送信します。ダッシュボードの Webhook ツールを使用するか、Webhook のガイドに従って、これらのイベントを受信し、顧客への注文確認メールの送信、データベースでの売上の記録、配送ワークフローの開始などのアクションを実行してください。
Bacs ダイレクトデビットの場合、payment_intent.succeeded イベントを処理して、支払いが成功したことを確認する必要があります。また、payment_intent.processing イベントと payment_intent.payment_failed イベントも処理することをお勧めします。
Webhook をローカルでテストするには、Stripe CLI を使用します。Stripe CLI をインストールすると、イベントをサーバーに転送できます。
stripe listen --forward-to localhost:4242/webhook Ready! Your webhook signing secret is '{{WEBHOOK_SIGNING_SECRET}}' (^C to quit)
Webhook の設定についてもっと知る。
組み込みをテストする
この実装の準備ができていることを確認するために、サンドボックスで使用できるテスト用銀行口座番号が複数用意されています。
銀行コード | 口座番号 | 説明 |
---|---|---|
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 | 支払い額がアカウントの週次支払い額の上限を超えているため、支払いは charge_ エラーコードで失敗します。 |
108800 | 12121212 | 支払い額がアカウントの取引金額の上限を超えているため、支払いは charge_ エラーコードで失敗します。 |
テストの実行には前述の任意の口座番号を使用できます。ただし、Bacs ダイレクトデビットによる支払いは処理に数日かかるため、3 分の遅延で動作するテスト用口座番号を使用して、本番環境の支払いの動作のシミュレーションをしやすくします。
注
デフォルトでは、Stripe は決済情報が初めて収集されたときと、顧客の口座から引き落としが行われるたびに、顧客にメールを送信します。これらの通知は、サンドボックスでは送信されません。
支払いの失敗
決済はさまざまな原因で失敗する可能性があります。失敗の理由は、charge.failure_code から確認できます。特定の失敗コードの支払いのみを再試行できます。支払いを再試行できない場合は、顧客に連絡して、別の銀行口座または別の決済手段を使用して再度支払うように依頼することをお勧めします。
以下は、現時点で送信される Bacs ダイレクトデビット用の失敗コードの一覧です。コードは随時追加される可能性があるため、コードを開発、保守する際には、これらのタイプがすべてではないことに注意してください。
失敗コード | 説明 | 再試行の可否 |
---|---|---|
account_ | 銀行口座が解約されています。 | いいえ |
bank_ | アカウントが新しい決済サービスプロバイダー (PSP) に移管されました。新しい PSP の詳細が通知されているかどうかを確認してください。通知されていない場合は、顧客から新しい同意書を収集する必要があります。 | いいえ |
debit_ | 顧客が銀行に対して、この支払いが未承認であったか、支払い銀行の同意書がないことを通知しました。 | いいえ |
generic_ | この支払いは処理できませんでした。 | はい |
insufficient_ | 顧客の口座には、この支払いに充当できるだけの資金がありません。 | はい |
invalid_ | 口座番号が無効です。これは、GBP の口座ではないか、口座でダイレクトデビット決済を処理できないということが考えられます。 | いいえ |
支払いを再試行するには、同じ PaymentMethod を使用して、再度 PaymentIntent を確定します。
確実に成功させるために、支払いを再試行する前に支払人に連絡することをお勧めします。