用途:在生产环境接收 Podium Webhook,避免伪造事件、重复副作用、通知丢失和会话事件乱序。
主要能力:对原始请求体做 HMAC-SHA256 签名校验;用时间戳窗口(默认5分钟)拒绝重放;用 Redis SET NX EX 86400 对 event_id 去重,匹配 Podium 24小时重试上限;处理异常时先持久化原始签名载荷到死信队列(DLQ)再返回5xx;批内按 occurred_at 排序,跨批用存在性检查处理因果依赖;用 hmac.compare_digest 做常量时间比较,避免时序侧信道。
使用方式:需 Python 3.10+、fastapi、uvicorn、httpx、redis,以及 Podium OAuth 应用和签名密钥。本地启动:export PODIUM_WEBHOOK_SECRET=...; export REDIS_URL=redis://localhost:6379/0; uvicorn scripts.webhook_server:app --host 0.0.0.0 --port 8080 --reload。附带 CLI:signature_verify.py 校验捕获载荷,dedup_check.py 检查 event_id 是否已处理,dlq_replay.py 排空并重放 DLQ。
限制:签名头格式需按 Podium 当前文档适配;跨批顺序无法在接收端判定,依赖 DLQ 与重放恢复;Redis 不可用时去重降级,开发环境可用内存回退。具体收费、价格与平台支持暂未提供。