ヘッダー
Content-Type: application/json
X-Signature: v1=3f0c9c5d8f2b1a7e6d4c2b1a0f9e8d7c6b5a4f3e2d1c0b9a8f7e6d5c4b3a2f1e
X-Timestamp: 1756697696
Wirepay-Signature: t=1756697696,v1=3f0c9c5d8f2b1a7e6d4c2b1a0f9e8d7c6b5a4f3e2d1c0b9a8f7e6d5c4b3a2f1e
User-Agent: WirePay-Notify/1.0
ボディ
{
"payment_id": "pay_01J9X4M8K2Q7Z3T6",
"event": "payment.completed",
"merchant_id": "MER-00004",
"amount": 4980,
"currency": "JPY",
"paid_at": "2026-09-01T12:34:56+09:00",
"status": "captured",
"payment_method": "credit",
"user_id": "user_10293",
"product_id": "SKU-2026-0042"
}署名の検証
X-Signature ヘッダは v1=<HMAC-SHA256(鍵, "<X-Timestamp>.<ペイロード>")> の 16 進表記です。鍵は加盟店の署名シークレット(通知と同じ環境の最新の有効なもの)です。署名シークレットが無い環境への通知は送信されません。ペイロードは POST ならボディ、GET ならクエリ文字列(? の後ろ)です。受信側は同じ計算で v1 を検証し、X-Timestamp が 5 分以上古い場合は拒否してください。互換のため Wirepay-Signature(t=<秒>,v1=<同じ値>)も送ります。
2xx 以外の応答または 10 秒以内に応答が無い場合、1 分 → 5 分 → 30 分 → 2 時間 → 24 時間の間隔で最大 5 回まで再送します。同じ payment_id と event の通知は冪等に処理してください。