コンテンツにスキップ
アカウントを作成
または
サインイン
Stripe ドキュメントのロゴ
/
AI に質問する
アカウントを作成
サインイン
始める
支払い
売上
プラットフォームおよびマーケットプレイス
資金管理
開発者向けのツール
概要
Stripe Payments について
構築済みのシステムをアップグレード
支払いの分析
オンライン決済
概要ユースケースを見つけるManaged Payments
Payment Links を使用する
決済ページを構築
高度なシステムを構築
アプリ内実装を構築
決済手段
決済手段を追加
決済手段を管理
Link による購入の迅速化
支払いインターフェイス
Payment Links
Checkout
Web Elements
    概要
    Payment Element
      Payment Element のベストプラクティス
      カード Element の比較
      Payment Intents を使用して Payment Element に移行
      Checkout セッションを使用して Payment Element に移行
      Confirmation Tokens に移行
    Express Checkout Element
    Address Element
    Currency Selector Element
    Link Authentication Element
    Payment Method Messaging Element
アプリ内 Elements
決済シナリオ
カスタムの決済フロー
柔軟なアクワイアリング
オーケストレーション
店頭支払い
端末
他の Stripe プロダクト
Financial Connections
仮想通貨
Climate
ホーム支払いWeb ElementsPayment Element

注

このページはまだ日本語ではご利用いただけません。より多くの言語で文書が閲覧できるように現在取り組んでいます。準備が整い次第、翻訳版を提供いたしますので、もう少しお待ちください。

Checkout Sessions API を使用した Payment Element へ移行する

1 つの Element で多くの決済手段を受け付けながら、税金、配送料、割引、通貨換算なども管理できます。

ページをコピー

以前は、各決済手段 (カード、iDEAL など) に個別の Element が必要でした。Payment Element に移行すると、1 つの Element で多くの決済方法を受け付けられます。Payment Intents から Checkout Sessions に移行することで、追加機能を使用できます。これにより、実装でサブスクリプション、割引、配送、通貨換算を管理できるようになります。

Card Element を PaymentIntents または SetupIntents と併用していて、Payment Element への移行のみを行う場合は、Payment Element に移行するをご覧ください。ユースケースに合わない場合は、他の決済実装を比較することもできます。

PaymentIntents と SetupIntents には、それぞれ独自の移行ガイドラインがあります。サンプルコードを含む、実装パスの適切なガイドを参照してください。

既存の実装で今後の決済に Payment Intents API を使用している場合は、決済を作成・追跡するか、決済中にカードの詳細を保存します。以下の手順に従って、Payment Element と Checkout Sessions 使用します。

支払い方法を有効にする

注意

この導入パスは、Automated Clearing Settlement System (ACSS) を使用する BLIK またはプレオーソリデビットに対応していません。

View your payment methods settings and enable the payment methods you want to support. You need at least one payment method enabled to create a Checkout Session.

By default, Stripe enables cards and other common payment methods that can help you reach more customers, but we recommend turning on additional payment methods that are relevant for your business and customers. See Payment method support for product and payment method support, and our pricing page for fees.

PaymentIntent 作成コールを移行する
サーバー側

2025-03-31.basil API バージョン以降を使用するよう SDK を設定します。

TypeScript
// Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys import Stripe from 'stripe'; const stripe = new Stripe(
'sk_test_BQokikJOvBiI2HlWgH4olfQ2'
, { apiVersion: '2025-03-31.basil;' as any, });

Payment Element では複数の決済手段を受け付けられるため、Checkout Session に payment_method_types を渡さないと自動的に有効になる dynamic payment メソッドを使用することをお勧めします。これを有効にすると、Stripe は通貨、決済手段の制限、その他のパラメーターを評価して、顧客が利用できる決済手段のリストを決定します。購入完了率が高く、顧客の通貨と場所に最も関連性の高い決済手段を優先します。

代わりに、PaymentIntent 作成コールを更新して Checkout Session を作成します。Checkout Sessions インスタンスでは、以下を渡します。

  • line_items:注文の内容を表します
  • ui_mode: custom: 埋め込みコンポーネントを使用していることを示します
  • mode: payment:Checkout Session の 1 回限りの支払いを受け付けることを示します
  • return_url顧客が決済手段のアプリまたはサイトで決済を認証またはキャンセルした後にリダイレクトされる URL を表します。

さらに、Checkout Session の client_secret をクライアント側に返して、後で使用するようにします。

各 Checkout Session は、確認時に PaymentIntent を生成します。PaymentIntent の作成時に現在の実装から追加のパラメータを保持する場合は、payment_intent_data で使用可能なオプションを参照してください。

