コンテンツにスキップ
アカウントを作成
または
サインイン
Stripe ドキュメントのロゴ
/
Ask AI
アカウントを作成
サインイン
始める
支払い
財務の自動化
プラットフォームおよびマーケットプレイス
資金管理
開発者向けのツール
始める
支払い
財務の自動化
始める
支払い
財務の自動化
プラットフォームおよびマーケットプレイス
資金管理
概要
Stripe Payments について
構築済みのシステムをアップグレード
支払いの分析
オンライン決済
概要ユースケースを見つけるManaged Payments
Payment Links を使用する
決済ページを構築
    概要
    クイックスタート
    デザインをカスタマイズする
    追加情報を収集する
    税金を徴収する
    決済フローを動的に更新
    商品カタログを管理する
    サブスクリプション
    決済手段を管理
    顧客が現地通貨で支払いできるようにする
    割引、アップセル、オプション品目を追加する
    将来の支払いを設定する
    支払い中に支払い詳細を保存する
    Manually approve payments on your server
    支払い後
      注文のフルフィルメント
      領収書と支払い済みの請求書を送信する
      リダイレクトの動作をカスタマイズ
      放棄されたカートを回復する
      コンバージョンファネルを分析
    Elements with Checkout Sessions API ベータ版の変更ログ
    従来の Checkout からの移行
    Checkout を移行して Prices を使用
高度なシステムを構築
アプリ内実装を構築
支払い方法
決済手段を追加
決済手段を管理
Link による購入の迅速化
支払いインターフェイス
Payment Links
Checkout
Web Elements
アプリ内 Elements
決済シナリオ
カスタムの決済フロー
柔軟なアクワイアリング
オーケストレーション
店頭支払い
端末
他の Stripe プロダクト
Financial Connections
仮想通貨
Climate
ホーム支払いBuild a checkout pageAfter the payment

注

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

注文のフルフィルメント

Checkout Sessions API で受け取った支払いをフルフィルメントする方法をご紹介します。

ページをコピー

Checkout Sessions API (Payment Links を含む) を使用して支払いを受け取った場合、顧客が代金を支払った対象物を提供するための対応が必要になる場合があります。たとえば、場合によっては、サービスへのアクセス権を付与したり、物品を発送したりすることが必要になります。これはフルフィルメントと呼ばれるプロセスであり、このプロセスを処理するには次の 2 つの方法があります。

  • 手動: Stripe が提供した情報を使用して、手動で注文のフルフィルメントを履行できます。例えば、ダッシュボード を監視したり、支払い通知メールを確認したり、レポート確認後に注文のフルフィルメントを履行したりすることができます。
  • 自動: 自動化されたフルフィルメントシステムを構築できます。 Recommended

1 つ目のオプションは、取引額が少額のプロジェクトまたは実験的なプロジェクトに適していますが、多くの場合、フルフィルメントの自動化をお勧めします。このガイドの以降の部分では、自動フルフィルメントシステムの構築方法を説明します。

自動フルフィルメント

以下に説明する自動フルフィルメントシステムは、Webhook とお客様のウェブサイトへのリダイレクトを組み合わせてフルフィルメントをトリガーします。支払いごとにフルフィルメントが発生するように Webhook を使用する必要があり、リダイレクトによって顧客は支払い後すぐにサービスやフルフィルメントの詳細にアクセスできます。

フルフィルメント関数を作成
サーバ側

支払いを正常にフルフィルメントするための関数をサーバー上に作成します。Webhook によってこの関数がトリガーされ、この関数は、決済完了後に顧客が貴社のウェブサイトに誘導されたときに呼び出されます。本ガイドでは、この関数を fulfill_checkout と呼んでいますが、関数の名前は自由に設定できます。

過剰なフルフィルメントを防ぐ

フルフィルメントは、支払いごとに 1 回のみ実施します。このシステムとインターネットの仕組みが原因で、fulfill_checkout 関数が同じ Checkout セッションに対して複数回 (場合によっては同時に) 呼び出される場合があります。決済が一度だけ行われるようにすることで、望ましくない動作を防止できます。

