機能一覧

決済

決済Webhook処理

Stripe Webhookの署名検証と受信イベントの反映

この機能には環境変数の設定が必要です

.env.local に以下を設定すると動作します。未設定でも画面は開けますが、実行時にエラーが返ります。

  • STRIPE_SECRET_KEY
  • STRIPE_WEBHOOK_SECRET

エンドポイント

POST /api/payment-webhook

ローカルでの受信手順

stripe listen --forward-to localhost:3000/api/payment-webhook
# 表示された whsec_... を STRIPE_WEBHOOK_SECRET に設定する
stripe trigger checkout.session.completed

受信したイベント(0件)

まだイベントを受信していません。

実装のポイント

  • 署名検証には生のリクエストボディを使う(JSONに変換してからでは不一致になる)
  • タイムスタンプの許容範囲を設けてリプレイ攻撃を防ぐ
  • 署名比較は定数時間で行う(timingSafeEqual)
  • 同じイベントIDの再送を無視して二重処理を防ぐ
  • 重い処理はキューに逃がし、Stripeへは素早く200を返す