Payment Intents API を利用した Payment Element への移行
単一の Element で、多数の支払い方法を取り扱えます。
注
システムで引き続きトークン付きの Charges API を使用している場合は、まず Payment Intents API への移行ガイドに従ってください。
Stripe Billing、Stripe Tax や割引、配送、通貨換算の使用をご希望の場合
Stripe は現在、サブスクリプション、税金、割引、配送、通貨換算を管理する Payment Element のシステムを開発中です。詳細は、決済ページの構築ガイドをお読みください。
これまでは、支払い方法 (クレジットカード、iDEAL など) ごとに個別の Element が必要でした。Payment Element に移行すると、さまざまな支払い方法を 1 つの Element で受け付けることができます。
PaymentIntnet と SetupIntent にはそれぞれ独自の移行ガイドラインのセットが用意されています。組み込みパスに適したガイド (サンプルコードを含む) を参照してください。
既存のシステムで、将来の支払いに備えて Setup Intents API を使用している場合に Payment Element を使用するには、以下の手順に従います。
支払い方法を有効にする
注意
この導入パスは、Automated Clearing Settlement System (ACSS) を使用する BLIK またはプレオーソリデビットに対応していません。
支払い方法の設定を表示して、サポートする支払い方法を有効にします。SetupIntent を作成するには、少なくとも 1 つは支払い方法を有効にする必要があります。
多くの顧客から決済を受け付けられるよう、Stripe では、カードやその他一般的な決済手段がデフォルトで有効になっていますが、ビジネスや顧客に適した追加の決済手段を有効にすることをお勧めします。プロダクトと決済手段のサポートについては決済手段のサポートを、手数料については料金体系ページをご覧ください。
Elements インスタンスを更新するクライアント側
次に、クライアント側のコードを更新して、Elements インスタンスを作成するときに mode
と currency
を渡します。SetupIntent で使用する場合は、mode
を 'setup'
に設定して、currency
を将来の顧客への請求内容に設定します。
オプション追加の Elements オプションクライアント側
Elements オブジェクトは、支払いの回収に影響する追加オプションを受け入れます。指定したオプションを基に Payment Element は、有効化した決済手段の中から利用可能なものを表示します。詳しくは、決済手段のサポートをご覧ください。
プロパティー | タイプ | 説明 | 必須 |
---|---|---|---|
mode |
| Payment Element が PaymentIntent、SetupIntent、またはサブスクリプションで使用されているかどうかを示します。 | はい |
currency | string | 顧客に請求する金額の通貨。 | はい |
amount | number | Apple Pay、Google Pay、または BNPL の UI で示される、顧客に請求する金額。 | payment および subscription のモードの場合 |
setupFutureUsage |
| Payment Element によって収集された決済情報を使用して、今後の支払いを行う意図を示します。 | いいえ |
captureMethod |
| 顧客の口座から売上をキャプチャーするタイミングを管理します。 | いいえ |
onBehalfOf | string | Connect のみ。取引に関する金銭的責任を負う Stripe アカウント ID。このオプションが実装に関連するかを判断するには、ユースケースをご覧ください。 | いいえ |
paymentMethodTypes | string[] | 表示する決済手段タイプのリスト。この属性を省略して、Stripe ダッシュボードで決済手段を管理できます。 | いいえ |
paymentMethodConfiguration | string | Stripe ダッシュボードで決済手段を管理するときに使用する決済手段の設定。指定しない場合は、既定の構成が使用されます。 | いいえ |
paymentMethodCreation | manual | stripe.createPaymentMethod を使用して、Elements インスタンスから PaymentMethods が作成されるようにします。 | いいえ |
paymentMethodOptions | {us_ | us_ 決済手段の確認オプション。Payment Intents と同じ確認手段を受け入れます。 | いいえ |
paymentMethodOptions | {card: {installments: {enabled: boolean}}} | Stripe ダッシュボードで決済手段を管理していないときに、カード分割払いプランの選択 UI を手動で有効化できるようにします。mode='payment' を設定し、「さらに」paymentMethodTypes を明示的に指定する必要があります。それ以外の場合は、エラーが発生します。paymentMethodCreation='manual' とは互換性がありません。 | いいえ |
Payment Element を追加するクライアント側
Card Element と個々の支払い方法の Element を Payment Element で置き換えられるようになりました。Payment Element では、支払い方法や国に応じて入力フィールドの収集が自動的に調整されるため (SEPA ダイレクトデビットの請求先住所の収集など)、カスタマイズした入力フィールドを維持する必要がなくなります。
以下は、CardElement
を PaymentElement
で置き換える例です。
支払いフローで購入者の氏名やメールアドレスなどの詳細がすでに収集されている場合、Payment Element の作成時に fields オプションを渡すことにより、Payment Element によってこの情報が収集されないようにすることができます。特定のフィールドの収集を無効にする場合は、同じデータを stripe.confirmSetup で返す必要があります。
SetupIntent 作成コールを更新するサーバー側
Payment Element では複数の支払い方法を受け付けることができるため、automatic_
を使用することをお勧めします。有効にすると、Stripe は、顧客が利用できる支払い方法のリストを決定する際に通貨、支払い方法の制限、その他のパラメーターを評価します。コンバージョン率上昇につながり、顧客の使用通貨と所在地に最も適した支払い方法が優先的に表示されます。
SetupIntent を作成するサーバー上のエンドポイントに automatic_
属性を追加します。
前のステップで Elements グループを作成するときに渡したその他のエレメントオプションも SetupIntent の作成時に渡す必要があります。
注意
一部の支払い方法は、将来の支払いのために保存できません。詳細については、支払い方法の導入オプションをご覧ください。
送信ハンドラーを更新するクライアント側
stripe.
や stripe.
などの個別の confirm メソッドを使用するのではなく、stripe.confirmSetup を使用し、支払い情報を収集して Stripe に送信します。
SetupIntent を確定するために、送信ハンドラを次のように更新します。
await elements.
を呼び出してフォーム検証をトリガーし、ウォレット に必要なデータを収集します。submit() - オプション: SetupIntent の作成を送信ハンドラに移動します。これにより、ユーザーが支払い方法の詳細を送信する準備が整っている場合にのみ SetupIntent を作成することになります。
- Payment Element を作成するために使用した
elements
インスタンスとclientSecret
を、SetupIntent からstripe.
にパラメーターとして渡します。confirmSetup
呼び出されると、stripe.
は 3DS ダイアログの表示による顧客の認証や、銀行のオーソリページへのリダイレクトなどの必要なアクションの完了を試みます。確認が完了すると、ユーザーは構成した return_
にリダイレクトされます。これは通常、SetupIntent
のステータスを提供するウェブサイト上のページに対応します。
カード支払いの詳細の保存で同じフローを維持し、リダイレクトベースの支払い方法の場合にのみリダイレクトを行うようにする場合は、redirect に if_
を設定します。
以下のコード例では、stripe.
を stripe.
に置き換えています。
// Create the SetupIntent and obtain clientSecret const res = await fetch("/create-intent", { method: "POST", headers: {"Content-Type": "application/json"}, }); const {client_secret: clientSecret} = await res.json(); const handleSubmit = async (event) => { event.preventDefault(); if (!stripe) { // Stripe.js hasn't yet loaded. // Make sure to disable form submission until Stripe.js has loaded. return; } setLoading(true); const {error} = await stripe.confirmCardSetup(clientSecret, { payment_method: { card: elements.getElement(CardElement) } }); if (error) { handleError(error); } };
const handleSubmit = async (event) => { event.preventDefault(); if (!stripe) { // Stripe.js hasn't yet loaded. // Make sure to disable form submission until Stripe.js has loaded. return; } setLoading(true); // Trigger form validation and wallet collection const {error: submitError} = await elements.submit(); if (submitError) { handleError(submitError); return; } // Create the SetupIntent and obtain clientSecret const res = await fetch("/create-intent", { method: "POST", headers: {"Content-Type": "application/json"}, }); const {client_secret: clientSecret} = await res.json(); // Use the clientSecret and Elements instance to confirm the setup const {error} = await stripe.confirmSetup({ elements, clientSecret, confirmParams: { return_url: 'https://example.com/order/123/complete', }, // Uncomment below if you only want redirect for redirect-based payments // redirect: "if_required", }); if (error) { handleError(error); } };
組み込みをテストする
テスト用の支払いの詳細とテスト用リダイレクトページを使用して、組み込みを確認できます。以下のタブをクリックすると、各支払い方法の詳細を表示できます。
保存された SEPA デビット PaymentMethod への請求をテストする
iDEAL、Bancontact または Sofort を使用して SetupIntent が確定されると、SEPA ダイレクトデビット の PaymentMethod が生成されます。SEPA ダイレクトデビットは、通知遅延型の決済手段であり、中間の processing
状態に移行してから、数日後に succeeded
または requires_
の状態に移行します。