真正到达的WEBHOOK: HMAC、重试和幂等性

每个支付webhook集成都搞错的三件事。Baynoy提供的合同及其原因。

Developers·2026-04-01·6 分钟阅读
真正到达的webhook: HMAC、重试和幂等性

每个支付webhook都需要三个保证: 真实性(请求真的来自我们)、至少一次交付(没有事件被默默丢失)和幂等性(重新交付不会双重计费您的数据库)。

真实性: 每个Baynoy webhook都附带X-Baynoy-Signature标头 — 使用您端点的密钥sha256(timestamp + '.' + body)。如果时间戳超过5分钟(重放防御)或签名在常量时间比较中不匹配则拒绝。我们遵循Stripe使用的确切格式,因此现有的Stripe验证中间件无需修改即可使用。

至少一次: 我们在1m、5m、30m、2h、12h、24h以指数退避重试 — 上限六次尝试。每次尝试都会向baynoy_webhook_deliveries写入一行响应状态。仪表板中的replay-from-UI按钮触发相同的交付管道; 没有特殊路径。

幂等性: 每个事件都携带event.id(UUIDv7 — 可排序、单调递增)。首次接收时持久化,并在数据库级别使用唯一约束拒绝重复。我们会重新交付。约束是您的安全网。

三行中间件,您就拥有了一个能够在6小时停机中存活而不丢失单一支付通知的webhook处理程序。

上线时通知我?请在下方订阅。