fulfill_checkout 関数では、次のことを行う必要があります。

  1. 同じ Checkout セッション ID で複数回呼び出されたケースを正しく処理します。
  2. 引数として Checkout セッション ID を受け入れます。
  3. 拡張したline_items プロパティを使って、API で Checkout セッションを取得します。
  4. payment_status プロパティを確認して、フルフィルメントが必要かどうかを判断します。
  5. ラインアイテムのフルフィルメントを実行します。
  6. 指定された Checkout セッションのフルフィルメントステータスを記録します。

以下のコードを fulfill_checkout 関数の開始点として使用します。TODO コメントは、実装する必要がある機能を示します。

注

以下のコードスニペットでは、選択した言語に応じて fulfill_checkout 関数に fulfillCheckout または FulfillCheckout という名前が付けられていますが、これらはすべて同じ関数を表しています。

Ruby
def fulfill_checkout(session_id) # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys Stripe.api_key =
'sk_test_BQokikJOvBiI2HlWgH4olfQ2'
puts "Fullfilling Checkout Session #{session_id}" # TODO: Make this function safe to run multiple times, # even concurrently, with the same session ID # TODO: Make sure fulfillment hasn't already been # performed for this Checkout Session # Retrieve the Checkout Session from the API with line_items expanded checkout_session = Stripe::Checkout::Session.retrieve({ id: session_id, expand: ['line_items'], }) # Check the Checkout Session's payment_status property # to determine if fulfillment should be performed if checkout_session.payment_status != 'unpaid' # TODO: Perform fulfillment of the line items # TODO: Record/save fulfillment status for this # Checkout Session end end

注

Checkout セッションに多数のラインアイテムがある場合は、自動ページ分割と Checkout ラインアイテムを操作する API を使用して、すべてのラインアイテムを取得します。

受け付ける決済手段とビジネスニーズに応じて、fulfill_checkout 関数で次の処理を行うことができます。

  • サービスへのアクセス権をプロビジョニングする。
  • 商品の配送をトリガーする。
  • 支払い詳細とラインアイテムのコピーを自社のデータベースに保存する。
  • Stripe の領収書を有効にしていない場合に、顧客にカスタムの領収書メールを送信する。
  • 顧客が Checkout で数量を調整できるようにする場合に、ラインアイテムと購入数量を照合する。
  • 在庫または在庫レコードを更新する。

支払いイベントハンドラーを作成
サーバ側

フルフィルメントをトリガーするには、Webhook イベントハンドラーを作成して支払いイベントをリッスンし、fulfill_checkout 関数をトリガーします。

貴社に対して支払いがあると、checkout.session.completed イベントが作成されます。これらのイベントの受け付け、処理、受領確認を行うように、サーバー上のエンドポイントを設定します。

Immediate versus delayed payment methods

Some payment methods aren’t instant, such as ACH direct debit and other bank transfers. This means, funds won’t be immediately available when Checkout completes. Delayed payment methods generate a checkout.session.async_payment_succeeded event when payment succeeds later. The status of the object is in processing until the payment status either succeeds or fails.

注

以下のコードに示されている Webhook secret (whsec_...) は、Stripe CLI または Webhook エンドポイントから取得できます。ローカルでのテストには Stripe CLI を使用できます。Stripe は Webhook エンドポイントを使用して、サーバーで実行されているハンドラーにイベントを送信します。詳細は次のセクションを参照してください。

Ruby
require 'sinatra' # Use the secret provided by Stripe CLI for local testing # or your webhook endpoint's secret. endpoint_secret = 'whsec_...' post '/webhook' do event = nil # Verify webhook signature and extract the event # See https://stripe.com/docs/webhooks#verify-events for more information. begin sig_header = request.env['HTTP_STRIPE_SIGNATURE'] payload = request.body.read event = Stripe::Webhook.construct_event(payload, sig_header, endpoint_secret) rescue JSON::ParserError => e # Invalid payload return status 400 rescue Stripe::SignatureVerificationError => e # Invalid signature return status 400 end if event['type'] == 'checkout.session.completed' || event['type'] == 'checkout.session.async_payment_succeeded' fulfill_checkout(event['data']['object']['id']) end status 200 end

また、checkout.session.async_payment_failed イベントをリッスンして処理することもできます。たとえば、遅延していた支払いが失敗した場合に顧客にメールを送信できます。