前
後
Ruby
intent = Stripe::PaymentIntent.create({ amount: 1099, currency: 'usd', payment_method_types: ['card'], })
Ruby
session = Stripe::Checkout::Session.create({ line_items: [ { price_data: { currency: 'usd', product_data: {name: 'T-shirt'}, unit_amount: 1099, }, quantity: 1, }, ], mode: 'payment', ui_mode: 'custom', return_url: '{{RETURN_URL}}', }) { clientSecret: session.client_secret, }.to_json

オプションCheckout Session の追加オプション
サーバー側

Elements インスタンスの移行
クライアント側

Include the Stripe.js script on your checkout page by adding it to the head of your HTML file. Always load Stripe.js directly from js.stripe.com to remain PCI compliant. Don’t include the script in a bundle or host a copy of it yourself.

To update Stripe.js to basil from v3, include the following script tag: <script src="https://js.stripe.com/basil/stripe.js"></script>. To learn more about Stripe.js versioning, see the Stripe.js versioning and support policy.

checkout.html
<head> <title>Checkout</title> <script src="https://js.stripe.com/basil/stripe.js"></script> </head>

Create a fetchClientSecret function that retrieves the client secret from your server and returns a promise that resolves with the client secret.

Replace your stripe.elements() call with stripe.initCheckout, passing in fetchClientSecret. initCheckout returns a promise that resolves to a Checkout instance.

The Checkout object acts as the foundation of your checkout page, because it contains data from the Checkout Session and methods to update the Session.

Use the object returned by checkout.session() as your reference for prices. We recommend reading and displaying the total and lineItems from the session in your UI.

This lets you turn on new features with minimal code changes. For example, adding manual currency prices requires no UI changes if you display the total.

前
後
const stripe = Stripe(
'pk_test_TYooMQauvdEDq54NiTphI7jx'
); const elements = stripe.elements();
checkout.js
const stripe = Stripe(
'pk_test_TYooMQauvdEDq54NiTphI7jx'
); const fetchClientSecret = () => { return fetch('/create-checkout-session', {method: 'POST'}) .then((response) => response.json()) .then((json) => json.checkoutSessionClientSecret); }; stripe.initCheckout({fetchClientSecret}) .then((checkout) => { const checkoutContainer = document.getElementById('checkout-container'); checkoutContainer.append(JSON.stringify(checkout.lineItems, null, 2)); checkoutContainer.append(document.createElement('br')); checkoutContainer.append(`Total: ${checkout.session().total.total.amount}`); });
index.html
<div id="checkout-container"></div>

顧客のメールアドレスを収集する
クライアント側

埋め込みコンポーネントに移行するには、顧客のメールを収集する追加の手順が必要です。

If you already pass in an existing customer_email or Customer with a valid email set when creating the Checkout Session, you can skip this step.

If you implement your own email validation, you can pass in the validated email on checkout.confirm and skip this step.

顧客のメールアドレスを収集するためのメールアドレス入力を作成します。顧客が入力を完了してメールアドレスを検証し、保存したら、updateEmail を呼び出します。

決済フォームのデザインに応じて、次の方法で updateEmail を呼び出すことができます。

  • 支払いの送信の直前。また、updateEmail を呼び出して、早い段階 (ぼかしの入力時など) で検証することもできます。
  • 次のステップに進む前 (フォームが複数のステップからなる場合の保存ボタンのクリック時など)。
