# カナダのプレオーソリデビットの支払いを受け付ける カスタムの支払いフォームを構築するか、Stripe Checkout を使用してカナダのプレオーソリデビットの支払いを受け付けます。 # Checkout > This is a Checkout for when payment-ui is checkout. View the full page at https://docs.stripe.com/payments/acss-debit/accept-a-payment?payment-ui=checkout. Web サイトでのカナダのプレオーソリデビット (PAD) 決済の受け付けは、決済を追跡するオブジェクトの作成、決済手段に関する情報と同意書承認の収集、決済を処理するための Stripe への決済の送信、および顧客の銀行口座の確認で構成されます。 Checkout を使用すると、支払い方法タイプとして `acss_debit` を指定して Checkout セッションを作成し、支払いが完了するまで支払いのステータスを追跡し、処理できます。 > Pre-authorized debit in Canada は **通知遅延型の決済手段** であるため、決済後すぐには売上が利用可能になりません。通常、アカウントへの入金までに **5 business days** かかります。 ## 互換性を判断する **顧客の居住地**: Canada **対応可能な通貨**: `cad, usd` **取引通貨**: `cad, usd` **支払いモード**: Yes **セットアップモード**: Yes **サブスクリプションモード**: [Contact us](mailto:payment-methods-feedback@stripe.com?subject=PADs%20Subscription%20Mode%20User%20Interest) カナダのプレオーソリデビット支払いに対応するには、Checkout セッションが次の条件をすべて満たしている必要があります。 - 使用できるのは 1 回限りの項目だけです (決済ではまだ *subscriptions* (A Subscription represents the product details associated with the plan that your customer subscribes to. Allows you to charge the customer on a recurring basis) には対応していません)。 - ラインアイテムの*価格* (Prices define how much and how often to charge for products. This includes how much the product costs, what currency to use, and the interval if the price is for subscriptions)はすべて、カナダドルまたはアメリカドル (通貨コード `cad` または `usd`) で示す必要があります。 - すべてのラインアイテムの価格が、同じ通貨である必要があります。異なる通貨のラインアイテムが存在する場合は、通貨ごとに別の Checkout セッションを作成します。 ### 取引通貨 カナダのほとんどの銀行口座で保有されているのはカナダドル (CAD) ですが、少数ながらアメリカドル (USD) などの他の通貨を保有する口座もあります。PAD では CAD と USD のどちらでの決済も可能ですが、決済の失敗を避けるため、顧客に適切な通貨を選択することが重要です。 多くのカードベースの支払い方法とは異なり、CAD の口座からの USD での引き落としや、USD の口座からの CAD での引き落としは成功しない可能性があります。多くの場合、このような引き落としを試行すると、遅延して支払い失敗が発生します。この遅延は最大 5 営業日です。 このような決済エラーを避けるには、顧客のアカウントが USD での引き落としに対応していることが確認できている場合を除き、PAD 決済は CAD で受け付けるのが最も安全です。 ## 支払いを受け付ける > このガイドを使用する前に、まず Checkout で[決済を受け付ける](https://docs.stripe.com/payments/accept-a-payment.md?integration=checkout)実装を構築します。 このガイドでは、カナダの事前承認デビットを有効化する手順をご案内します。動的な決済方法を使用して支払いを受け付ける方法と、決済方法を手動で設定する方法との違いを明らかにしています。 ### 支払い方法としてカナダのプレオーソリデビットを有効にする 新しい [Checkout Session (セッション)](https://docs.stripe.com/api/checkout/sessions.md) を作成する際は、以下を行う必要があります。 1. `acss_debit` を `payment_method_types` のリストに追加します。 - ダッシュボードで決済手段を管理する場合は、[動的な決済手段](https://docs.stripe.com/payments/payment-methods/dynamic-payment-methods.md) がデフォルトで有効になっているため、決済セッションに `payment_method_types` を含める必要はありません。ただし、`payment_method_options` を含める必要があります。 1. すべての `line_items` が `cad` 通貨を使用していることを確認します。 1. 追加の [payment_method_options](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-acss_debit) パラメーターを指定して、取引を説明します。詳細は以下をご覧ください。 Payments では、顧客が決済時に承認する [Payment Schedule (支払いスケジュール)](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_method_options-acss_debit-mandate_options-payment_schedule) を指定する必要があります。ビジネスに適した同意書オプションの選択方法については、[PAD 同意書](https://docs.stripe.com/payments/acss-debit.md#mandates)を参照してください。 | パラメータ | 値 | 必須 | | --------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- | | `payment_method_options[acss_debit][mandate_options][payment_schedule]` | 同意書の支払いスケジュール。使用可能な値は `interval`、`sporadic`、`combined` です。ビジネスに適したスケジュールを選択するには、[PAD 同意書](https://docs.stripe.com/payments/acss-debit.md#mandates)の概要を参照してください。 | はい | | `payment_method_options[acss_debit][mandate_options][interval_description]` | 支払いスケジュールについて説明するテキスト。ビジネスに適した間隔の説明を作成するには、[PAD 同意書](https://docs.stripe.com/payments/acss-debit.md#mandates)の概要を参照してください。 | `payment_schedule` の値が `interval` または `combined` の場合は必須 | | `payment_method_options[acss_debit][mandate_options][transaction_type]` | 同意書を使用する取引のタイプ。`personal` 的な理由による取引の場合と `business` 的な理由による取引の場合があります。 | はい | ### Checkout セッションを作成する #### Stripe がオンラインで提供するページ ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "line_items[0][price_data][currency]=cad" \ -d "line_items[0][price_data][product_data][name]=T-shirt" \ -d "line_items[0][price_data][unit_amount]=2000" \ -d "line_items[0][quantity]=1" \ -d mode=payment \ -d "payment_method_options[acss_debit][mandate_options][payment_schedule]=interval" \ -d "payment_method_options[acss_debit][mandate_options][interval_description]=First day of every month" \ -d "payment_method_options[acss_debit][mandate_options][transaction_type]=personal" \ -d "payment_method_types[0]=acss_debit" \ --data-urlencode "success_url=https://example.com/success" ``` #### 組み込みフォーム ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "line_items[0][price_data][currency]=cad" \ -d "line_items[0][price_data][product_data][name]=T-shirt" \ -d "line_items[0][price_data][unit_amount]=2000" \ -d "line_items[0][quantity]=1" \ -d mode=payment \ -d "payment_method_options[acss_debit][mandate_options][payment_schedule]=interval" \ -d "payment_method_options[acss_debit][mandate_options][interval_description]=First day of every month" \ -d "payment_method_options[acss_debit][mandate_options][transaction_type]=personal" \ -d "payment_method_types[0]=acss_debit" \ --data-urlencode "return_url=https://example.com/return" \ -d ui_mode=embedded_page ``` Checkout セッション中、顧客には銀行口座情報の収集と即時確認を処理する UI モーダルが表示され、オプションとして少額入金を使用した確認も選択できます。まれなケースですが、顧客が少額入金による確認を選択した場合、Stripe は指定された銀行口座に 2 件の少額入金を送金します。この入金が顧客のオンライン銀行明細書に表示されるまでには 1 ~ 2 営業日かかります。入金の予想到着日に、入金額の確認と Stripe での銀行口座確認を行うためのリンクが記載されたメールが顧客に届きます。確認が完了すると、支払いの処理が開始されます。 ### 注文のフルフィルメント 決済受け付け後に、[注文のフルフィルメントを実行](https://docs.stripe.com/checkout/fulfillment.md)する方法を説明します。 ## 組み込みをテストする ### 少額入金の確認メールを受信する *サンドボックス*で少額入金確認メールを受け取るには: 1. Checkout で、`{any_prefix}+test_email@{any_domain}` の形式でメールアドレスを入力します。 1. **支払う** をクリックします。 1. \**銀行口座をリンクして支払う**モーダルで**同意する**をクリックします。 1. **Use micro-deposit verification** を選択します。 1. 次のいずれかのテスト用アカウント番号を使用します。 1. **Confirm** をクリックします。 1. **同意する**をクリックして、**事前承認デビット契約**に同意します。 ### テスト用の決済手段トークン テスト用の決済手段トークンを使用すると、銀行口座の詳細を手動で入力することなく、連携をテストできます。これらのトークンを使用すると、銀行口座情報の収集と確認のステップが省略できます。 | トークン | シナリオ | | --------------------------------- | ----------------------------- | | `pm_acssDebit_success` | 同意書が承認されると、直ちに決済できます。 | | `pm_acssDebit_noAccount` | 口座が見つからないため、支払いは失敗します。 | | `pm_acssDebit_accountClosed` | 口座が解約済みであるため、支払いは失敗します。 | | `pm_acssDebit_insufficientFunds` | 残高不足のため、支払いは失敗します。 | | `pm_acssDebit_debitNotAuthorized` | 引き落としがオーソリされていないため、支払いは失敗します。 | | `pm_acssDebit_dispute` | 決済は成功しますが、不審請求の申し立てが発生します。 | ### テスト用の口座番号 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` | 許容された確認回数の超過をシミュレーションします。 | | その他の任意の数字の組み合わせ | 口座の確認が失敗します。 | ## 返金および不審請求の申請を処理する カナダのプレオーソリデビットの返金期間は、元の支払い日から最大 180 日間です。 顧客は、元の支払いから最大 90 日間、銀行を通じて支払いに対して不審請求を申請でき、異議申し立てのプロセスはありません。 [カナダのプリオーソリデビットに対する不審請求の申請](https://docs.stripe.com/payments/acss-debit.md#disputed-payments)についてご紹介します。 ## その他の考慮事項 ### 少額入金確認の失敗 銀行口座が少額入金の確認を保留している場合、顧客が確認に失敗する可能性がある理由は以下の 2 つです。 - 少額入金が顧客の銀行口座に送信できませんでした (これは通常、銀行口座が解約済みまたは使用不可であるか、銀行口座番号が不正確である場合に発生します)。 - 顧客が口座の確認に 3 回失敗しました。この上限を超えると、その銀行口座は確認することも、再利用することもできなくなります。 - 顧客は要求された 10 日以内に銀行口座を確認しませんでした。 これらのいずれかの理由で銀行口座の確認に失敗した場合、[`checkout.session.async_payment_failed` イベントを処理](https://docs.stripe.com/api/events/types.md?event_types-invoice.payment_succeeded=#event_types-checkout.session.async_payment_failed)して、新たに注文を行うよう顧客に連絡できます。 ## Optional: 即時の確認のみ [サーバ側] デフォルトでは、カナダのプレオーソリデビットの決済で、顧客は銀行口座の即時確認、または少額入金を使用できます。オプションで、Checkout セッションの作成時に `payment_method_options[acss_debit][verification_method]`パラメーターを使用するだけで、銀行口座の即時確認のみを要求することもできます。 ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d mode=payment \ -d customer={{CUSTOMER_ID}} \ -d "payment_method_types[0]=acss_debit" \ -d "line_items[0][price_data][currency]=cad" \ -d "line_items[0][price_data][product_data][name]=T-shirt" \ -d "line_items[0][price_data][unit_amount]=2000" \ -d "line_items[0][quantity]=1" \ -d "payment_method_options[acss_debit][mandate_options][payment_schedule]=interval" \ --data-urlencode "payment_method_options[acss_debit][mandate_options][interval_description]=On November 25, 2021" \ -d "payment_method_options[acss_debit][mandate_options][transaction_type]=personal" \ -d "payment_method_options[acss_debit][verification_method]=instant" \ --data-urlencode "success_url=https://example.com/success" ``` ## Optional: 少額入金による確認のみ [サーバ側] デフォルトでは、カナダのプレオーソリデビット決済では、顧客は銀行口座の即時確認、または少額入金を使用できます。オプションで、Checkout セッションの作成時に `payment_method_options[acss_debit][verification_method]` パラメーターを使用するだけで、銀行口座の即時確認のみを要求することもできます。 ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d mode=payment \ -d customer={{CUSTOMER_ID}} \ -d "payment_method_types[0]=acss_debit" \ -d "line_items[0][price_data][currency]=cad" \ -d "line_items[0][price_data][product_data][name]=T-shirt" \ -d "line_items[0][price_data][unit_amount]=2000" \ -d "line_items[0][quantity]=1" \ -d "payment_method_options[acss_debit][mandate_options][payment_schedule]=interval" \ --data-urlencode "payment_method_options[acss_debit][mandate_options][interval_description]=On November 25, 2021" \ -d "payment_method_options[acss_debit][mandate_options][transaction_type]=personal" \ -d "payment_method_options[acss_debit][verification_method]=microdeposits" \ --data-urlencode "success_url=https://example.com/success" ``` ## Optional: 顧客の振替日を設定する [サーバ側] Stripe が顧客の銀行口座から引き落としを行う日付は、[ターゲット日](https://docs.stripe.com/API/Checkout/Sessions/object.md#Checkout_session_object-%E6%94%AF%E6%89%95%E3%81%84_method_options-acss_debit-target_date) を使用して制御できます。ターゲット日は、現在の日付から 3 日以上、15 日以内である必要があります。 目標日は、顧客のアカウントから離脱するための資金をスケジュールします。 次のいずれかの基準を満たす目標日は、引き落としを翌営業日まで延期します。 - 週末、祝日、またはその他の非営業日に当たる予定期日。 - 3 営業日以内に到来する予定期日。 このパラメーターは、ベストエフォート方式で機能します。顧客の銀行は、祝日の関係やその他の理由により、異なる日付に引き落としを処理する場合があります。 > [ 認証方法 ](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-payment_method_options-acss_debit-verification_method)として `マイクロデポジット` を使用している場合、[ ターゲット日 ](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-payment_method_options-acss_debit-target_date) を設定することはできません。これは、認証プロセスにターゲット日より長い時間がかかる可能性があり、その結果、支払いが予定より遅れて到着する恐れがあるためです。 ## See also - [カナダのプリオーソリデビットの詳細](https://docs.stripe.com/payments/acss-debit.md) - [同意書を管理する](https://docs.stripe.com/payments/acss-debit.md#mandates) - [Checkout のフルフィルメント](https://docs.stripe.com/checkout/fulfillment.md) - [Checkout のカスタマイズ](https://docs.stripe.com/payments/checkout/customization.md) # ダイレクト API > This is a ダイレクト API for when payment-ui is direct-api. View the full page at https://docs.stripe.com/payments/acss-debit/accept-a-payment?payment-ui=direct-api. Web サイトでのカナダのプレオーソリデビット (PAD) 決済の受け付けは、決済を追跡するオブジェクトの作成、決済手段に関する情報と同意書承認の収集、決済を処理するための Stripe への決済の送信、および顧客の銀行口座の確認で構成されます。 Stripe では、[Payment Intent (支払いインテント)](https://docs.stripe.com/payments/payment-intents.md) と呼ばれる決済オブジェクトを使用して、決済が完了するまでの状態のすべてを追跡および処理します。 ## Stripe を設定する [サーバ側] まず、Stripe アカウントが必要です。[今すぐ登録](https://dashboard.stripe.com/register)してください。 アプリケーションから Stripe API にアクセスするには、Stripe の公式ライブラリを使用します。 #### Ruby ```bash # Available as a gem sudo gem install stripe ``` ```ruby # If you use bundler, you can add this line to your Gemfile gem 'stripe' ``` ## Customer を作成または取得する [サーバ側] 以降の支払いに銀行口座を再利用するには、その口座を *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) に関連付ける必要があります。 顧客がお客様のビジネスでアカウントを作成する際、Customer オブジェクトを作成します。この Customer オブジェクトの ID を、顧客を表す独自の内部表記と関連付けることで、保存した支払い方法の詳細を後で取得して使用することができます。 新しい Customer を作成するか、または既存の Customer を取得して、この支払いに関連付けます。サーバに以下のコードを含め、新しい Customer を作成します。 ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ## PaymentIntent を作成する [サーバ側] [PaymentIntent (支払いインテント)](https://docs.stripe.com/api/payment_intents.md) は、顧客から支払いを回収する意図を表すオブジェクトで、支払いプロセスのライフサイクルの[各段階](https://docs.stripe.com/payments/paymentintents/lifecycle.md)を追跡します。 カナダのプリオーソリデビットを利用するには、プレオーソリデビット利用規約を通じて、1 回限りの引き落としと継続的な引き落としについて顧客から承認を得る必要があります ([PAD 同意書](https://docs.stripe.com/payments/acss-debit.md#mandates)を参照)。[Mandate (同意書)](https://docs.stripe.com/api/mandates.md) オブジェクトは、この利用契約と承認を記録します。 まず、サーバーで PaymentIntent を作成し、回収する金額と通貨 ([通常は `cad`](https://docs.stripe.com/payments/acss-debit.md#presentment-currency)) を指定します。[Payment Intents API](https://docs.stripe.com/payments/payment-intents.md) を使用した実装がすでにある場合は、PaymentIntent の[支払い方法タイプ](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_types)の一覧に `acss_debit` を追加します。Customer の [ID](https://docs.stripe.com/api/customers/object.md#customer_object-id) を指定します。 将来その支払い方法を再利用する場合には、値を `off_session` に設定して [setup_future_usage](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-setup_future_usage) パラメーターを指定します。 この PaymentIntent の [Mandate (同意書)](https://docs.stripe.com/api/mandates.md) で支払いスケジュールと確認方法を定義するには、以下のパラメーターも含めてください。 | パラメータ | 値 | 必須 | | --------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | | `payment_method_options[acss_debit][mandate_options][payment_schedule]` | 同意書の支払いスケジュール。使用可能な値は `interval`、`sporadic`、`combined` です。ビジネスに適したスケジュールを選択するには、[PAD 同意書](https://docs.stripe.com/payments/acss-debit.md#mandates)の概要を参照してください。 | はい | | `payment_method_options[acss_debit][mandate_options][interval_description]` | 支払いスケジュールの間隔について説明するテキスト。ビジネスに適した間隔の説明を作成するには、[PAD 同意書](https://docs.stripe.com/payments/acss-debit.md#mandates)の概要を参照してください。 | `payment_schedule` の値が `interval` または `combined` の場合 | | `payment_method_options[acss_debit][mandate_options][transaction_type]` | 同意書を使用する取引のタイプ。`personal` 的な理由による取引の場合と `business` 的な理由による取引の場合があります。 | はい | ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=cad \ -d setup_future_usage=off_session \ -d customer={{CUSTOMER_ID}} \ -d "payment_method_types[]=acss_debit" \ -d "payment_method_options[acss_debit][mandate_options][payment_schedule]=interval" \ -d "payment_method_options[acss_debit][mandate_options][interval_description]=First day of every month" \ -d "payment_method_options[acss_debit][mandate_options][transaction_type]=personal" ``` ### client secret を取得する PaymentIntent には、*client secret* (The client secret is a unique key returned from Stripe as part of a PaymentIntent. This key lets the client access important fields from the PaymentIntent (status, amount, currency) while hiding sensitive ones (metadata, customer)) が含まれています。これは、支払いプロセスを安全に完了するためにクライアント側で使用されます。client secret をクライアント側に渡す際は、いくつかの方法を使用できます。 #### 1 ページのアプリケーション ブラウザーの `fetch` 関数を使用して、サーバーのエンドポイントから client secret を取得します。この方法は、クライアント側が 1 ページのアプリケーションで、特に React などの最新のフロントエンドフレームワークで構築されている場合に最適です。client secret を処理するサーバーのエンドポイントを作成します。 #### Ruby ```ruby get '/secret' do intent = # ... Create or retrieve the PaymentIntent {client_secret: intent.client_secret}.to_json end ``` その後、クライアント側で JavaScript を使用して client secret を取得します。 ```javascript (async () => { const response = await fetch('/secret'); const {client_secret: clientSecret} = await response.json(); // Render the form using the clientSecret })(); ``` #### サーバ側のレンダリング サーバーからクライアントに client secret を渡します。この方法は、アプリケーションがブラウザーへの送信前に静的なコンテンツをサーバーで生成する場合に最適です。 決済フォームに [client_secret](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret) を追加します。サーバー側のコードで、PaymentIntent から client secret を取得します。 #### Ruby ```erb
``` ```ruby get '/checkout' do @intent = # ... Fetch or create the PaymentIntent erb :checkout end ``` ## 支払い方法の詳細を収集して送信する [クライアント側] 顧客が Canadian pre-authorized debitでの支払いをクリックしたときに、Stripe.js を使用してその支払いを Stripe に送信することをお勧めします。[Stripe.js](https://docs.stripe.com/payments/elements.md) は、決済フローを構築するための Stripe の基本的な JavaScript ライブラリです。これにより、実装に関する複雑な処理が自動的に行われ、将来、他の決済手段にも対応できるように実装を簡単に拡張できます。 Stripe.js スクリプトを決済ページに含めるには、このスクリプトを HTML ファイルの `head` に追加します。 ```html Checkout ``` 決済ページで以下の JavaScript を使用して、Stripe.js のインスタンスを作成します。 ```javascript // 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('<>'); ``` PaymentIntent オブジェクト全体をクライアントに送信する代わりに、前のステップからの *client secret* (The client secret is a unique key returned from Stripe as part of a PaymentIntent. This key lets the client access important fields from the PaymentIntent (status, amount, currency) while hiding sensitive ones (metadata, customer)) を使用します。これは、Stripe API リクエストを認証する API キーとは異なります。 それでも、client secret は支払いを完了できるため、慎重に扱う必要があります。記録したり、URL に埋め込んだり、その顧客以外に公開されることがないようにしてください。 ユーザーがフォームを送信したら、[stripe.confirmAcssDebitPayment](https://docs.stripe.com/js/payment_intents/confirm_acss_debit_payment) を使用して、銀行口座の詳細と銀行口座の確認を収集し、同意書を確認し、支払いを完了します。PAD の決済手段を作成するには、`payment_method` パラメーターの `billing_details` プロパティに顧客のメールアドレスと口座名義人を含める必要があります。 ```javascript 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 {paymentIntent, error} = await stripe.confirmAcssDebitPayment( 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 PaymentIntent's status. console.log("PaymentIntent ID: " + paymentIntent.id); console.log("PaymentIntent status: " + paymentIntent.status); } }); ``` Stripe.js は、ページ上のモーダル UI をロードして、銀行口座の詳細の収集と銀行口座の確認を処理し、オンライン同意書を提示して承認を収集します。 > `stripe.confirmAcssDebitPayment` の完了には数秒かかる場合があります。この間、フォームが再送信されないように無効化し、スピナーのような待機中のインジケーターを表示します。エラーが発生した場合は、それを顧客に表示し、フォームを再度有効化し、待機中のインジケーターを非表示にします。 成功した場合、Stripe は [PaymentIntent (支払いインテント)](https://docs.stripe.com/api/payment_intents/object.md) オブジェクトを、以下のステータスのいずれかで返します。 | ステータス | 説明 | 次のステップ | | ----------------- | ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | | `processing` | 銀行口座が即座に確認されたか、確認が必要ありませんでした。 | ステップ 6: [PaymentIntent が成功したことを確認する](https://docs.stripe.com/payments/acss-debit/accept-a-payment.md#web-confirm-paymentintent-succeeded) | | `requires_action` | 銀行口座の確認を完了するには、追加のアクションが必要です。 | ステップ 5: [少額入金で銀行口座を確認する](https://docs.stripe.com/payments/acss-debit/accept-a-payment.md#web-verify-with-microdeposits) | PaymentIntent の確認に成功した後、同意書の確認メールと収集した銀行口座の詳細を顧客に送信する必要があります。Stripe はデフォルトでこれらの処理を行いますが、ご希望に応じて[カスタム通知の送信](https://docs.stripe.com/payments/acss-debit.md#mandate-and-debit-notification-emails)を選択することもできます。 > 組み込みをテストする際、同意書の確認メールは顧客のメールアドレスに送信されません。 顧客が確認フローを完了せずにモーダルを閉じることを選択した場合、Stripe.js は次のようなエラーを返します。 ```json { "error": { "type": "validation_error", "code": "incomplete_payment_details", "message": "Please provide complete payment details." } } ``` ## 少額入金で銀行口座を確認する [クライアント側] すべての顧客が銀行口座を即座に確認できるとは限りません。このステップは、顧客が前のステップで即時確認フローからオプトアウトした場合にのみ適用されます。 この場合、Stripe は顧客の銀行口座に 2 回に分けて少額入金を自動的に行います。これらの入金が顧客のオンライン明細書に表示され、`ACCTVERIFY` 明細書表記が付けられるまでに 1〜2 営業日かかります。 前のステップで行った `stripe.confirmAcssDebitPayment` メソッドの呼び出しの結果として、`requires_action` 状態の PaymentIntent が返されます。この PaymentIntent には、確認を完了するための有益な情報を含む `next_action` フィールドが含まれています。 Stripe は[請求書メール](https://docs.stripe.com/api/payment_methods/object.md#payment_method_object-billing_details-email)で入金の到着予定日を顧客に通知します。このメールには、Stripe がオンラインで提供する確認ページへのリンクが含まれ、顧客はそのページで入金額を確認して銀行口座の確認を完了することができます。 確認の失敗は 3 回までです。この上限を超えると、銀行口座の確認ができなくなります。また、少額入金の確認は 10 日経過するとタイムアウトになります。少額入金がこの期間内に確認されない場合、PaymentIntent は新しい決済手段の詳細を要求する状態に戻ります。少額入金とは何か、どのように使用するのかを顧客に明確に伝えることで、顧客は確認に関連する問題を回避できます。 ### オプション: カスタムのメールと確認ページ [カスタムのメール通知](https://docs.stripe.com/payments/acss-debit.md#mandate-and-debit-notification-emails)の送信を選択した場合は、顧客にメールを送信する必要があります。このためには、`next_action` オブジェクトの `verify_with_microdeposits[hosted_verification_url]` の URL を使用して、顧客に確認プロセスを完了するよう指示します。 カスタムメールを送信していて、Stripe がオンラインで提供する確認ページを使用しない場合、[Stripe.js](https://docs.stripe.com/js/payment_intents/verify_microdeposits_for_payment) を使用して、顧客がこれらの金額をお客様に伝えて銀行口座を確認するためのフォームを自社サイトに作成できます。 ```javascript stripe.verifyMicrodepositsForPayment(clientSecret, { amounts: [32, 45], }); ``` 銀行口座の確認に成功すると、Stripe は [PaymentIntent (支払いインテント) オブジェクト](https://docs.stripe.com/api/payment_intents/object.md)を `processing` の `status` で返し、`payment_intent.processing` *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) イベントを送信します。 確認が失敗する原因はいくつか存在します。失敗は直接的なエラー応答で同期的に発生することも、`payment_intent.payment_failed` Webhook イベントを通じて非同期で発生することもあります (以下の例を参照してください)。 #### 同期エラー ```json { "error": { "code": "payment_method_microdeposit_verification_amounts_mismatch", "message": "The amounts provided do not match the amounts that were sent to the bank account. You have {attempts_remaining} verification attempts remaining.", "type": "invalid_request_error" } } ``` #### Webhook イベント ```javascript { "object": { "id": "pi_1234", "object": "payment_intent", "customer": "cus_0246", ... "last_payment_error": { "code": "payment_method_microdeposit_verification_attempts_exceeded", "message": "You have exceeded the number of allowed verification attempts." }, ... "status": "requires_payment_method" } } ``` | エラーコード | 同期または非同期 | メッセージ | ステータスの変更 | | ------------------------------------------------------------ | ----------------------------- | ------------------------------------------------------------------ | -------------------------------------------------------------------- | | `payment_method_microdeposit_failed` | 同期、または Webhook イベントを通じて非同期で発生 | 少額入金に失敗しました。指定した銀行口座、金融機関、支店の番号を確認してください | `status` は `requires_payment_method` で、`last_payment_error` が設定されます。 | | `payment_method_microdeposit_verification_amounts_mismatch` | 同期 | 指定された金額が銀行口座に送金された金額と一致しません。確認試行の残り回数はあと {attempts_remaining} 回です。 | 変化なし | | `payment_method_microdeposit_verification_attempts_exceeded` | 同期、および Webhook イベントを通じて非同期で発生 | 許容された確認の試行回数を超えました | `status` は `requires_payment_method` で、`last_payment_error` が設定されます。 | | `payment_method_microdeposit_verification_timeout` | Webhook イベントを通じて非同期で発生 | 少額入金がタイムアウトになりました。顧客は要求された 10 日の期間内に銀行口座を確認しませんでした。 | `status` は `requires_payment_method` で、`last_payment_error` が設定されます。 | ## PaymentIntent の成功を確認する [サーバ側] カナダのプリオーソリデビットは、[遅延通知型](https://docs.stripe.com/payments/payment-methods.md#payment-notification)の支払い方法です。このため、顧客の口座から引き落としを開始してから、決済の成功または失敗の通知を受けるまでに最大で 5 営業日かかります。 最初に作成する PaymentIntent のステータスは `processing` となります。決済が成功すると、PaymentIntent のステータスは `processing` から `succeeded` に変わります。 PaymentIntent のステータスが更新されると、以下のイベントが送信されます。 | イベント | 説明 | 次のステップ | | ------------------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------------------------------- | | `payment_intent.processing` | 顧客の支払いは、Stripe に正常に送信されました。 | 開始された支払いの成功、または失敗の結果を待ちます。 | | `payment_intent.succeeded` | 顧客の決済が成功しました。 | 顧客が購入した商品またはサービスのフルフィルメントを行います。 | | `payment_intent.payment_failed` | 顧客の支払いは拒否されました。これは、少額入金確認の失敗に適用されることもあります。 | 顧客にメールまたはプッシュ通知で連絡し、別の決済手段をリクエストします。少額入金の確認に失敗して Webhook が送信された場合、ユーザーは銀行口座情報の再入力を求められ、その後、新しい少額入金が口座に入金されます。 | [Webhook](https://docs.stripe.com/payments/payment-intents/verifying-status.md#webhooks) を使用して決済が成功したことを*確認* (Confirming an intent indicates that the customer intends to use the current or provided payment method. Upon confirmation, the intent attempts to initiate the portions of the flow that have real-world side effects)し、顧客に決済完了を通知することをお勧めします。[Stripe ダッシュボード](https://dashboard.stripe.com/test/events)でイベントを表示することもできます。 ## 組み込みをテストする ### 少額入金の確認メールを受信する 銀行口座の詳細を収集し、マンデートを承認した後、*サンドボックス* (A sandbox is an isolated test environment that allows you to test Stripe functionality in your account without affecting your live integration. Use sandboxes to safely experiment with new features and changes)で少額入金確認メールを受け取るには、支払い方法の詳細を確認する際に、``payment_method[billing_details][email]`フィールドに`{any_prefix}+test_email@{any_domain}` の形式でメールアドレスを指定します。 ### テスト用の決済手段トークン テスト用の決済手段トークンを使用すると、銀行口座の詳細を手動で入力することなく、連携をテストできます。これらのトークンを使用すると、銀行口座情報の収集と確認のステップが省略できます。 | トークン | シナリオ | | --------------------------------- | ----------------------------- | | `pm_acssDebit_success` | 同意書が承認されると、直ちに決済できます。 | | `pm_acssDebit_noAccount` | 口座が見つからないため、支払いは失敗します。 | | `pm_acssDebit_accountClosed` | 口座が解約済みであるため、支払いは失敗します。 | | `pm_acssDebit_insufficientFunds` | 残高不足のため、支払いは失敗します。 | | `pm_acssDebit_debitNotAuthorized` | 引き落としがオーソリされていないため、支払いは失敗します。 | | `pm_acssDebit_dispute` | 決済は成功しますが、不審請求の申し立てが発生します。 | ### テスト用の口座番号 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` | 許容された確認回数の超過をシミュレーションします。 | | その他の任意の数字の組み合わせ | 口座の確認が失敗します。 | ## Optional: 即時の確認のみ [サーバ側] デフォルトでは、カナダのプレオーソリデビットの決済で、顧客は銀行口座の即時確認、または少額入金を使用できます。オプションで、PaymentIntent の作成時に [verification_method](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-acss_debit-verification_method)パラメーターを使用するだけで、銀行口座の即時確認のみを要求することもできます。 ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=cad \ -d setup_future_usage=off_session \ -d customer={{CUSTOMER_ID}} \ -d "payment_method_types[]=acss_debit" \ -d "payment_method_options[acss_debit][mandate_options][payment_schedule]=interval" \ -d "payment_method_options[acss_debit][mandate_options][interval_description]=First day of every month" \ -d "payment_method_options[acss_debit][mandate_options][transaction_type]=personal" \ -d "payment_method_options[acss_debit][verification_method]=instant" ``` ## Optional: 少額入金による確認のみ [サーバ側] デフォルトでは、カナダのプレオーソリデビット決済では、顧客は銀行口座の即時確認、または少額入金を使用できます。オプションで、PaymentIntent の作成時に [verification_method](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-acss_debit-verification_method) パラメーターを使用するだけで、銀行口座の即時確認のみを要求することもできます。 ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=cad \ -d setup_future_usage=off_session \ -d customer={{CUSTOMER_ID}} \ -d "payment_method_types[]=acss_debit" \ -d "payment_method_options[acss_debit][mandate_options][payment_schedule]=interval" \ -d "payment_method_options[acss_debit][mandate_options][interval_description]=First day of every month" \ -d "payment_method_options[acss_debit][mandate_options][transaction_type]=personal" \ -d "payment_method_options[acss_debit][verification_method]=microdeposits" ``` ## Optional: 顧客の振替日を設定する [サーバ側] [予定期日](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-payment_method_options-acss_debit-target_date)を指定して、Stripe が顧客の銀行口座から引き落としを行う日付を制御できます。予定期日は、現在の日付から 3~15 日以内の日付に指定しなければなりません。 目標期日は、売上が顧客の口座を離れる日を期日指定します。設定日の 3 営業日前までの目標期日を設定された [PaymentIntent をキャンセル](https://docs.stripe.com/api/payment_intents/cancel.md)できます。 次のいずれかの条件を満たす予定期日は、翌営業日まで引き落としが延期されます。 - 週末、祝日、またはその他の非営業日に当たる予定期日。 - 3 営業日以内に到来する予定期日。 このパラメーターは、ベストエフォート方式で機能します。顧客の銀行は、祝日の関係やその他の理由により、異なる日付に引き落としを処理する場合があります。 > [target date (目標期日)](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-payment_method_options-acss_debit-target_date) を使用する場合は、[認証方法](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-payment_method_options-acss_debit-verification_method)を `microdeposits` に設定することはできません。これは、確認プロセスが目標期日よりも長くなり、支払いの到着が予定よりも遅れる可能性があるためです。 ## See also - [将来の決済に備えてカナダのプリオーソリデビットの詳細を保存する](https://docs.stripe.com/payments/acss-debit/set-up-payment.md)