ニュージーランドの BECS ダイレクトデビットによる決済を受け付ける
ニュージーランドの銀行口座引き落としによる決済を受け付けるカスタムの支払いフォームを構築します。
ウェブサイトでのニュージーランドの BECS ダイレクトデビットによる決済の受け付けは、支払いを追跡するオブジェクトの作成、支払い方法に関する情報と同意書承認の収集、支払いを処理するための Stripe への支払いの送信で構成されます。
Stripe では、Payment Intent (支払いインテント) と呼ばれる決済オブジェクトを使用して、決済が完了するまでの状態のすべてを追跡および処理します。
Customer を作成または取得するサーバー側
以降の支払いに銀行口座を再利用するには、その口座を Customer に関連付けます。
お客様のビジネスで顧客がアカウントを作成するときに、Customer オブジェクトを作成します。この Customer オブジェクトの ID を、顧客を表す独自の内部表記と関連付けることで、保存されている支払い方法の詳細を後で取得して使用することができます。
新しい Customer を作成するか、または既存の Customer を取得して、この支払いに関連付けます。サーバーに以下のコードを含め、新しい Customer を作成します。
PaymentIntent を作成するサーバー側
PaymentIntent (支払いインテント) は、顧客から支払いを回収する意図を表すオブジェクトで、決済プロセスのライフサイクルの各段階を追跡します。
まず、サーバーで PaymentIntent を作成し、回収する金額と通貨 nzd
を指定します。Payment Intents API を使用したシステムがすでにある場合は、PaymentIntent の支払い方法のタイプのリストに nz_
を追加します。Customer の ID を指定します。
さらに、setup_future_usage パラメーターに値 off_
を指定して、将来の使用に備えてその支払い方法を Customer に保存します。
返された PaymentIntent には、client secret が含まれています。これは、PaymentIntent オブジェクト全体を渡すことなく安全に支払いプロセスを完了するために、クライアント側で使用されます。client secret をクライアント側に渡す際は、いくつかの方法を使用できます。
client secret を取得する
PaymentIntent には、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.confirmPayment を使用して銀行口座の詳細を収集し、PaymentMethod を作成して PaymentIntent に関連付けます。
その他の決済手段タイプによっては、顧客をまず銀行のオーソリページなどの中間サイトにリダイレクトしてから、return_
にリダイレクトする場合があります。支払いの完了後に Stripe が顧客をリダイレクトする場所を指定するには、この関数に return_url を指定します。
ニュージーランドの BECS ダイレクトデビットにはリダイレクトが不要なので、redirect に return_
を指定する代わりに、if_
を設定することもできます。これにより、後でリダイレクトベースの決済手段を追加する場合にのみ、return_
が要求されるようになります。
confirmationForm.addEventListener('submit', (ev) => { ev.preventDefault(); stripe.confirmPayment({elements, redirect: "if_required"}) .then(({paymentIntent, error}) => { if (error) { console.error(error.message); // The confirmation failed for some reason. } else if (paymentIntent.status === "requires_payment_method") { // Confirmation failed. Attempt again with a different payment method. } else if (paymentIntent.status === "processing") { // Confirmation succeeded! The account will be debited. // Display a message to the customer. } }); });
成功した場合、Stripe から processing
ステータスで PaymentIntent オブジェクトが返されます。次のステップで、PaymentIntent の成功を確認する方法をご覧ください。
顧客への通知メール
PaymentIntent の確定に成功した後、同意書と収集した銀行口座の詳細を確認するメールを顧客に送信する必要があります。
さらに、今回を含めて回収されるそれぞれの支払いについて、遅くとも引き落としを行う日までに、引き落とし日と金額を記載したメール通知を顧客に送信する必要があります。
Stripe はデフォルトでこれらのメールの送信を行いますが、カスタム通知を送信することもできます。
PaymentIntent の成功を確認するサーバー側
ニュージーランドの BECS ダイレクトデビットは、通知遅延型の支払い方法です。また、遅くとも引き落とし日までに銀行口座からの引き落としについて顧客に通知する必要があります。
その後 3 営業日以内に PaymentIntent の成功または失敗が通知されます。支払いに成功すると、PaymentIntent のステータスは processing
から succeeded
に変わります。
PaymentIntent のステータスが変わると、以下のイベントが送信されます。
イベント | 説明 | 次のステップ |
---|---|---|
payment_ | 顧客が Stripe に支払いを送信しました。 | 開始された支払いの成功、または失敗の結果を待ちます。 |
payment_ | 顧客の決済が成功しました。 | 購入された商品またはサービスのフルフィルメントを行います。 |
payment_ | 顧客の支払いが拒否されました。 | 顧客にメールまたはプッシュ通知を送信して、別の支払い方法をリクエストします。 |
Webhook を使用して支払いが成功したことを確認し、顧客に支払い完了を通知することをお勧めします。Stripe ダッシュボードでイベントを表示することもできます。
将来の決済を受け付けるサーバー側
Customer (顧客) を指定し、setup_future_usage パラメーターが off_
に設定された PaymentIntent が成功すると、PaymentMethod が Customer に関連付けられます。これらを使用することで、将来の支払いを開始する際に、顧客に銀行口座の再入力を求める必要がなくなります。