第 14 章 / 全 27 章
Webhook 送信ログ
取引・返金・チャージバック・定期課金の状態が変わると、加盟店の システム通知先 URL に Webhook(通知)を送ります。送信の記録・失敗の確認・再送はこの画面で行います。ペイロードの形式・署名の検証方法は 通知パラメータ仕様 を参照してください。
送信されるイベント
| イベント | タイミング |
|---|---|
payment.completed | 取引が完了になったとき(手動完了・決済リンクの完了・入金消込の一致 / 超過・加盟店サイトからの自動完了) |
payment.failed | 取引が失敗になったとき |
payment.expired | 振込期限超過で期限切れになったとき(毎時の自動処理を含む) |
payment.cancelled | 取引がキャンセルされたとき |
refund.completed | 返金が承認され完了したとき |
limit.exceeded | 加盟店の限度額超過で取引が失敗として記録されたとき |
chargeback.opened | チャージバックが登録されたとき |
subscription.charged | 定期課金の課金が成功したとき |
subscription.payment_failed | 定期課金の課金が失敗し再試行待ちになったとき |
subscription.suspended | 定期課金が 3 回目の失敗で停止したとき |
送信先は加盟店の通知設定(通知の型 / パラメータセット / 識別子)に従い、event パラメータが常に含まれます。加盟店が設定されていない取引(プロバイダ直の取引)には送信しません。
署名
| ヘッダー | 内容 |
|---|---|
X-Timestamp | 送信時刻(UNIX 秒) |
X-Signature | v1=<HMAC-SHA256(鍵, "<X-Timestamp>.<ペイロード>") の 16 進> |
Wirepay-Signature | 互換用。t=<X-Timestamp>,v1=<同じ値> |
- 鍵 は加盟店の 署名シークレット(加盟店詳細の APIキータブで発行。テスト / 本番それぞれ最新の有効なもの)です。署名シークレットが無い環境への通知は送信しません(パスワードで代用することはありません): 送信ログに
failed(error: signing_secret_missing)で記録され、通知センターに「Webhook 署名シークレット未設定」(警告、加盟店 × 環境ごとに 24 時間に 1 通)が届きます。署名シークレットを発行してから 今すぐ再送 すると署名を付けて送信します。加盟店の新規登録時にはテスト環境の署名シークレットが自動発行され、完了画面に 1 回だけ表示されます。 - ペイロード は POST(JSON / フォーム)ならリクエストボディそのもの、GET ならクエリ文字列(
?の後ろ)です。 - 受信側は同じ計算で
v1を求めて定数時間比較し、X-Timestampが 5 分以上古い場合は拒否してください(コード例は通知パラメータ仕様の章)。
リトライと断念
2xx 以外の応答、または 10 秒 以内に応答が無い場合は失敗として記録し、1 分 → 5 分 → 30 分 → 2 時間 → 24 時間 の間隔で最大 5 回まで自動再送します(期限が来たものは毎時 30 分の Cron /api/cron/webhook-retry が送信)。5 回失敗すると 断念 になり、トップページの「Webhook 失敗件数」に含まれます。
| ステータス | 意味 |
|---|---|
| 送信待ち | 作成直後でまだ送信していない(テストや WEBHOOK_DELIVERY=queue ではここで止まり、Cron が送る) |
| 成功 | 2xx を受け取った |
| リトライ待ち | 失敗し、次回の再送時刻を待っている |
| 失敗 | 最後の試行が失敗した(次回予定なし。手動再送で再開) |
| 断念 | 5 回失敗した |
一覧・詳細・再送
- 一覧は失敗 / 断念 / リトライ待ちを上に表示し、加盟店・イベント・ステータス・期間で絞り込めます。CSV 出力あり。加盟店詳細の Webhook送信ログ タブにはその加盟店の直近の通知が表示されます。
- 詳細ではリクエスト(メソッド・URL・ヘッダー・ボディ)、最後の応答(ステータスコードと先頭 1KB)、試行履歴(回数・応答コード・所要時間・きっかけ = 自動 / Cron / 管理画面)を確認できます。
- 詳細の「対象取引」は注文番号のリンクで、取引の現在のステータスと最終更新日時、同じイベントで最後に成功した送信の日時を並べて表示します。一覧の 断念のみ チップで断念した通知だけを絞り込めます。
- 今すぐ再送(admin / developer)はリトライ予定に関係なく新しい試行として直ちに送信します。確認ダイアログに取引の現在のステータスと最後に成功した送信日時を表示し、加盟店側で二重処理されないよう注意を促します。断念した通知も再送でき、操作ログ(
webhook.resend)に記録されます。再送時はX-Timestampと署名を再計算します。
デモ用の受信エンドポイント
seed の加盟店は通知先が /api/demo/webhook-receiver になっています。クエリで応答を切り替えて動作を確認できます。相対 URL は APP_URL(未設定なら Vercel のプロダクション URL、ローカルでは http://localhost:3000)を基準に解決されます。
| クエリ | 応答 |
|---|---|
?result=ok | 200(受信内容をエコー) |
?result=error | 500(失敗 → リトライ) |
?result=timeout | 12 秒待って応答(タイムアウト → リトライ) |