将来のニュージーランドの BECS ダイレクトデビットによる決済に備えて詳細を保存する
将来のニュージーランドの銀行口座引き落としによる支払いに備えて支払い方法の詳細を保存する方法をご紹介します。
Setup Intents API を使用して、事前に支払い方法の詳細を収集し、後から最終的な金額や支払い日を確定できます。この機能が役立つ用途を紹介します。
- 支払い方法をウォレットに保存して、以降の購入を効率化する
- サービスの提供後に追加料金を回収する
- サブスクリプションの無料トライアルを開始する
Customer を作成または取得するサーバー側
以降の支払いに銀行口座を再利用するには、その口座を Customer に関連付けます。
お客様のビジネスで顧客がアカウントを作成するときに、Customer オブジェクトを作成します。Customer オブジェクトの ID を、独自の内部的な顧客の表記に関連付けることにより、保存された支払い方法の詳細を後で取得して使用できます。顧客がアカウントを作成していない場合でも、すぐに Customer オブジェクトを作成し、後でこのオブジェクトを顧客のアカウントの内部表記に関連付けることができます。
新しい Customer を作成するか、または既存の Customer を取得して、この支払い詳細に関連付けます。サーバーに以下のコードを含め、新しい Customer を作成します。
SetupIntent を作成するサーバー側
SetupIntent (支払い方法設定インテント) は、今後の決済に備えて顧客の支払い方法を設定する意図を表すオブジェクトです。SetupIntent
は、この設定プロセスのステップを追跡します。
payment_method_types を nz_
に設定してサーバーで SetupIntent を作成し、Customer の ID を指定します。
client secret を取得する
SetupIntent には、client secret が含まれています。これは、支払いプロセスを安全に完了するためにクライアント側で使用されます。client secret をクライアント側に渡す際は、いくつかの方法を使用できます。
支払い方法の詳細と同意書承認を収集するクライアント側
Stripe Elements を設定する
決済ページに Stripe.js スクリプトを含めるには、HTML ファイルの head
にスクリプトを追加します。常に js.stripe.com から Stripe.js を直接読み込みます。スクリプトをバンドルに含めたり、そのコピーを自身でホストしたりしないでください。
<head> <title>Checkout</title> <script src="https://js.stripe.com/v3/"></script> </head>
最初のパラメーターとして公開可能な API キーを渡し、さらに Elements にアクセスするための nz_
ベータフラグを渡して、Stripe オブジェクトのインスタンスを作成します。
// 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(
, { betas: ['nz_bank_account_beta_2'], apiVersion: "2025-03-31.basil;nz_bank_account_beta=v2" });'pk_test_TYooMQauvdEDq54NiTphI7jx'
Payment Element を決済ページに追加する
決済ページで、Payment Element がレンダリングできるように、一意の ID を持つ空の DOM ノードを作成します。
<form id="payment-form"> <h3>Payment</h3> <div id="payment-element"></div> <button id="submit">Submit</button> </form>
上記のフォームの読み込みが完了したら、新しい Elements グループを作成し、前のステップの client secret を設定として渡します。appearance オプションを渡して、サイトのデザインに合わせて Elements をカスタマイズすることもできます。
次に、Payment Element のインスタンスを作成し、対応する DOM ノードにマウントします。
// Customize the appearance of Elements using the Appearance API. const appearance = { /* ... */ }; // Create an elements group from the Stripe instance, passing the clientSecret (obtained in step 2) and appearance (optional). const elements = stripe.elements({clientSecret, appearance}); // Create Payment Element instance. const paymentElement = elements.create("payment"); // Mount the Payment Element to its corresponding DOM node. paymentElement.mount("#payment-element");
Payment Element によって動的なフォームが表示され、顧客はここで決済手段タイプを選択できます。このフォームでは、顧客が選択した決済手段タイプに必要な支払いの詳細のすべてが、自動的に収集されます。ニュージーランドの BECS ダイレクトデビットによる支払いでは、顧客の氏名、メールアドレス、銀行口座番号がこれに含まれます。
同意書承認
また、Payment Element はニュージーランドの BECS ダイレクトデビットサービスの利用規約も顧客に表示して、これらの規約への顧客の同意を収集します。他に必要な操作はありません。
Payment Element を使用しない場合は、これらの利用規約を別途顧客に表示して、顧客の同意を確認する必要があります。
注
銀行口座情報を提供し、この支払いを確定することにより、Stripe New Zealand Limited (オーソリコード 3143978) が、この許可に従って Rocket Rides (“Stripe”, “弊社” or “加盟店”) への口座引き落とし金額をお客様の口座から引き落とすことを認めるものとします。
この許可が以下に従うことに同意するものとします。
- 口座に関連するご利用の銀行の利用規約、および
- the Direct Debit Service Terms and Conditions
また、お客様が上記の銀行口座の個人名義人または委任された署名者であり、この銀行口座を単独で操作する権限を持つことを認めるものとします。
この口座引き落としの許可の確認後 5 営業日以内に、Stripe からの確認メールが送信されます。
Stripe からのリクエストがあった場合は、同意書の記録を速やかに提供する必要があります。
Stripe に支払い方法の詳細を送信するクライアント側
stripe.confirmSetup を使用して銀行口座の詳細を収集し、PaymentMethod を作成して SetupIntent に関連付けます。
その他の決済手段タイプによっては、顧客をまず銀行のオーソリページなどの中間サイトにリダイレクトしてから、return_
にリダイレクトする場合があります。支払いの完了後に Stripe が顧客をリダイレクトする場所を指定するには、この関数に return_url を指定します。
ニュージーランドの BECS ダイレクトデビットにはリダイレクトが不要なので、redirect に return_
を指定する代わりに、if_
を設定することもできます。これにより、後でリダイレクトベースの決済手段を追加する場合にのみ、return_
が要求されるようになります。
confirmationForm.addEventListener('submit', (ev) => { ev.preventDefault(); stripe.confirmSetup({elements, redirect: "if_required"}) .then(({setupIntent, error}) => { if (error) { console.error(error.message); // The confirmation failed for some reason. } else if (setupIntent.status === "requires_payment_method") { // Confirmation failed. Attempt again with a different payment method. } else if (setupIntent.status === "succeeded") { // Confirmation succeeded! The account is now saved. // Display a message to the customer. } }); });
成功した場合、Stripe は succeeded
ステータスで SetupIntent オブジェクトを返します。これで、関連付けられている PaymentMethod を将来の支払いに使用できるようになります。
顧客への通知メール
SetupIntent の確定に成功した後、同意書と収集した銀行口座の詳細を確認するメールを顧客に送信する必要があります。
さらに、回収されるそれぞれの支払いについて、遅くとも引き落としを行う日までに、引き落とし日と金額を記載したメール通知を顧客に送信する必要があります。
Stripe はデフォルトでこれらのメールの送信を行いますが、カスタム通知を送信することもできます。
将来の決済を受け付けるサーバー側
SetupIntent が成功すると、新しい PaymentMethod が作成され Customer (顧客) に関連付けられます。これらを使用することで、将来の支払いを開始する際に、顧客に銀行口座の再入力を求める必要がなくなります。