概览

paygate 是什么,以及跳过就会让你吃亏的四件事。

paygate 通过 HTTP API 和 Webhook 收取 USDT 付款。你的客户在托管页面上付款;你不用写任何 web3 代码,不用持有私钥,也根本接触不到钱包库。

下面的内容适用于每一种集成,无论你收取的是什么费用。

基本流程

  1. 你创建一笔付款,并为每条链拿到一个地址和一个精确金额
  2. 你把客户引导到 checkout_url——或者自行渲染付款路由。
  3. 系统会监控链上交易。随着转账到账并得到确认,付款会依次经历 detectedconfirmingpaid
  4. 每一步都会通过 Webhook 通知你。

集成之前需要了解的四件事

1. paid 并不是最终状态

深度超过确认窗口的链重组,会把一笔已支付的付款变为 reversed,并发出 payment.reversed。如果你在收到 payment.paid 时就发货,那就是在知情的前提下承担这一风险——而且你可以提前演练:

curl -X POST https://api.paygatehq.com/v1/test/payments/{id}/reorg \
  -H "Authorization: Bearer sk_test_..." \
  -H "Idempotency-Key: $(uuidgen)" -d '{}'

如果你无法承受付款被撤销的损失,请改为等待 settled

2. Webhook 至少送达一次

每个事件都带有一个稳定的 id。请据此去重。如果处理程序不是幂等的,那么在你返回的 200 第一次在回传途中丢失、投递随之被重试时,它就会给账户重复入账。

3. 金额同时以整数和字符串两种形式给出

amount 以微单位表示(6 位小数)。amount_decimal 是同一个值的定点小数文本形式。

在 JSON 解析器会产生浮点数的语言中,请使用字符串——JavaScript 就是这样,这也是 25000000 / 1e6 不一定等于 25 的原因。参见金额

4. USDT 在不同链上的小数位数不同

Tron 上是 6 位,BSC 上是 18 位。API 始终使用微单位,所以你完全不必操心这一点;链上原始金额会按付款路由公布,供需要关心它的钱包使用。

下一步