index.html
<input type="text" id="email" /> <div id="email-errors"></div>
checkout.js
stripe.initCheckout({fetchClientSecret}).then((checkout) => { const emailInput = document.getElementById('email'); const emailErrors = document.getElementById('email-errors'); emailInput.addEventListener('input', () => { // Clear any validation errors emailErrors.textContent = ''; }); emailInput.addEventListener('blur', () => { const newEmail = emailInput.value; checkout.updateEmail(newEmail).then((result) => { if (result.error) { emailErrors.textContent = result.error.message; } }); }); });

Payment Element を追加する
クライアント側

Card Element と個々の payment メソッドの Element を Payment Element に置き換えることができるようになりました。Payment Element は、決済手段と国に基づいて入力フィールドを収集するように自動的に調整されるため (たとえば、SEPA ダイレクトデビットの全請求先住所の収集)、カスタマイズされた入力フィールドを維持する必要がなくなります。

次の例では、CardElement を PaymentElement に置き換えます。

checkout.html
<form id="payment-form"> <div id="card-element"> </div> <div id="payment-element"> <!-- Mount the Payment Element here --> </div> <button id="submit">Submit</button> </form>
checkout.js
const cardElement = elements.create("card"); cardElement.mount("#card-element"); const paymentElement = checkout.createPaymentElement(); paymentElement.mount("#payment-element");

送信ハンドラを更新する
クライアント側

stripe.confirmCardPayment や stripe.confirmP24Payment などの個別の確認方法を使用する代わりに、checkout.confirm を使用して決済情報を収集し、Stripeに送信します。

Checkout Session を確定するには、個々の confirm メソッドの代わりに checkout.confirm を使用するように送信ハンドラを更新します。

呼び出されると、checkout.confirm は、3DS ダイアログを表示したり、銀行のオーソリページにリダイレクトしたりするなど、必要なアクションの完了を試みます。確認が完了すると、顧客は設定したreturn_url にリダイレクトされます。これは通常、決済のステータスを提供するウェブサイトのページに対応します。

カード決済で同じ決済フローを維持し、リダイレクトベースの決済手段でのみリダイレクトする場合は、redirect を if_required に設定できます。

次のコード例では、stripe.confirmCardPayment を checkout.confirm に置き換えています。

前
後
// Create the PaymentIntent 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.confirmCardPayment(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); const {error} = await checkout.confirm(); if (error) { handleError(error); } };

オプション決済フロー中に支払い情報を保存する

支払い後のイベントを処理する
サーバー側

支払いが完了すると、Stripe は checkout.session.completed イベントを送信します。ダッシュボード Webhook ツールを使用して、または Webhook ガイドに従って、これらのイベントを受信し、顧客への注文確認メールの送信、データベースへの販売の記録、配送ワークフローの開始などのアクションを実行します。

クライアントからのコールバックを待たずにこれらのイベントをリッスンします。クライアント側では、コールバックが実行される前に顧客がブラウザーのウィンドウを閉じたり、アプリを終了したりする可能性があるだけでなく、不正なクライアントによってレスポンスが操作される可能性もあります。非同期型のイベントをリッスンするよう実装を設定すると、単一の実装で異なるタイプの支払い方法を受け付けできるようになります。

Payment Element を使用して支払いを収集する場合は、checkout.session.completed イベントの他にこれらのイベントを処理することをお勧めします。

イベント説明アクション
checkout.session.completed顧客が正常に決済を完了したときに送信されます。顧客に注文の確定を送信し、顧客の注文のフルフィルメントを実行します。
checkout_session.async_payment_succeeded遅延した決済手段を使用した顧客による決済が最終的に成功したときに送信されます。顧客に注文の確定を送信し、顧客の注文のフルフィルメントを実行します。
checkout.session.async_payment_failed顧客が支払いを試みたが、支払いに失敗した場合に送信されます。決済は async_payment_failed から変わり、もう一度決済を試す機会が顧客に提供されます。
checkout.session.expired顧客の決済セッションの有効期限が切れたとき (24 時間後) に送信されます。決済は expired から payment_failed に変わり、決済ページの再読み込みを試し新しい決済セッションを作成する機会が顧客に提供されます。

組み込みをテストする

  1. 決済ページに移動します。
  2. 次の表の決済手段を使用して、支払いの詳細を入力します。カード支払いの場合:
    • カードの有効期限として任意の将来の日付を入力します。
    • 任意の 3 桁のセキュリティコードを入力します。
    • 請求先の任意の郵便番号を入力します。
  3. Stripe に決済を送信します。
  4. ダッシュボードに移動し、取引ページで決済を探します。決済が成功していると、そのリストに表示されます。
  5. 決済をクリックすると、請求先情報や購入したアイテムのリストなどの詳細が表示されます。この情報を使用して注文のフルフィルメントを実行できます。
カード番号シナリオテスト方法
カード支払いは成功し、認証は必要とされません。クレジットカード番号と、任意の有効期限、セキュリティコード、郵便番号を使用してクレジットカードフォームに入力します。
カード支払いには認証が必要です。クレジットカード番号と、任意の有効期限、セキュリティコード、郵便番号を使用してクレジットカードフォームに入力します。
カードは、insufficient_funds などの拒否コードで拒否されます。クレジットカード番号と、任意の有効期限、セキュリティコード、郵便番号を使用してクレジットカードフォームに入力します。
UnionPay カードは、13 ~ 19 桁の可変長です。クレジットカード番号と、任意の有効期限、セキュリティコード、郵便番号を使用してクレジットカードフォームに入力します。

実装内容をテストするためのその他の情報については、テストをご覧ください。

参照情報

  • 請求先住所と配送先住所を収集する
  • 1 回限りの決済にプロモーションコードを使用する
  • 税金を自動徴収する
  • 項目の数を調整可能にする
  • 自動通貨換算
このページはお役に立ちましたか。
はいいいえ
お困りのことがございましたら 、サポートにお問い合わせください。
早期アクセスプログラムにご参加ください。
変更ログをご覧ください。
ご不明な点がございましたら、お問い合わせください。
LLM ですか?llms.txt を読んでください。
Powered by Markdoc