カナダでの将来のプレオーソリデビットによる支払いに備えて支払い方法の詳細を保存する
将来のカナダのプレオーソリデビット支払いに備えて支払い方法の詳細を保存します。
Setup Intents API を使用して、事前に支払い方法の詳細を収集し、後から最終的な金額や支払い日を確定できます。この機能が役立つ用途を紹介します。
- 支払い方法をウォレットに保存して、以降の購入を効率化する
- サービスの提供後に追加料金を回収する
- サブスクリプションの無料トライアルを開始する
カナダのほとんどの銀行口座で保有されているのはカナダドル (CAD) ですが、少数ながら米ドル (USD) などの他の通貨を保有する口座もあります。PAD では CAD と USD のどちらでの支払いも可能ですが、支払いの失敗を避けるため、顧客に適切な通貨を選択することが重要です。
多くのカードベースの支払い方法とは異なり、CAD の口座からの USD での引き落としや、USD の口座からの CAD での引き落としは成功しない可能性があります。多くの場合、このような引き落としを試行すると、遅延して支払い失敗が発生します。この遅延は最大 5 営業日です。
このような支払い失敗を避けるには、顧客の口座が間違いなく USD での引き落としに対応している場合を除き、PAD の銀行口座の引き落としは CAD に設定するのが最も安全です。
Customer を作成または取得するサーバ側
以降の支払いに銀行口座を再利用するには、その口座を Customer に関連付ける必要があります。
顧客がお客様のビジネスでアカウントを作成するときに、Customer オブジェクトを作成する必要があります。Customer オブジェクトの ID を、独自の内部的な顧客の表記に関連付けることにより、保存された支払い方法の詳細を後で取得して使用できます。顧客がアカウントを作成していない場合でも、すぐに Customer オブジェクトを作成し、後でこのオブジェクトを顧客のアカウントの内部表記に関連付けることができます。
新しい Customer を作成するか、または既存の Customer を取得して、この支払い詳細に関連付けます。サーバに以下のコードを含め、新しい Customer を作成します。
SetupIntent を作成するサーバ側
SetupIntent (支払い方法設定インテント) は、今後の決済に備えて顧客の支払い方法を設定する意図を表すオブジェクトです。SetupIntent
は、この設定プロセスのステップを追跡します。
カナダのプリオーソリデビットを使用するには、プリオーソリデビット利用規約を使用して、1 回限りの引き落としと継続的な引き落としについて顧客から承認を得る必要があります (PAD 同意書を参照)。Mandate (同意書) オブジェクトは、この利用契約と承認を記録します。
payment_method_types を acss_
に設定して、サーバー上で SetupIntent を作成し、Customer の id を指定します。この SetupIntent の Mandate (同意書) に支払いスケジュールを定義するには、以下のパラメーターも指定します。
パラメータ | 値 | 必須か否か |
---|---|---|
payment_ | この支払い方法で将来の支払いに使用する通貨。顧客の銀行口座の通貨と一致する必要があります。使用可能な値は cad または usd です。 | はい |
payment_ | 同意書の支払いスケジュール。使用可能な値は interval 、sporadic 、combined です。ビジネスに適したスケジュールを選択するには、PAD 同意書の概要を参照してください。 | はい |
payment_ | 支払いスケジュールの間隔について説明するテキスト。ビジネスに適した間隔の説明を作成するには、PAD 同意書の概要を参照してください。 | payment_ の値が interval または combined の場合 |
payment_ | 作成する同意書のタイプ。personal (顧客が個人の場合) または business (顧客がビジネスの場合) のいずれかです。 | はい |
client secret を取得する
SetupIntent には、client secret が含まれています。これは、支払いプロセスを安全に完了するためにクライアント側で使用されます。client secret をクライアント側に渡す際は、いくつかの方法を使用できます。
支払い方法の詳細と同意書承認を収集するクライアント側
顧客が Canadian pre-authorized debitでの支払いをクリックしたときに、Stripe.js を使用してその支払いを Stripe に送信することをお勧めします。Stripe.js は、決済フローを構築するための Stripe の基本的な JavaScript ライブラリです。これにより、実装に関する複雑な処理が自動的に行われ、将来、他の決済手段にも対応できるように実装を簡単に拡張できます。
Stripe.js スクリプトを決済ページに含めるには、このスクリプトを HTML ファイルの head
に追加します。
<head> <title>Checkout</title> <script src="https://js.stripe.com/v3/"></script> </head>
決済ページで以下の JavaScript を使用して、Stripe.js のインスタンスを作成します。
// Set your publishable key. Remember to change this to your live publishable key in production! // See your keys here: https://dashboard.stripe.com/apikeys const stripe = Stripe(
);'pk_test_TYooMQauvdEDq54NiTphI7jx'
PaymentIntent オブジェクト全体をクライアントに送信する代わりに、前のステップからの client secret を使用します。これは、Stripe API リクエストを認証する API キーとは異なります。
ただし、client secret は支払いを完了できるため、慎重に取り扱う必要があります。記録したり、URL に埋め込んだり、当該の顧客以外に漏洩することがないようにしてください。
ユーザーがフォームを送信したら、stripe.confirmAcssDebitSetup を使用して、銀行口座の詳細と確認を収集し、同意書を確認し、設定を完了します。PAD の決済手段を作成するには、payment_
パラメーターの billing_
プロパティに顧客のメールアドレスと口座名義人を含める必要があります。
const form = document.getElementById('payment-form'); const accountholderName = document.getElementById('accountholder-name'); const email = document.getElementById('email'); const submitButton = document.getElementById('submit-button'); const clientSecret = submitButton.dataset.secret; form.addEventListener('submit', async (event) => { event.preventDefault(); const {setupIntent, error} = await stripe.confirmAcssDebitSetup( clientSecret, { payment_method: { billing_details: { name: accountholderName.value, email: email.value, }, }, } ); if (error) { // Inform the customer that there was an error. console.log(error.message); } else { // Handle next step based on SetupIntent's status. console.log("SetupIntent ID: " + setupIntent.id); console.log("SetupIntent status: " + setupIntent.status); } });
Stripe.js は、ページ上のモーダル UI をロードして、銀行口座の詳細の収集と銀行口座の確認を処理し、オンライン同意書を提示して承認を収集します。
注
stripe.
の完了には数秒かかる場合があります。この間、フォームが再送信されないように無効化し、スピナーのような待機中のインジケーターを表示します。エラーが発生した場合は、それを顧客に表示し、フォームを再度有効化し、待機中のインジケーターを非表示にします。
成功した場合、Stripe は SetupIntent (支払い方法設定インテント) オブジェクトを、以下のステータスのいずれかで返します。
ステータス | 説明 | 次のステップ |
---|---|---|
succeeded | 銀行口座が即座に確認されたか、確認が必要ありませんでした。 | アクションは不要です |
requires_ | 銀行口座の確認を完了するには、追加のアクションが必要です。 | ステップ 5: 少額入金で銀行口座を確認する |
SetupIntent の確認に成功した後、同意書の確認メールと収集した銀行口座の詳細を顧客に送信する必要があります。Stripe はデフォルトでこれらの処理を行いますが、ご希望に応じてカスタム通知の送信を選択することができます。
注
組み込みのテストの際は、顧客のメールアドレスに同意書の確認は送信されません。
顧客が確認フローを完了せずにモーダルを閉じることを選択した場合、Stripe.js は次のようなエラーを返します。
{ "error": { "type": "validation_error", "code": "incomplete_payment_details", "message": "Please provide complete payment details." } }
少額入金で銀行口座を確認するクライアント側
すべての顧客が銀行口座を即座に確認できるとは限りません。このステップは、顧客が前のステップで即時確認フローからオプトアウトした場合にのみ適用されます。
In this case, Stripe automatically sends two micro-deposits to the customer’s bank account. These deposits take 1–2 business days to appear on the customer’s online statement and have statement descriptors that include ACCTVERIFY
.
stripe.
メソッドの呼び出しの結果として、requires_
状態の SetupIntent が返されます。SetupIntent には、確認を完了するための有益な情報を含む next_
フィールドが含まれています。
Stripe は請求書メールで入金の到着予定日を顧客に通知します。このメールには、Stripe がオンラインで提供する確認ページへのリンクが含まれ、顧客はそのページで入金額を確認して銀行口座の確認を完了することができます。
確認の失敗は 3 回までです。この上限を超えると、銀行口座の確認ができなくなります。また、少額入金の確認は 10 日経過するとタイムアウトになります。少額入金がこの期間内に確認されない場合、PaymentIntent は新しい支払い方法の詳細を要求する状態に戻ります。少額入金とは何か、どのように使用するのかを顧客に明確に伝えることで、顧客は確認に関連する問題を回避できます。
オプション: カスタムのメールと確認ページ
カスタムのメール通知の送信を選択した場合は、顧客にメールを送信する必要があります。このためには、next_
オブジェクトの verify_
の URL を使用して、顧客に確認プロセスを完了するよう指示します。
カスタムメールを送信していて、Stripe がオンラインで提供する確認ページを使用しない場合、Stripe.js を使用して、顧客がこれらの金額をお客様に伝えて銀行口座を確認するためのフォームを自社サイトに作成できます。
stripe.verifyMicrodepositsForSetup(clientSecret, { amounts: [32, 45], });
銀行口座の確認に成功すると、Stripe は succeeded
の status
で SetupIntent (支払い方法設定インテント) オブジェクトを返し、setup_
Webhook イベントを送信します。
確認が失敗する原因はいくつか存在します。失敗は直接的なエラー応答で同期的に発生することも、setup_
Webhook イベントを通じて非同期で発生することもあります (以下の例を参照してください)。
エラーコード | 同期または非同期 | メッセージ | ステータスの変更 |
---|---|---|---|
payment_ | 同期、または Webhook イベントを通じて非同期で発生 | 少額入金に失敗しました。指定した銀行口座、金融機関、支店の番号を確認してください | status は requires_ で、last_ が設定されます。 |
payment_ | 同期 | 指定された金額が銀行口座に送金された金額と一致しません。確認試行の残り回数は {attempts_remaining} 回です。 | 変化なし |
payment_ | 同期、および Webhook イベントを通じて非同期で発生 | 許容された確認の試行回数を超えました | status は requires_ で、last_ が設定されます。 |
payment_ | Webhook イベントを通じて非同期で発生 | 少額入金がタイムアウトになりました。顧客は要求された 10 日の期間内に銀行口座を確認しませんでした。 | status は requires_ で、last_ が設定されます。 |
組み込みをテストする
少額入金の確認メールを受信する
銀行口座の詳細を収集し、同意書を承認した後に、テスト環境で少額入金の確認メールを受信するには、支払い方法の詳細を確認する際に、payment_
フィールドに {any_
の形式でメールアドレスを指定します。
テスト用の口座番号
Stripe では、手動入力の銀行口座の組み込みが本番環境に移行する準備が整ったかどうかを確認するため、テスト用の口座番号をいくつか用意しています。支払いが自動的に成功または失敗するすべてのテスト用の口座は、以下のテスト用の少額入金を使用して確認してから設定を完了する必要があります。
銀行番号 | 支店番号 | 口座番号 | シナリオ |
---|---|---|---|
000 | 11000 | 000123456789 | 少額入金が確認された後、支払いが直ちに成功します。 |
000 | 11000 | 900123456789 | 少額入金が確認された後、3 分遅延してから支払いが成功します。 |
000 | 11000 | 000222222227 | 少額入金が確認された後、支払いが直ちに失敗します。 |
000 | 11000 | 900222222227 | 少額入金が確認された後、3 分遅延してから支払いが失敗します。 |
000 | 11000 | 000666666661 | 確認用の少額入金の送金が失敗します。 |
000 | 11000 | 000777777771 | Fails the payment due to the payment amount causing the account to exceed its weekly payment volume limit. |
000 | 11000 | 000888888881 | Fails the payment due to the payment amount exceeding the account’s transaction limit. |
テスト環境で銀行口座確認の成功または失敗をデモンストレーションするには、少額入金に以下の特定の金額を使用してください。
少額入金の金額 | シナリオ |
---|---|
32 および 45 | 口座が無事に確認されます。 |
その他の任意の数字の組み合わせ | 口座の確認が失敗します。 |