Skip to main content
QFPay 目前支援以下兩種非同步通知:
  • 付款成功:"notify_type": "payment"
  • 退款成功:"notify_type": "refund"
未來版本的通知參數可能新增欄位。建議你的接收端採用「可忽略未知欄位」的處理方式,並定期查看最新文件更新。

概述

當支付或退款成功後,QFPay 會以 HTTP POST 方式向商戶已設定的 callback URL 發送一筆 JSON 通知,用於即時更新交易結果。
即使已收到通知,也建議使用 交易查詢 API 二次驗證交易狀態,避免因網路重試或重放造成誤判。
出於安全考量,callback URL 僅支援 80 / 443 端口,且 Content-Type 固定為 application/json

非同步通知規則

  1. 僅在交易成功(付款或退款)後才會發送通知。
  2. 請透過電郵提交通知端點 URL 至 technical.support@qfpay.com,由技術支援協助設定。
  3. 商戶收到通知後必須進行簽名驗證。驗證成功後回覆:
    • HTTP Status Code:200 OK
    • Response Body:SUCCESS
  4. 若未收到預期回應,系統會依以下時間間隔重試:
    • 2 分鐘 → 10 分鐘 → 10 分鐘 → 60 分鐘 → 2 小時 → 6 小時 → 15 小時
  5. 同一組 app_code + client_key 僅能綁定 一個 通知 URL。代理商應為子商戶共用同一接收端點。
  6. HTTP 方法POST
    Content-Typeapplication/json

簽名驗證

非同步通知的簽名驗證方式與一般 API 請求不同:必須使用「原始 request body(未重排 / 未格式化的 JSON 字串)」來驗證。

驗證步驟

  1. 從 HTTP header 取得 X-QF-SIGN
  2. 取得原始 request body(JSON 字串),直接在尾端串接 client_key
  3. 對字串做 MD5 雜湊,並轉成 大寫
  4. 若雜湊結果等於 X-QF-SIGN,視為驗證成功,回覆 200 OKSUCCESS
請使用「原始 body」做驗證。若你把 JSON parse 後再 json.dumps() 重新序列化,欄位順序與空白可能不同,會導致簽名不一致。

簽名範例

實作時請以你實際收到的完整 raw body 進行計算;上例僅示意流程。

通知內容範例

JSON

回傳欄位說明

syssn 的語境容易混淆:在非同步通知中,syssn 代表「本次通知所對應的交易號」。若 notify_type=refund,它通常是退款交易號,而不是原始付款交易號。

Cancel 定義


通知來源 IP

請確保你的伺服器允許以下來源 IP 發送的 POST 請求:
  • 13.228.112.115
  • 18.138.115.47
  • 18.166.202.92