Skip to content

结果通知 ​

创建收款订单、申请退款、申请出款时分别传入 callback_url。未填写或为空字符串时不通知;各类订单独立使用本次请求的地址。

触发事件 ​

event触发条件data
PAYMENT.SUCCESS收款成功收款订单数据
REFUND.SUCCESS退款成功退款订单数据
REFUND.FAILED退款失败退款订单数据,包含失败原因
PAYOUT.SUCCESS出款成功出款订单数据
PAYOUT.FAILED出款失败出款订单数据,包含失败原因

请求 ​

POST 至订单回调地址。地址须使用公网 HTTPS,证书有效;不跟随重定向。

请求头说明
Content-Typeapplication/json; charset=utf-8
X-App-Id商户 APPID,用于选择解密密钥

请求体仅包含加密信息:

json
{
  "algorithm": "AEAD_AES_256_GCM",
  "nonce": "Base64编码的12字节随机数",
  "ciphertext": "Base64编码的密文及认证标签"
}

解密 ​

参数规则
算法AES-256-GCM
Key当前商户密钥的 32 字节 UTF-8 值,不做 MD5、不做十六进制解码
Noncenonce 经标准 Base64 解码,长度 12 字节
AAD固定字符串 TGPay-Merchant-Notify-v1 的 UTF-8 字节
Ciphertext / Tagciphertext 经标准 Base64 解码;最后 16 字节为认证标签,其余为密文

认证标签验证通过后,将明文按 UTF-8 JSON 解析。核对 data.app_id 与请求头一致,金额使用十进制字符串处理。

json
{
  "notification_id": "371000000000000001",
  "event": "REFUND.SUCCESS",
  "create_time": "2026-10-22T00:00:00Z",
  "data": {
    "callback_url": "https://merchant.example.com/notify/refund",
    "refund_id": "202610220000000043",
    "order_id": "202610220000000042",
    "app_id": "1234567890",
    "third_order_no": "ORDER202610220001",
    "third_refund_no": "REFUND202610220001",
    "currency": "USDT",
    "refund_amount": "3.33",
    "fee_refund_amount": "0.20",
    "merchant_debit_amount": "3.13",
    "status": "SUCCESS",
    "failure_reason": "",
    "create_time": "2026-10-22T00:00:00Z",
    "success_time": "2026-10-22T00:00:01Z",
    "update_time": "2026-10-22T00:00:01Z"
  }
}

notification_id 为通知唯一标识;create_time 为通知创建时间。data 字段与对应查询接口的 data 一致,为首次生成通知时的快照。

下载 Node.js 解密示例:

js
import { decryptNotification } from './notification.mjs'
const content = decryptNotification(requestBody, merchantSecret, appId)
// 以 content.notification_id 去重,完成持久化或事务提交后再确认接收。

接收确认 ​

在 10 秒内返回 HTTP 200 和以下 JSON:

json
{"code":"SUCCESS"}

仅 HTTP 200 不代表成功;空响应、code=0、其他状态码、无效 JSON、超时或响应超过 4096 字节均视为失败。确认前须完成可靠接收;重复通知也应返回上述成功确认。

重试与幂等 ​

  • 首次立即通知,失败后间隔 60 秒重试,包含首次共 10 次,随后停止自动重试。
  • 后台手动重试开启新一轮,仍最多 10 次;通知 ID 和业务内容不变。
  • 每次通知使用新的随机数和当前商户密钥加密。密钥刷新后须同步更新接收端。
  • 通知可能重复,请以 notification_id 建立唯一约束,防止重复记账。不得依赖通知到达顺序;需要最新状态时调用查询接口。