カナダでの将来のプレオーソリデビットによる支払いに備えて支払い方法の詳細を保存する
将来のカナダのプレオーソリデビット支払いに備えて支払い方法の詳細を保存します。
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_ | 同意書を使用する取引のタイプ。個人的な理由による取引の場合とビジネス的な理由による取引の場合があります。 | はい |
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/clover/stripe.js"></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." } }
少額入金で銀行口座を確認するクライアント側
すべての顧客が銀行口座を即座に確認できるとは限りません。このステップは、顧客が前のステップで即時確認フローからオプトアウトした場合にのみ適用されます。
この場合、Stripe は顧客の銀行口座に 2 回に分けて少額入金を自動的に行います。これらの入金が顧客のオンライン明細書に表示され、ACCTVERIFY 明細書表記が付けられるまでに 1〜2 営業日かかります。
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 | 支払い金額が原因でアカウントの週次支払い金額の上限を超えるため、支払いが失敗します。 |
000 | 11000 | 000888888881 | 支払い金額がアカウントの取引限度額を超えているため、支払いが失敗します。 |
サンドボックスで銀行口座確認の成功または失敗を再現するには、少額入金に以下の特定の金額を使用してください。
| 少額入金の金額 | シナリオ |
|---|---|
32 および 45 | 口座が無事に確認されます。 |
10 および 11 | 許容された確認回数の超過をシミュレーションします。 |
| その他の任意の数字の組み合わせ | 口座の確認が失敗します。 |
オプション将来の決済を受け付けるサーバ側
SetupIntent が完了すると、新しい PaymentMethod オブジェクトと同意書オブジェクトができます。オブジェクトを使用して、顧客に銀行口座の再入力を求めることなく、将来の決済を開始できます。
警告
将来のプレオーソリデビット決済は、既存の同意書の規約に従って請求する必要があります。同意書の規約を満たさない随時の引き落としは、決済の不審請求の申し立てを引き起こす可能性があります。
オフセッションで顧客に決済する準備ができたら、Customer、PaymentMethod、同意書の各 ID を使用して、PaymentIntent を作成します。
SetupIntent ID を取得していない場合は、顧客に関連付けられた SetupIntents に対してリスト表示を実行することで、請求する PaymentMethod と同意書を調べることができます。以下が可能です。
既存の承認済み同意書を使用して決済手段を再利用する
適切な SetupIntent の PaymentMethod ID と同意書 ID が存在する場合は、決済の金額と通貨を指定して PaymentIntent を作成します。その他のいくつかのパラメーターを設定して、オフセッションの決済を作成します。
- PaymentIntent の confirm プロパティの値を
trueに設定します。これにより、PaymentIntent が作成されると直ちに確定されます。 - payment_method を PaymentMethod の ID に、mandate を Mandate の ID に、customer を Customer の ID にそれぞれ設定します。
既存の同意書を新しい PaymentIntent で再利用する際には、その時点で引き落とし通知メールを送信する必要があります。カスタム通知の送信を選択しない限り、Stripe がデフォルトでこの処理を行います。
新しい同意書で決済手段を再利用する
異なる条件で顧客から引き落としを行う必要があるが、銀行口座情報の再入力を要求したくない場合も、既存の PaymentMethod を再利用して、新しい同意書に対して顧客の承認を得ることができます。これを行うには、新しい PaymentIntent を作成するまたは新しい SetupIntent を作成するの説明に従って、以下の変更を行います。
- 新しい PaymentIntent または SetupIntent の作成時に、既存の PaymentMethod の ID を値として指定し、
payment_パラメータを追加します。method stripe.またはconfirmAcssDebitPayment stripe.を呼び出す際に、支払い方法の詳細を送信するステップでconfirmAcssDebitSetup payment_とmethod acss_の各データを省略します。debit
注意
再利用された PaymentMethod と新しい Mandate で作成された PaymentIntents および SetupIntents に対する確認は必要ありませんが、新しい同意書の確認電子メールを送信する必要があり、決済に 3 日間の遅延が発生します。
オプション即時の確認のみサーバ側
デフォルトでは、カナダのプレオーソリデビットの支払いで、顧客は銀行口座の即時確認、または少額入金を使用できます。オプションで、PaymentIntent の作成時に verification_method パラメーターを使用して、銀行口座の即時確認のみを要求することもできます。
オプション少額入金による確認のみサーバ側
デフォルトでは、カナダのプレオーソリデビットの支払いで、顧客は銀行口座の即時確認、または少額入金を使用できます。オプションで、PaymentIntent の作成時に verification_method パラメーターを使用して、少額入金による確認のみを要求することもできます。