支払いを行わずに顧客の決済手段を保存する
SetupIntent を使用して顧客の決済手段を保存する方法をご確認ください。
注
Checkout Sessions API でも、支払いを伴うことなく決済手段を保存できます。詳しくは、Checkout Sessions API ガイドをご覧ください。
Setup Intents API を使用すると、初回の支払いなしで顧客の支払いの詳細を保存することができます。これは、今すぐ顧客をアカウント登録して支払いを設定し、将来顧客がオフラインのときに請求する場合に役立ちます。
この組み込みを使用して、継続支払いを設定したり、または顧客がサービスを受け取った後など、最終金額が後で決定される 1 回限りの支払いを作成したりします。
カード提示取引
Stripe Terminal を介したカード詳細の収集などのカード提示取引では、別のプロセスを使用して決済手段を保存します。詳細については、Terminal のドキュメントをご覧ください。
法令遵守
顧客の支払いの詳細を保存する際、適用されるすべての法律、規制、ネットワークの規則に準拠する責任はお客様にあります。これらの要件は通常、以降の購入時の決済フローでの顧客の支払い方法を提示する、顧客がお客様のウェブサイトやアプリを使用していないときに請求するなど、将来に備えて顧客の支払い方法を保存する場合に適用されます。支払い方法の保存をどのように計画しているかを示す規約をウェブサイトやアプリに追加し、顧客が許可できるようにします。
支払い方法を保存する場合、規約に記載された特定の用途にのみ使用できます。顧客がオフラインであるときに支払い方法に請求して、以降の購入に備えたオプションとして保存する場合は、この特定の用途について顧客から明示的に同意を収集する必要があります。たとえば、同意を収集するために「今後の使用に備えて支払い方法を保存する」チェックボックスを使用します。
顧客がオフラインのときに請求するには、規約に以下の内容を含める必要があります。
- 指定された取引で顧客の代理として単独の支払いまたは一連の支払いを開始することをお客様に許可するという、顧客からお客様への同意
- 予期される支払い時期と支払い頻度 (たとえば、請求が予定されている分割払いなのか、サブスクリプションの決済なのか、あるいは予定されていないトップアップなのか)。
- 支払い金額の決定方法
- 支払い方法をサブスクリプションサービスに使用する場合は、キャンセルに関するポリシー
これらの規約に関する顧客の書面による同意の記録を必ず保管してください。
注
手動でのサーバー側の確定を使用する必要がある場合、または実装で支払い方法を別途提示する必要がある場合は、代替方法のガイドをご覧ください。
支払い方法を有効にする
支払い方法の設定を表示して、サポートする支払い方法を有効にします。SetupIntent を作成するには、少なくとも 1 つは支払い方法を有効にする必要があります。
多くの顧客から決済を受け付けられるよう、Stripe では、カードやその他一般的な決済手段がデフォルトで有効になっていますが、ビジネスや顧客に適した追加の決済手段を有効にすることをお勧めします。プロダクトと決済手段のサポートについては決済手段のサポートを、手数料については料金体系ページをご覧ください。
Customer を作成するサーバ側
将来の支払いに備えて支払い方法を設定するには、その手段を Customer (顧客) に関連付ける必要があります。顧客がビジネスでアカウントを作成する際に、Customer
オブジェクトを作成します。Customer
オブジェクトを使用すると、支払い方法を再利用したり、複数の支払いを追跡したりできます。
SetupIntent を作成するサーバ側
注
最初に SetupIntent を作成せずに Payment Element をレンダリングする場合は、インテントを作成する前に支払いの詳細を収集するをご覧ください。
SetupIntent は、将来の支払いのために顧客の支払い方法を設定する意図を表すオブジェクトです。チェックアウトプロセス中に顧客に表示される決済手段も SetupIntent
に記載されます。Stripe でダッシュボードの設定から支払い方法を自動的に取得することも、手動でリストすることもできます。
支払い方法の提供にコードベースのオプションを必要とする場合を除き、自動のオプションをお勧めします。これは、Stripe で通貨、支払い方法の制約、その他のパラメーターを評価し、対応可能な支払い方法のリストが決定されるためです。この場合、コンバージョン率上昇につながり、使用通貨と顧客の所在地に最も適した支払い方法が優先的に表示されます。優先度の低い支払い方法は、オーバーフローメニューの下に隠れた状態となります。
client secret を取得する
SetupIntent には、client secret が含まれています。これは、支払いプロセスを安全に完了するためにクライアント側で使用されます。client secret をクライアント側に渡す際は、いくつかの方法を使用できます。
支払いの詳細を収集するクライアント側
Payment Element を使用してクライアント側で支払い詳細を収集する準備ができました。Payment Element は事前構築された UI コンポーネントであり、多様な支払い方法の詳細の収集を容易にします。
Payment Element には、HTTPS 接続を介して決済情報を Stripe に安全に送信する iframe が含まれています。実装内容を機能させるには、決済ページのアドレスの先頭を http://
ではなく https://
にする必要があります。これを行わなくても実装内容のテストはできますが、本番環境で決済を受け付ける準備が整ったら、必ず HTTPS を有効化してください。
Payment Element によって動的なフォームが表示され、顧客はここで支払い方法を選択できます。支払い方法ごとに、フォームでは、必要な支払いの詳細のすべてを入力するように顧客に自動的に求めます。
デザインをカスタマイズする
Elements
プロバイダーを作成する際に、Appearance (デザイン) オブジェクトを options
に渡すことで、サイトのデザインに合わせて Payment Element をカスタマイズできます。
Apple Pay マーチャントトークンをリクエストする
Apple Pay による決済を受け付ける場合、マーチャントトークンを返すように Apple Pay インターフェイスを設定して、加盟店が開始する取引 (MIT) を有効にすることをお勧めします。Payment Element で関連するマーチャントトークンのタイプをリクエストします。以下の例は、後払いのマーチャントトークンのリクエストを示します。
const paymentElement = elements.create('payment', { applePay: { deferredPaymentRequest: { paymentDescription: 'My deferred payment', managementURL: 'https://example.com/billing', deferredBilling: { amount: 2500, label: 'Deferred Fee', deferredPaymentDate: new Date('2024-01-05') }, } }, // Other options });
通貨を設定する
automatic_payment_methods で SetupIntents を使用する場合、Payment Element の作成時に通貨を指定できます。Payment Element は、指定された通貨をサポートする有効な支払い方法をレンダリングします。詳細については、Payment Element のドキュメントを参照してください。
住所を収集
デフォルトでは、Payment Element は必要な請求先住所情報のみを収集します。(たとえば、デジタル商品およびサービスの税金を計算するなどの目的で) 顧客の詳細な請求先住所または配送先住所を収集するには、Address Element を使用します。
Stripe に支払いの詳細を送信するクライアント側
stripe.confirmSetup を使用して、Payment Element によって収集された詳細で設定を完了します。この関数に return_url を指定して、設定完了後のユーザーのリダイレクト先を指定します。まず、ユーザーを銀行のオーソリページなどの中間サイトにリダイレクトしてから、return_
にリダイレクトできます。
顧客がカード詳細を保存する場合、設定が正常に完了するとすぐに return_
にリダイレクトされます。カード支払いでリダイレクトを行わない場合は、redirect に if_
を設定できます。これにより、リダイレクトベースの支払い方法で購入する顧客のみがリダイレクトされます。
return_
は、レンダリング時に SetupIntent
のステータスを表示するウェブサイト上のページと一致している必要があります。Stripe が顧客を return_
にリダイレクトするときに、以下の URL クエリーパラメーターが渡され、ステータスが確認されます。return_
を指定する際に、独自のクエリパラメーターを追加することもできます。このパラメーターはリダイレクトプロセス全体を通じて持続します。
パラメーター | 説明 |
---|---|
setup_ | SetupIntent の一意の識別子。 |
setup_ | SetupIntent オブジェクトの client secret。 |
stripe.retrieveSetupIntent を使用し、setup_
クエリパラメーターを指定して SetupIntent を取得できます。SetupIntent の確定が正常に完了した場合、(result.
で) 生成された PaymentMethod
ID が、指定された Customer
に保存されます。
注意
顧客のブラウザーセッションを追跡するツールを利用している場合、リファラー除外リストに stripe.
ドメインの追加が必要になる場合があります。リダイレクトを行うと、一部のツールでは新しいセッションが作成され、セッション全体の追跡ができなくなります。
保存された支払い方法に後で請求するサーバ側
法令遵守
顧客の支払いの詳細を保存する際、お客様は適用されるすべての法律、規制、ネットワークの規則に準拠する責任があります。将来の購入に備えて顧客に過去の決済手段を提供する際は、必ず、特定の将来の使用に備えて決済手段の詳細を保存することについての同意を顧客から収集した決済手段をリストアップします。顧客に関連付けられた決済手段のうち、将来の購入用の保存済みの決済手段として顧客に提示できるものと提示できないものを区別するには、allow_redisplay パラメーターを使用します。
購入者にオフセッションで請求する準備ができたら、Customer ID と PaymentMethod ID を使用して、PaymentIntent を作成します。請求する決済手段を見つけるには、顧客に関連付けられた決済手段を一覧表示します。この例ではカードが一覧表示されますが、サポートされているすべてのタイプを一覧表示できます。
Customer ID と PaymentMethod ID を取得したら、支払いの金額と通貨を使用して PaymentIntent を作成します。その他のいくつかのパラメーターを設定して、オフセッションの支払いを行います。
- off_session を
true
に設定して、支払いの試行時に購入者が決済フローを実行中でないことと、カード発行会社、銀行、その他の決済機関などのパートナーからの認証リクエストに対応できないことを示します。決済フローの実行時にパートナーが認証をリクエストした場合、Stripe は前回のオンセッション取引の顧客情報を使用して免除をリクエストします。免除の条件を満していない場合は PaymentIntent からエラーが返されることがあります。 - PaymentIntent の confirm プロパティの値を
true
に設定します。これにより、PaymentIntent が作成されると直ちに確定されます。 - payment_method を PaymentMethod の ID に設定し、customer を Customer の ID に設定します。
支払いが失敗すると、リクエストも 402 HTTP ステータスコードで失敗し、PaymentIntent のステータスが requires_payment_method になります。アプリケーションに戻って支払いを完了するよう (メールやアプリ内通知を送信するなどして) 顧客に通知する必要があります。
Stripe API ライブラリから発生したエラーのコードを確認します。支払いが authentication_required 拒否コードで失敗した場合には、拒否された PaymentIntent の client secret を confirmPayment とともに使用し、顧客が支払いを認証できるようにします。
const form = document.getElementById('payment-form'); form.addEventListener('submit', async (event) => { event.preventDefault(); const {error} = await stripe.confirmPayment({ // The client secret of the PaymentIntent clientSecret, confirmParams: { return_url: 'https://example.com/order/123/complete', }, }); if (error) { // This point will only be reached if there is an immediate error when // confirming the payment. Show error to your customer (for example, payment // details incomplete) const messageContainer = document.querySelector('#error-message'); messageContainer.textContent = error.message; } else { // Your customer will be redirected to your `return_url`. For some payment // methods like iDEAL, your customer will be redirected to an intermediate // site first to authorize the payment, then redirected to the `return_url`. } });
注
stripe.
の完了には数秒かかる場合があります。この間、フォームが再送信されないように無効化し、スピナーのような待機中のインジケーターを表示します。エラーが発生した場合は、それを顧客に表示し、フォームを再度有効化し、待機中のインジケーターを非表示にします。支払いの完了のために顧客による認証などの追加の手順が必要な場合は、Stripe.js がそのプロセスをステップごとに顧客に提示します。
利用可能額不足など、他の理由で支払いが失敗した場合、新しい支払い方法を入力する支払いページを顧客に送信します。既存の PaymentIntent を再利用し、新しい支払いの詳細を利用して支払いを再試行できます。
組み込みをテストする
テスト用の支払いの詳細とテスト用リダイレクトページを使用して、組み込みを確認できます。以下のタブをクリックすると、各支払い方法の詳細を表示できます。
保存された SEPA デビット PaymentMethod への請求をテストする
iDEAL、Bancontact または Sofort を使用して SetupIntent が確定されると、SEPA ダイレクトデビット の PaymentMethod が生成されます。SEPA ダイレクトデビットは、通知遅延型の決済手段であり、中間の processing
状態に移行してから、数日後に succeeded
または requires_
の状態に移行します。
顧客に Stripe を開示する
Stripe は顧客の Elements とのやり取りに関する情報を収集して、サービスを提供し、不正利用を防止し、サービスを向上します。これには、Cookie と IP アドレスを使用して、1 つの決済フローセッションで顧客に表示する Elements を特定することが含まれます。Stripe がこのような方法でデータを使用するために必要なすべての権利と同意について開示し、これらを取得することはお客様の責任です。詳細については、プライバシーセンターをご覧ください。