Developers·2026-04-01·6 分で読める
すべての決済Webhookには3つの保証が必要: 真正性(リクエストが本当に我々から来た)、at-least-once配信(イベントが静かに失われない)、冪等性(再配信がDBを二重課金しない)。
真正性: すべてのBaynoy WebhookはX-Baynoy-Signatureヘッダーを送信します — エンドポイントのシークレットでsha256(timestamp + '.' + body)。タイムスタンプが5分以上古い(リプレイ防御)、または署名が定数時間比較で一致しない場合は拒否。Stripeが使用する正確な形式に従うので、既存のStripe検証ミドルウェアが変更なしで適用されます。
At-least-once: 1m、5m、30m、2h、12h、24hで指数バックオフでリトライ — 6回試行で上限。各試行はレスポンスステータスとともにbaynoy_webhook_deliveriesに行を書き込みます。ダッシュボードのreplay-from-UIボタンは同じdeliveryパイプラインに当たります; 特別なパスなし。
冪等性: すべてのイベントはevent.idを持つ(UUIDv7 — ソート可能、単調増加)。初回受信時に永続化し、unique constraintでDBレベルで重複を拒否。我々は再配信します。制約はあなたのセーフティネットです。
ミドルウェア3行で、単一の支払い通知も失わずに6時間のアウテージを乗り越えるWebhookハンドラーを手に入れます。