カナダのプレオーソリデビットを使用したサブスクリプションを設定する
注
Checkout のサブスクリプションモードはまだサポートされていません。この機能が提供されたときに早期アクセスをご希望の場合は、Stripe までお問い合わせいただき、待機リストに登録してください。
商品と価格を作成するダッシュボード
Products (商品) は、販売しているアイテムまたはサービスを表します。Prices (価格) は、製品の価格と請求頻度を定義します。これには、商品の価格、受け付ける通貨、および 1 回限りの支払いか継続支払いかが含まれます。商品と価格が数個のみの場合は、ダッシュボードでそれらを作成および管理します。
このガイドでは、例としてストックフォトサービスを使用し、15 CAD の月次サブスクリプションを顧客に請求します。これをモデル化するには、次のようにします。
- 商品を追加ページに移動します。
- 商品の名前を入力します。
- 価格に 15 を入力します。
- 通貨として CAD を選択します。
- 商品を保存をクリックします。
商品と価格を作成したら、価格 ID を記録しておき、後続のステップで使用できるようにします。ID は料金体系ページで price_G0FvDp6vZvdwRZ
のように表示されます。
サブスクリプションを作成するサーバー側
注
無料のトライアル期間付きのサブスクリプションの作成については、サブスクリプションのトライアルをご覧ください。
payment_behavior パラメーターの値として default_incomplete
を指定して、ステータスが incomplete
の価格と顧客の Subscription (サブスクリプション) を作成します。
レスポンスにはサブスクリプションの最初の PaymentIntent が含まれ、これには client secret が格納されています。この client secret は、PaymentIntent オブジェクト全体を渡すことなく支払いプロセスを安全に完了するために、クライアント側で使用されます。この client_secret
をフロントエンドに返して、支払いを完了します。
支払い方法の詳細と同意書承認を収集するクライアント側
カナダのプレオーソリデビットを使用するには、プレオーソリデビット利用規約を使用して、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_method
パラメーターの billing_details
プロパティーに顧客のメールアドレスと口座名義人を含める必要があります。
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
の完了には数秒かかる場合があります。この間、フォームが再送信されないように無効化し、スピナーのような待機中のインジケーターを表示します。エラーが発生した場合は、それを顧客に表示し、フォームを再度有効化し、待機中のインジケーターを非表示にします。
顧客が即時確認を完了すると、サブスクリプションは自動的に active
になります。それ以外の場合は、サブスクリプションが incomplete
の状態のままである場合の少額入金による確認の取り扱いについて、以下のセクションをご確認ください。
少額入金で銀行口座を確認するクライアント側
注
顧客はサブスクリプションに対する少額入金を、 サブスクリプションのライフサイクルで通常指定されている 23 時間以内ではなく、10 日以内に確認する必要があります。ただし、この期限は請求サイクルの日付より前にする必要があります。
すべての顧客が銀行口座を即座に確認できるとは限りません。このステップは、顧客が前のステップで即時確認フローからオプトアウトした場合にのみ適用されます。
この場合、Stripe は自動的に 2 件の少額入金を顧客の銀行口座に送金します。この入金は、1 ~ 2 営業日後に顧客のオンライン明細書に表示され、その明細書表記には、ACCTVERIFY
の表記が含まれます。
前のステップで行った stripe.confirmAcssDebitPayment
メソッドの呼び出しの結果として、requires_action
状態の PaymentIntent が返されます。この PaymentIntent には、確認を完了するための有益な情報を含む next_action
フィールドが含まれています。
Stripe は請求書メールで入金の到着予定日を顧客に通知します。このメールには、Stripe がオンラインで提供する確認ページへのリンクが含まれ、顧客はそのページで入金額を確認して銀行口座の確認を完了することができます。
確認の失敗は 3 回までです。この上限を超えると、銀行口座の確認ができなくなります。また、少額入金の確認は 10 日経過するとタイムアウトになります。少額入金がこの期間内に確認されない場合、PaymentIntent は新しい支払い方法の詳細を要求する状態に戻ります。少額入金とは何か、どのように使用するのかを顧客に明確に伝えることで、顧客は確認に関連する問題を回避できます。
オプション: カスタムのメールと確認ページ
カスタムのメール通知の送信を選択した場合は、顧客にメールを送信する必要があります。このためには、next_action
オブジェクトの verify_with_microdeposits[hosted_verification_url]
の URL を使用して、顧客に確認プロセスを完了するよう指示します。
カスタムメールを送信していて、Stripe がオンラインで提供する確認ページを使用しない場合、Stripe.js を使用して、顧客がこれらの金額をお客様に伝えて銀行口座を確認するためのフォームを自社サイトに作成できます。
stripe.verifyMicrodepositsForPayment(clientSecret, { amounts: [32, 45], });
サブスクリプションのステータスを管理するクライアント側
初回の支払いが成功すると、サブスクリプションの状態は active
になり、それ以上のアクションは不要です。支払いが失敗した場合は、ステータスが自動請求設定で設定されたサブスクリプションステータスに変わります。支払いの失敗時には、顧客に通知して、別の支払い方法で請求する必要があります。
注
カナダのプレオーソリデビット支払いは、他の支払い方法にリトライスケジュールが設定されている場合でも、再試行が自動的に行われることはありません。
組み込みをテストする
少額入金の確認メールを受信する
銀行口座の詳細を収集し、同意書を承認した後に、テスト環境で少額入金の確認メールを受信するには、支払い方法の詳細を確認する際に、payment_method[billing_details][email]
フィールドに {any_prefix}+test_email@{any_domain}
の形式でメールアドレスを指定します。
テスト用の口座番号
Stripe では、手動入力の銀行口座の組み込みが本番環境に移行する準備が整ったかどうかを確認するため、テスト用の口座番号をいくつか用意しています。支払いが自動的に成功または失敗するすべてのテスト用の口座は、以下のテスト用の少額入金を使用して確認してから設定を完了する必要があります。
銀行番号 | 支店番号 | 口座番号 | シナリオ |
---|---|---|---|
000 | 11000 | 000123456789 | 少額入金が確認された後、支払いが直ちに成功します。 |
000 | 11000 | 900123456789 | 少額入金が確認された後、3 分遅延してから支払いが成功します。 |
000 | 11000 | 000222222227 | 少額入金が確認された後、支払いが直ちに失敗します。 |
000 | 11000 | 900222222227 | 少額入金が確認された後、3 分遅延してから支払いが失敗します。 |
000 | 11000 | 000666666661 | 確認用の少額入金の送金が失敗します。 |
テスト環境で銀行口座確認の成功または失敗をデモンストレーションするには、少額入金に以下の特定の金額を使用してください。
少額入金の金額 | シナリオ |
---|---|
32 および 45 | 口座が無事に確認されます。 |
その他の任意の数字の組み合わせ | 口座の確認が失敗します。 |