カナダのプレオーソリデビットを使用したサブスクリプションを設定する
カナダのプレオーソリデビットを使用したサブスクリプションの作成と請求の方法をご紹介します。
注
Checkout のサブスクリプションモードはまだサポートされていません。この機能が提供されたときに早期アクセスをご希望の場合は、Stripe までお問い合わせいただき、待機リストに登録してください。
商品と価格を作成するダッシュボード
Products (商品) は、販売しているアイテムまたはサービスを表します。Prices (価格) は、商品の価格と請求頻度を定義します。これには、商品の価格、受け付ける通貨、および 1 回限りの支払いか継続支払いかが含まれます。商品と価格が数個のみの場合は、ダッシュボードでそれらを作成および管理します。
このガイドでは、例としてストックフォトサービスを使用し、15 CAD の月次サブスクリプションを顧客に請求します。これをモデル化するには、次のようにします。
- 商品を追加ページに移動します。
- 商品の名前を入力します。
- 価格に 15 を入力します。
- 通貨として CAD を選択します。
- 商品を保存をクリックします。
商品と価格を作成したら、価格 ID を記録しておき、後続のステップで使用できるようにします。ID は料金体系ページで price_
のように表示されます。
サブスクリプションを作成するサーバー側
注
無料のトライアル期間付きのサブスクリプションの作成については、サブスクリプションのトライアルをご覧ください。
payment_behavior パラメーターの値として default_
を指定して、ステータスが incomplete
の価格と顧客の Subscription (サブスクリプション) を作成します。
The response includes the subscription’s first Invoice. This contains the invoice’s payments, which includes a default PaymentIntent that Stripe generated for this invoice and the confirmation secret which you can use on the client side to securely complete the payment process instead of passing the entire PaymentIntent object. Return the latest_
to the front end to complete payment.
支払い方法の詳細と同意書承認を収集するクライアント側
カナダのプレオーソリデビットを使用するには、プレオーソリデビット利用規約を使用して、1 回限りの引き落としと継続的な引き落としについて顧客から承認を得る必要があります (PAD 同意書 を参照)。Mandate (同意書) オブジェクトは、この利用契約と承認を記録します。
Stripe がお客様に代わってサブスクリプションと請求書の同意書を自動的に設定します。顧客が同意書の条件を一度承認するだけで、それ以上介入しなくても、後続のサブスクリプションの支払いは成功します。
顧客が 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.confirmAcssDebitPayment を使用して、銀行口座の詳細と銀行口座の確認を収集し、同意書を確認し、支払いを完了します。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 {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.
の完了には数秒かかる場合があります。この間、フォームが再送信されないように無効化し、スピナーのような待機中のインジケーターを表示します。エラーが発生した場合は、それを顧客に表示し、フォームを再度有効化し、待機中のインジケーターを非表示にします。
顧客が即時確認を完了すると、サブスクリプションは自動的に active
になります。それ以外の場合は、サブスクリプションが incomplete
の状態のままである場合の少額入金による確認の取り扱いについて、以下のセクションをご確認ください。
少額入金で銀行口座を確認するクライアント側
注
顧客はサブスクリプションに対する少額入金を、サブスクリプションのライフサイクルで通常指定されている 23 時間以内ではなく、10 日以内に確認する必要があります。ただし、この期限は請求サイクルの日付以前に設定する必要があります。
すべての顧客が銀行口座を即座に確認できるとは限りません。このステップは、顧客が前のステップで即時確認フローからオプトアウトした場合にのみ適用されます。
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_
状態の PaymentIntent が返されます。この PaymentIntent には、確認を完了するための有益な情報を含む next_
フィールドが含まれています。
Stripe は請求書メールで入金の到着予定日を顧客に通知します。このメールには、Stripe がオンラインで提供する確認ページへのリンクが含まれ、顧客はそのページで入金額を確認して銀行口座の確認を完了することができます。
確認の失敗は 3 回までです。この上限を超えると、銀行口座の確認ができなくなります。また、少額入金の確認は 10 日経過するとタイムアウトになります。少額入金がこの期間内に確認されない場合、PaymentIntent は新しい支払い方法の詳細を要求する状態に戻ります。少額入金とは何か、どのように使用するのかを顧客に明確に伝えることで、顧客は確認に関連する問題を回避できます。
オプション: カスタムのメールと確認ページ
カスタムのメール通知の送信を選択した場合は、顧客にメールを送信する必要があります。このためには、next_
オブジェクトの verify_
の URL を使用して、顧客に確認プロセスを完了するよう指示します。
カスタムメールを送信していて、Stripe がオンラインで提供する確認ページを使用しない場合、Stripe.js を使用して、顧客がこれらの金額をお客様に伝えて銀行口座を確認するためのフォームを自社サイトに作成できます。
stripe.verifyMicrodepositsForPayment(clientSecret, { amounts: [32, 45], });
サブスクリプションのステータスを管理するクライアント側
初回の支払いが完了すると、サブスクリプションの状態は active
になり、それ以上のアクションは不要です。支払いが失敗した場合は、ステータスが自動請求設定で設定されたサブスクリプションステータスに変わります。支払いの失敗時には、顧客に通知して、別の支払い方法で請求する必要があります。
注
カナダのプレオーソリデビット支払いは、他の支払い方法に再試行スケジュールが設定されている場合でも、自動的に再試行することはありません。
組み込みをテストする
少額入金の確認メールを受信する
To receive the micro-deposit verification email in a sandbox after collecting the bank account details and accepting a mandate, provide an email in the payment_
field in the form of {any_
when confirming the payment method details.
テスト用の口座番号
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. |
To mimic successful or failed bank account verifications in a sandbox, use these meaningful amounts for micro-deposits:
少額入金の金額 | シナリオ |
---|---|
32 および 45 | 口座が無事に確認されます。 |
10 および 11 | 許容された確認回数の超過をシミュレーションします。 |
その他の任意の数字の組み合わせ | 口座の確認が失敗します。 |