常见问题
订单何时过期,以及一直收不到款会怎样
订单过期的处理方式、payment.expired 何时触发,以及过期后才到账的转账如何处理。
每个支付订单都带有 expiresAt 时间戳。如果在此之前没有匹配的转账到账,订单会被推进到 expired,并发送 payment.expired webhook。
过期是如何处理的
一个后台 worker 以较短的固定周期(约每分钟一次)扫描过期订单,因此订单会在 expiresAt 过后不久翻转为 expired,而非精确到那一秒。每次过期都在一个事务中完成:
- 把订单从
created推进到expired, - 将分配给它的地址释放回地址池,
- 入队一条
payment.expiredwebhook。
只有仍处于 created 的订单会过期。一旦订单到达 detected、confirmed 或 finalized,过期时间便不再生效。已在途的付款绝不会仅因超时而被丢弃。
过期之后才到账的付款
如果客户在订单过期后才付款,这笔转账不会让订单复活:
- 订单已不再是
created,精确匹配规则无法推进它。 - 该地址可能已被释放并被另一笔订单复用。
请像处理任何打错的转账一样,针对资金实际落地的地址自行对账或退款。使用 BYO 地址时,这些资金就在你控制的地址里。
如何选择过期窗口
- 窗口要长到足够一个真人打开钱包、复制金额并等转账确认。几分钟通常太紧,15~60 分钟是常见区间。
- 也不要设得过长,以免被放弃的订单(在单地址模式下)长时间占用地址。
- 如果在任何人付款前你已不再需要某笔订单,请取消它,而不是等它过期。取消同样会释放地址并发出
payment_order.canceled。只有仍处于created的订单可被取消。
expired 与 canceled 的区别
| 状态 | 触发条件 | 发出的事件 |
|---|---|---|
expired | expiresAt 已过且无匹配转账 | payment.expired |
canceled | 订单仍为 created 时你调用了取消接口 | payment_order.canceled |
两者都会释放订单仍持有的地址。
相关
这篇文档怎么样?
最后更新