イベントハンドラーをローカルでテスト

Webhook イベントハンドラーを開発・テストする最も簡単な方法は、Stripe CLI を利用することです。Stripe CLI をお持ちでない場合は、インストールガイドに従って利用を開始してください。

Stripe CLI をインストールしている場合は、イベントハンドラーをローカルでテストできます。サーバーを (たとえば localhost:4242 で) 実行してから、stripe listen コマンドを実行し、Stripe CLI からイベントをローカルサーバーに転送するようにします。

Command Line
stripe listen --forward-to localhost:4242/webhook Ready! Your webhook signing secret is 'whsec_<REDACTED>' (^C to quit)

Webhook secret (whsec_...) をイベント処理コードに追加し、顧客として Checkout を実行してフルフィルメントをテストします。

  • 購入ボタンを押して Checkout に進むか、決済用リンクにアクセスします。
  • Checkout で次のテストデータを指定します。
    • カード番号として 4242 4242 4242 4242 を入力する
    • カードの有効期限として将来の任意の日付を入力する
    • 3 桁の任意のセキュリティコードを入力する
    • 請求先の任意の郵便番号 (90210) を入力する
  • 支払うボタンを押します。

支払いが完了したら、次の点を確認します。

  • stripe listen が実行されているコマンドラインに、ローカルサーバーへ転送された checkout.session.completed イベントが表示されます。
  • サーバーログには、fulfill_checkout 関数から想定される出力が表示されます。

Webhook エンドポイントを作成

ローカルでテストした後、Webhook イベントハンドラーをサーバで設定して実行します。次に、Webhook エンドポイントを作成して checkout.session.completed イベントをサーバーに送信し、 決済フローを再度テストします。

ランディングページの URL を設定
推奨

Checkout の完了後に顧客を貴社のウェブサイトのページに誘導するように Checkout を設定します。ページの URL に {CHECKOUT_SESSION_ID} プレースホルダーを含めると、顧客が決済プロセスを完了したときにそのプレースホルダーが Checkout セッション ID に置き換えられます。

Command Line
cURL
curl https://api.stripe.com/v1/checkout/sessions \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d "line_items[0][price]"=
{{PRICE_ID}}
\ -d "line_items[0][quantity]"=1 \ -d mode=payment \ -d ui_mode=embedded \ --data-urlencode return_url="https://example.com/after-checkout?session_id={CHECKOUT_SESSION_ID}"

ランディングページでフルフィルメントをトリガーする
推奨

Webhook をリッスンすることは、すべての支払いに対して常にフルフィルメントがトリガーされていることを確認するために必要ですが、そうすると Webhook が遅延することがあります。決済フローを最適化し、顧客がアクセスしたときにすぐに確実にフルフィルメントされるようにするには、ランディングページからもフルフィルメントをトリガーします。

前のステップで指定した URL の Checkout セッション ID を使用して、次の手順を行います。

  1. サーバーが Checkout のランディングページに対するリクエストを受信したときに、URL から Checkout セッション ID を抽出します。
  2. 提供された ID で fulfill_checkout 関数を実行します。
  3. フルフィルメントの試行が完了した後にページをレンダリングします。

ランディングページをレンダリングすると、次の情報を表示できます。

  • フルフィルメントプロセスの詳細
  • 顧客が現在アクセスできるサービスに関するリンクまたは情報
  • 物品の配送先や物流の詳細

Webhook は必須

顧客が Checkout のランディングページにアクセスするとは限らないため、フルフィルメントのトリガーをランディングページからのみにすると当てになりません。たとえば、Checkout で支払いに成功しても、ランディングページが読み込まれる前にインターネットへの接続が失われることがあります。

Set up a webhook event handler so Stripe can send payment events directly to your server, bypassing the client entirely. Webhooks provide the most reliable way to confirm when you get paid. If webhook event delivery fails, Stripe retries multiple times.

このページはお役に立ちましたか。
はいいいえ
お困りのことがございましたら 、サポートにお問い合わせください。
早期アクセスプログラムにご参加ください。
変更ログをご覧ください。
ご不明な点がございましたら、お問い合わせください。
LLM ですか?llms.txt を読んでください。
Powered by Markdoc