概要
Webhookを使用すると、決済の完了、失敗、返金などのイベントをリアルタイムで受け取ることができます。 ZAFA PAYは決済ステータスが変更されると、登録されたURLにHTTP POSTリクエストを送信します。署名シークレット(Webhook Secret)は、加盟店管理画面(https://app.zafapay.com)の「加盟店設定」から確認できます。
イベントタイプ
| イベント | 説明 |
|---|---|
payment.succeeded | 決済が正常に完了 |
payment.failed | 決済が失敗 |
payment.canceled | 決済がキャンセル |
payment.refunded | 返金が完了 |
payment.chargeback | チャージバックが発生 |
ペイロード
イベントタイプ(例:
payment.succeeded)トランザクションID
決済ステータス(
succeeded, failed, canceled, refunded, chargeback)決済金額
通貨コード
決済方法(
card, depotなど)加盟店側の注文ID(決済作成時に
external_idとして指定した値)返金済み金額
トランザクション作成日時(ISO 8601形式)
Webhook送信日時(ISO 8601形式)
ペイロード例
署名検証
Webhookリクエストには署名ヘッダーが含まれます。この署名を検証することで、リクエストがZAFA PAYから送信されたことを確認できます。署名ヘッダー
| 環境 | ヘッダー名 |
|---|---|
| Sandbox | X-Zafapay-Signature-Sandbox |
| Production | X-Zafapay-Signature |
検証方法
署名はリクエストボディ(JSON文字列)をHMAC-SHA256でハッシュ化したものです。Node.js
レスポンス
Webhookを正常に受信した場合は、HTTPステータスコード2xx を返してください。
リトライ
ZAFA PAYは以下の場合にWebhookを自動的にリトライします:- HTTPステータスコード
2xx以外が返された場合 - 接続タイムアウトが発生した場合
ベストプラクティス
1
署名を必ず検証する
不正なリクエストを防ぐため、署名検証は必須です
2
冪等性を確保する
同じイベントが複数回送信される可能性があるため、
transaction_idをキーにして重複処理を防いでください3
すぐにレスポンスを返す
Webhook処理は非同期で行い、すぐに
200 を返してください。処理に時間がかかるとタイムアウトでリトライが発生します4
エラーをログに記録する
デバッグのため、受信したペイロードと処理結果をログに記録してください