Skip to content

Webhook 通知 — API Checkout

當 Checkout 訂單狀態發生變更時,PSC 向商戶的 callbackUrl 發送 POST 請求。

Webhook 請求頭

請求頭類型說明示例
X-TimestampLong通知時間戳(毫秒)1640000000000
X-SignatureString請求簽名(Base64編碼)。算法:Base64(HMAC-SHA256(timestamp + "\n" + "POST" + "\n" + path + "\n" + Base64(SHA256(requestBody)), apiSecret))base64-hmac-sha256

簽名驗證

  1. 從請求頭中獲取 X-TimestampX-Signature
  2. 讀取完整的原始請求體字符串(不能反序列化再序列化)
  3. 計算:
    • bodySha256Base64 = Base64(SHA256(requestBody))
    • signContent = timestamp + "\n" + "POST" + "\n" + path + "\n" + bodySha256Base64
    • expectedSignature = Base64(HMAC-SHA256(signContent, apiSecret))
  4. expectedSignatureX-Signature 對比
  5. 驗證時間戳在 5 分鐘內有效,防止重放攻擊

Webhook Body 字段

字段類型說明示例
acquiringOrderIdString平台訂單號ORD_20240101_1234567890ABCDEF
paymentOrderIdString支付訂單號PAY_20240101_1234567890ABCDEF
merchantIdString商戶號MCH_20240101_ABC123
merchantOrderIdString商戶訂單號ORDER_2024010112345678
statusString訂單狀態:PROCESSING / SUCCEEDED / FAILED / CLOSEDSUCCEEDED
finalStatusBoolean是否為終態true
orderAmountObject訂單金額{"value": "100.50", "currency": "USDC"}
cryptoPaymentAmountObject應付金額{"value": "101.00", "currency": "USDC"}
cryptoPaidAmountObject實際支付金額{"value": "101.00", "currency": "USDC"}
depositAddressString收款地址TYdRLmP9kN4oY3hZ8xT6wQ2vS5uW7aV1b
networkString區塊鏈網絡代碼tron
networkDisplayNameString網絡展示名稱TRON Network
cryptoPaymentDetailObject鏈上交易詳情(結構同查詢訂單)-
paymentMethodTypeString支付方式類型ON_CHAIN_TRANSFER
paymentMethodValueString支付方式值(鏈上支付為 null)null
callbackUrlString商戶回調地址https://api.merchant.com/webhooks/payment

響應要求

商戶端必須在 5 秒內返回 HTTP 200 及:

json
{
  "code": "00000"
}

非 200 響應或超時將觸發重試。

重試策略

重試次數距上次失敗的間隔
11 分鐘
25 分鐘
315 分鐘
430 分鐘
51 小時
62 小時
74 小時
88 小時

所有重試耗盡後,請使用 查詢 Checkout 訂單 API 手動查詢訂單狀態。

Webhook 示例

json
{
  "acquiringOrderId": "ORD_20240101_1234567890ABCDEF",
  "paymentOrderId": "PAY_20240101_1234567890ABCDEF",
  "merchantId": "MCH_20240101_ABC123",
  "merchantOrderId": "ORDER_2024010112345678",
  "status": "SUCCEEDED",
  "finalStatus": true,
  "orderAmount": {
    "value": "100.50",
    "currency": "USDC"
  },
  "cryptoPaymentAmount": {
    "value": "101.00",
    "currency": "USDC"
  },
  "cryptoPaidAmount": {
    "value": "101.00",
    "currency": "USDC"
  },
  "depositAddress": "TYdRLmP9kN4oY3hZ8xT6wQ2vS5uW7aV1b",
  "network": "tron",
  "networkDisplayName": "TRON Network",
  "cryptoPaymentDetail": {
    "network": "tron",
    "cryptoCurrency": "USDC",
    "transactionHash": "0x1234567890abcdef1234567890abcdef",
    "fromAddress": "TXdQKjYz8f9vN3kYh2xL6mP8sR5wT7uV2a",
    "toAddress": "TYdRLmP9kN4oY3hZ8xT6wQ2vS5uW7aV1b",
    "amount": "101.00",
    "confirmations": 21,
    "requiredConfirmations": 21
  },
  "paymentMethodType": "ON_CHAIN_TRANSFER",
  "paymentMethodValue": null,
  "callbackUrl": "https://api.merchant.com/webhooks/payment"
}

相關文檔

Released under the MIT License.