跳到正文

API

本页内容

投递与重试

按约 16 小时内 11 次投递尝试设计,对重复事件去重,检查失败并在恢复后重放。

如果你的端点返回非 2xx 状态或超过 10 秒超时,Paymos 按指数退避(x2)重试。最多 11 次尝试(1 次首发 + 10 次重试),横跨约 16 小时。

退避时间表

尝试 距上次延迟 累计延迟
1 立即 0
2 1 分钟 1 分钟
3 2 分钟 3 分钟
4 4 分钟 7 分钟
5 8 分钟 15 分钟
6 16 分钟 31 分钟
7 32 分钟 约 1 小时
8 1 小时 约 2 小时
9 2 小时 约 4 小时
10 4 小时 约 8 小时
11 8 小时 约 16 小时

11 次尝试全部结束后,事件标记为失败。失败事件可从控制台重放——重放会重置尝试计数并重新入队投递。

幂等

投递为 at-least-once。重试期间出现重复投递是正常的——你的处理器必须幂等。每次投递都在 X-Webhook-Id 请求头(以及 body 的 event_id)中携带同一个稳定 ID,重试和重放期间不变——不解析 body 即可按它去重。持久化已处理的 ID,把重复当作 200 OK 空操作。

什么算投递成功

  • 10 秒内返回 HTTP 2xx → 投递成功
  • HTTP 4xx5xx → 计为失败,将重试
  • 连接被拒、DNS 失败、TLS 错误 → 计为失败,将重试
  • 超过 10 秒才响应 → 计为失败,将重试(你的端点可能仍会处理这个重复事件)

事件在你侧持久化后立刻返回 2xx。把昂贵处理推迟到后台队列,让 webhook 处理器保持在超时以内。