コンテンツにスキップ
アカウントを作成
または
サインイン
Stripe ドキュメントのロゴ
/
AI に質問する
アカウントを作成
サインイン
始める
支払い
売上
プラットフォームおよびマーケットプレイス
資金管理
開発者向けリソース
概要
バージョン管理
変更ログ
API バージョンのアップグレード
SDK バージョンをアップグレードする
Essentials
SDK
API
テスト
Stripe CLI
サンプルプロジェクト
ツール
ワークベンチ
開発者ダッシュボード
Stripe Shell
Visual Studio Code をご利用の場合
機能
ワークフロー
イベントの送信先
    イベントとの連携
    Amazon EventBridge
    Webhook エンドポイント
      Webhook ビルダー
      Webhook のバージョン管理
      Webhook の署名確認エラーを解決
      未配信の Webhook イベントを処理
Stripe 健全性アラートファイルのアップロード
AI ソリューション
エージェントツールキット
セキュリティとプライバシー
セキュリティ
プライバシー
Stripe を拡張する
Build Stripe apps
Use apps from 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