未配信の Webhook イベントを処理する
未配信の Webhook イベントを手動で処理する方法をご紹介します。
Webhook エンドポイントが一時的にイベントを処理できない場合、Stripe は配信されなかったイベントを最大 3 日間エンドポイントに自動的に再送信します。そのため、Webhook エンドポイントがすべてのイベントを受信して処理するまでの時間が長くなります。
このガイドでは、未配信のイベントを手動で処理してプロセスをスピードアップする方法について説明します。
Webhook イベントを一覧表示する
以下のパラメーターを使用して List Events (イベントの一覧表示) API を呼び出します。
ending_
: Webhook エンドポイントが使用できなくなる直前に送信されたイベント ID を指定します。before types
: 取得するイベントタイプのリストを指定します。delivery_
:success false
に設定すると、Webhook エンドポイントの 1 つ以上に配信できなかったイベントを取得します。
Stripe は、過去 30 日間に作成されたイベントのみを返します。
デフォルトでは、レスポンスで最大 10 件のイベントが返されます。すべてのイベントを取得するには、結果を取得した後に自動ページ分割を使用します。
自動ページ分割で ending_
を使用すると、イベントが時系列で返されます。そのため、作成された順序でイベントを処理できます。
イベントを処理する
お客様固有のロジックに従って、処理に失敗したイベントのみを処理し、次のように 1 つのイベントが複数回処理されないようにします。
- スクリプトを誤って 2 回連続して実行した
- Stripe が未処理のイベントを自動的に再送信するのと同時にスクリプトを実行する
処理の重複を防ぐ以下の関数を定義します。
is_
: データベース内のイベントのステータスを確認します。processing_ or_ processed mark_
: データベースを更新して、イベントを処理中としてマークします。as_ processing mark_
: データベースを更新して、イベントを処理済みとしてマークします。as_ processed
自動再試行に応答する
Stripe では、手動で処理されたイベントを未送信と見なすため、引き続き自動的に再試行します。
Webhook エンドポイントがすでに処理されたイベントを受信した場合は、そのイベントを無視して成功レスポンスを返し、以降の再試行を停止します。