StableOps
常见问题

订单何时过期,以及一直收不到款会怎样

订单过期的处理方式、payment.expired 何时触发,以及过期后才到账的转账如何处理。

每个支付订单都带有 expiresAt 时间戳。如果在此之前没有匹配的转账到账,订单会被推进到 expired,并发送 payment.expired webhook。

过期是如何处理的

一个后台 worker 以较短的固定周期(约每分钟一次)扫描过期订单,因此订单会在 expiresAt 过后不久翻转为 expired,而非精确到那一秒。每次过期都在一个事务中完成:

  1. 把订单从 created 推进到 expired
  2. 将分配给它的地址释放回地址池,
  3. 入队一条 payment.expired webhook。

只有仍处于 created 的订单会过期。一旦订单到达 detectedconfirmedfinalized,过期时间便不再生效。已在途的付款绝不会仅因超时而被丢弃。

过期之后才到账的付款

如果客户在订单过期后才付款,这笔转账不会让订单复活:

  • 订单已不再是 created,精确匹配规则无法推进它。
  • 该地址可能已被释放并被另一笔订单复用

请像处理任何打错的转账一样,针对资金实际落地的地址自行对账或退款。使用 BYO 地址时,这些资金就在你控制的地址里。

如何选择过期窗口

  • 窗口要长到足够一个真人打开钱包、复制金额并等转账确认。几分钟通常太紧,15~60 分钟是常见区间。
  • 也不要设得过长,以免被放弃的订单(在单地址模式下)长时间占用地址。
  • 如果在任何人付款前你已不再需要某笔订单,请取消它,而不是等它过期。取消同样会释放地址并发出 payment_order.canceled。只有仍处于 created 的订单可被取消。

expired 与 canceled 的区别

状态触发条件发出的事件
expiredexpiresAt 已过且无匹配转账payment.expired
canceled订单仍为 created 时你调用了取消接口payment_order.canceled

两者都会释放订单仍持有的地址。

相关

这篇文档怎么样?

最后更新

本页内容