Developers·2026-04-01·6 分钟阅读
每个支付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处理程序。