コンテンツにスキップ
アカウントを作成
または
サインイン
Stripe ドキュメントのロゴ
/
AI に質問する
アカウントを作成
サインイン
始める
支払い
財務の自動化
プラットフォームおよびマーケットプレイス
資金管理
開発者向けのツール
始める
支払い
財務の自動化
始める
支払い
財務の自動化
プラットフォームおよびマーケットプレイス
資金管理
概要
バージョン管理
変更ログ
API バージョンのアップグレード
SDK バージョンをアップグレードする
開発者向けのツール
SDK
API
テスト
ワークベンチ
イベントの送信先
    イベントとの連携
    Amazon EventBridge
    Webhook エンドポイント
      Webhook ビルダー
      Webhook のバージョン管理
      Webhook の署名確認エラーを解決
      未配信の Webhook イベントを処理
ワークフロー
Stripe CLI
Stripe Shell
開発者ダッシュボード
エージェントツールキット
Stripe 健全性アラートBuild with LLMsVisual Studio Code をご利用の場合ファイルのアップロード
セキュリティ
セキュリティ
Stripe を拡張する
Stripe Apps
Stripe のコネクター
パートナー
Partner Ecosystem
パートナー認定
ホーム開発者向けのツールEvent DestinationsWebhook endpoint

未配信の Webhook イベントを処理する

未配信の Webhook イベントを手動で処理する方法をご紹介します。

ページをコピー

Webhook エンドポイントが一時的にイベントを処理できない場合、Stripe は配信されなかったイベントを最大 3 日間エンドポイントに自動的に再送信します。そのため、Webhook エンドポイントがすべてのイベントを受信して処理するまでの時間が長くなります。

このガイドでは、未配信のイベントを手動で処理してプロセスをスピードアップする方法について説明します。

Webhook イベントを一覧表示する

以下のパラメーターを使用して List Events (イベントの一覧表示) API を呼び出します。

  • ending_before: Webhook エンドポイントが使用できなくなる直前に送信されたイベント ID を指定します。
  • types: 取得するイベントタイプのリストを指定します。
  • delivery_success: false に設定すると、Webhook エンドポイントの 1 つ以上に配信できなかったイベントを取得します。

Stripe は、過去 30 日間に作成されたイベントのみを返します。

Command Line
cURL
curl -G https://api.stripe.com/v1/events \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d ending_before=evt_001 \ -d "types[]"="payment_intent.succeeded" \ -d "types[]"="payment_intent.payment_failed" \ -d delivery_success=false

デフォルトでは、レスポンスで最大 10 件のイベントが返されます。すべてのイベントを取得するには、結果を取得した後に自動ページ分割を使用します。

server.rb
Ruby
events = Stripe::Event.list({ ending_before: 'evt_001', types: ['payment_intent.succeeded', 'payment_intent.payment_failed'], delivery_success: false, }) events.auto_paging_each do |event| # This function is defined in the next section process_event(event) end

自動ページ分割で ending_before を使用すると、イベントが時系列で返されます。そのため、作成された順序でイベントを処理できます。

イベントを処理する

お客様固有のロジックに従って、処理に失敗したイベントのみを処理し、次のように 1 つのイベントが複数回処理されないようにします。

  • スクリプトを 2 回連続して誤って実行した
  • Stripe が未処理のイベントを自動的に再送信するのと同時にスクリプトを実行する
server.rb
Ruby
def process_event(event) if is_processing_or_processed(event) puts "skipping event #{event.id}" else puts "processing event #{event.id}" mark_as_processing(event) # Process the event # ... mark_as_processed(event) end end

処理の重複を防ぐ以下の関数を定義します。

  • is_processing_or_processed: データベース内のイベントのステータスを確認します。
  • mark_as_processing: データベースを更新して、イベントを処理中としてマークします。
  • mark_as_processed: データベースを更新して、イベントを処理済みとしてマークします。

自動再試行に応答する

Stripe では、手動で処理されたイベントを未送信と見なすため、引き続き自動的に再試行します。

Webhook エンドポイントがすでに処理されたイベントを受信した場合は、そのイベントを無視して成功レスポンスを返し、以降の再試行を停止します。

webhook.rb
Ruby
require 'json' # Using Sinatra post '/webhook' do payload = request.body.read event = nil begin event = Stripe::Event.construct_from( JSON.parse(payload, symbolize_names: true) ) rescue JSON::ParserError => e # Invalid payload status 400 return end if is_processing_or_processed(event) puts "skipping event #{event.id}" else puts "processing event #{event.id}" mark_as_processing(event) # Process the event # ... mark_as_processed(event) end status 200 end
このページはお役に立ちましたか。
はいいいえ
お困りのことがございましたら 、サポートにお問い合わせください。
早期アクセスプログラムにご参加ください。
変更ログをご覧ください。
ご不明な点がございましたら、お問い合わせください。
LLM ですか?llms.txt を読んでください。
Powered by Markdoc