1. 支付网关
TrustPay
zh
  • en
  • zh
  • 接入说明
  • 支付网关
    • 支付风控接口 - 商户接入指南
    • 枚举类型说明
    • 支付回调说明
    • C21 支持区域
      • TrustPay API 与 Checkout 支持的国家和 US/CA 州省
    • 卡直付
      POST
    • 收银台
      POST
    • 支付回调通知
      POST
    • 余额查询
      POST
    • 订单查询
      POST
    • 订单退款
      POST
    • 费率查询
      POST
  • 信用卡开卡
    • 查询可用卡类型
      POST
    • 开通虚拟卡
      POST
    • 开卡/充值回调通知
      POST
    • 获取虚拟卡详情
      POST
    • 虚拟卡充值
      POST
    • 订单列表查询
      POST
    • 虚拟卡列表查询
      POST
    • 卡片列表
      POST
    • 流水查询
      POST
    • 费率查询
      POST
  • 实体卡
    • 创建持卡人
      POST
    • 持卡人列表
      POST
    • 绑定持卡人
      POST
    • 持卡人绑定列表
      POST
    • 查询实体卡余额
      POST
    • 查询交易记录
      POST
    • 查询账户
      POST
    • 实体卡充值
      POST
  • Schemas
    • VCardDetail
    • VOrderDetail
  1. 支付网关

支付回调说明

回调请求#

请求方式#

Method: POST
Content-Type: application/json
URL: 商户在创建订单时配置的 notify_url

请求头#

Content-Type: application/json

请求体格式#

回调请求体为 JSON 格式,包含订单信息和签名字段。

回调数据结构#

字段说明#

通用字段#

字段名类型必填说明
typeint64是订单类型:0=代收(Payin), 1=代付(Payout)
merchant_idint64是商户ID
order_nostring是商户订单号
statusint64是订单状态(见状态值说明)
reasonstring是原因说明(英文)
pay_timestring否支付时间
signstring是签名(MD5,小写十六进制)

金额字段#

所有金额字段均为数字类型(decimal.Decimal),在 JSON 序列化时输出为数字,保留两位小数。
字段名类型必填说明
order_amountdecimal.Decimal是订单金额
paid_amountdecimal.Decimal否实际支付金额
balance_amountdecimal.Decimal否结算金额(商户实际到账金额)
refund_amountdecimal.Decimal否退款金额
feedecimal.Decimal否手续费

退款字段#

字段名类型必填说明
merchant_refund_nostring[]否此 payin 订单关联的全部商户退款单号,来源于 refunds 表

状态值说明#

详情请看: 枚举类型说明

金额字段响应规则#

根据订单状态和支付类型,系统会在不同场景下响应不同的金额字段:

1. 失败/超时状态 (status = 3 或 4)#

✅ order_amount: 订单金额
❌ 其他金额字段不包含

2. 代收退款中状态 (type = 0, status = 9)#

✅ order_amount: 订单金额
✅ merchant_refund_no: 商户退款单号数组
❌ paid_amount、balance_amount、fee、pay_time 不包含

3. 代收退款状态 (type = 0, status = 7 或 8)#

✅ order_amount: 订单金额
✅ refund_amount: 退款金额
✅ merchant_refund_no: 商户退款单号数组
❌ paid_amount、balance_amount、fee、pay_time 不包含

4. 代收成功状态 (type = 0, status = 5)#

✅ order_amount: 订单金额
✅ paid_amount: 实际支付金额
✅ balance_amount: 结算金额 = paid_amount - fee
✅ fee: 手续费
✅ pay_time: 支付时间

5. 代付成功状态 (type = 1, status = 2)#

✅ order_amount: 订单金额
✅ paid_amount: 实际支付金额
✅ balance_amount: 结算金额 = paid_amount + fee
✅ fee: 手续费
✅ pay_time: 支付时间

签名规则#

1.
排除 sign 字段:计算签名时不包含 sign 字段本身
2.
过滤空值:排除值为空(null、空字符串)的字段
3.
按键名排序:将所有字段按键名进行字典序排序
4.
构建查询字符串:格式为 key1=value1&key2=value2
5.
添加密钥:在查询字符串后追加 &secret=YOUR_SECRET_KEY
6.
计算 MD5:对完整字符串计算 MD5 哈希值,输出小写十六进制
数组字段(如 merchant_refund_no)按 JSON 字符串参与签名,例如 ["refund_1","refund_2"]。

签名计算步骤示例#

假设有以下回调数据:
{
  "type": 0,
  "merchant_id": 1001,
  "order_no": "ORDER_123456",
  "order_amount": 100.50,
  "paid_amount": 100.50,
  "balance_amount": 98.50,
  "fee": 2.00,
  "status": 5,
  "reason": "Payment successful"
}
Secret Key: test_secret_key_12345_abcdefghijklmnop
步骤 1: 排除 sign 字段(本例中没有)
步骤 2: 过滤空值(本例中所有字段都有值)
步骤 3: 按键名排序
balance_amount=98.5
fee=2
merchant_id=1001
order_amount=100.5
order_no=ORDER_123456
paid_amount=100.5
reason=Payment successful
status=5
type=0
步骤 4: 构建查询字符串
balance_amount=98.5&fee=2&merchant_id=1001&order_amount=100.5&order_no=ORDER_123456&paid_amount=100.5&reason=Payment successful&status=5&type=0
步骤 5: 添加密钥
balance_amount=98.5&fee=2&merchant_id=1001&order_amount=100.5&order_no=ORDER_123456&paid_amount=100.5&reason=Payment successful&status=5&type=0&secret=test_secret_key_12345_abcdefghijklmnop
步骤 6: 计算 MD5
MD5("balance_amount=98.5&fee=2&merchant_id=1001&order_amount=100.5&order_no=ORDER_123456&paid_amount=100.5&reason=Payment successful&status=5&type=0&secret=test_secret_key_12345_abcdefghijklmnop")
= "29fa2ad03349c534baafd36094e23c7f"

签名计算示例代码#

Go 语言#

FAQ#

当签名计算错误时,可以确认金额字段序列化是否省略了末尾的0
Modified at 2026-05-26 16:16:25
Previous
枚举类型说明
Next
TrustPay API 与 Checkout 支持的国家和 US/CA 州省
Built with