跳到主要内容

🔔 Webhook 通知

設定 Webhook 以接收通知。HaloPay 會將最終交易結果通知商戶。可在 應用管理頁面 設定 Webhook URL。

當發生以下 事件 時,會向商戶設定的回呼介面發起請求:

  • ✅ 支付交易成功
  • ⏱️ 支付逾時
  • 💡 支付不足
  • ✅ 出款成功
  • ❌ 出款失敗

回呼頻率:5s、15s、30s、3m、10m、20m、30m、30m、30m、60m、3h、3h、3h、6h、6h。總計:24h3m50s

回呼內容仍然經過加密處理。詳情請參閱簽章

Webhook 通知

請求標頭

名稱必填類型說明
X-Appidh3j6k9m2n...Ystring商戶唯一憑證。在 應用管理頁面 查看。
X-Timestamp1700349280Ystring秒級時間戳(10 位)。請求有效期為 2 分鐘。
X-Signe0c6a719ebc366da...YstringhmacSHA256(body(json 字串)+timestamp+appKey)
X-EventTypePaidYstring交易狀態碼

支付 Body

{
"appid": "ad4cyr8dpfs...",
"trade_no": "202603141449020ad66d22c5787af677",
"out_trade_no": "20250101xxxxxxxxxxxxx12221c",
"amount_collected": "5",
"amount": "5",
"token_amount": "4.998045",
"chain": "Tron",
"chain_id": 3448148188,
"type": "PAYMENT",
"currency_id": 75,
"txid": "008f81782daa47709d67bc2073ffff639035cfd...",
"status": "PAID", (TO-BE-PAID/PAID/TIME-OUT)
"time": 1773471015
}
💡

即使客戶未支付全額,我們仍會傳送狀態欄位設為 TO-BE-PAID 的回呼通知,而 amount_collected 欄位將顯示已支付的代幣數量。

若超過支付時間上限,我們將傳送狀態欄位設為 TIME-OUT 的回呼,而 amount_collected 欄位將再次顯示已支付的代幣數量。

出款 Body

{
"appid": "ad4cyr8dpfs...",
"chain": "Tron",
"chain_id": 3448148188,
"contract": "TXYZopYRdj2D9XRtbG411XZZ3kM5VkAeBf",
"currency_id": 75,
"status": "PAID", (PAID/FAIL)
"time": 1773473637,
"token_amount": "1",
"trade_no": "202603141533083d1eba01c48c2a873c",
"txid": "aa23e0aebd2e4c5b82786a5e8b1f414222c7c5...",
"type": "TRANSFER"
}

QR 支付 Body

{
"appid": "1aiqfs0agr...", (預設與支付 APPID 不同。)
"trade_no": "2c8b150bf35abc59189e333c107247db",
"type": "QR_PAYMENT",
"chain": "Tron",
"chain_id": 3448148188,
"contract": "TRX",
"txid": "2cdf12e85ec73a61280daaf49c4f27686519407f...",
"currency_id": 75,
"from_address": "TSpjU4PUYzAyY88wyKEEMD7MryneC1WL...",
"to_address": "TY1RJdyJh4y1tgmPFrnSaWFhM1HwqTvC...",
"token_amount": "11",
"status": "PAID", (PAID)
"time": 1773473913
}

參數說明

欄位類型說明
appidstring商戶 APPID
trade_nostring交易 ID
out_trade_nostring商戶訂單 ID
amountstring交易金額(法定貨幣金額)
token_amountstring交易金額(代幣)
chainstring鏈名稱
chain_idint鏈 ID
typestring交易類型(「PAYMENT/TRANSFER/QR_PAYMENT」)
currency_idint全域唯一貨幣 ID TokenList
txidstring鏈上交易雜湊
statusstring交易狀態(TO-BE-PAID/PAID/TIME-OUT/FAIL)。訂單未完全支付時會觸發 TO-BE-PAID 回呼。
timeint最終鏈上時間(若失敗則傳回逾時期間)
amount_collectedstring使用者已支付的代幣數量
contractstring代幣的合約位址,主要貨幣為 ETH/TRX/BNB
from_addressstring支付錢包位址
to_addressstring接收錢包位址
💡

商戶需驗章以保證安全。處理成功後請在 HTTP 回應體中回傳 "Success"。若處理失敗,HaloPay 會重試推送,Webhook 最多重試約 15 次(回呼頻率:5s、15s、30s、3m、10m、20m、30m、30m、30m、60m、3h、3h、3h、6h、6h,總計約 24h3m50s)。

📌 範例

對商戶 Webhook 伺服器的請求

POST /webhook/callback HTTP/1.1
Host: merchant.example.com
Content-Type: application/json
X-Appid: ad4cyr8dpfs...
X-Timestamp: 1773471015
X-Sign: e0c6a719ebc366da...
X-EventType: Paid

{
"appid": "ad4cyr8dpfs...",
"trade_no": "202603141449020ad66d22c5787af677",
"out_trade_no": "20250101xxxxxxxxxxxxx12221c",
"amount_collected": "5",
"amount": "5",
"token_amount": "4.998045",
"chain": "Tron",
"chain_id": 3448148188,
"type": "PAYMENT",
"currency_id": 75,
"txid": "008f81782daa47709d67bc2073ffff639035cfd...",
"status": "PAID",
"time": 1773471015
}

商戶 Webhook 伺服器的回應

HTTP/1.1 200 OK
Content-Type: text/plain

Success