用途:帮助开发者在服务端接收并验证 Zero Hash 发来的 Webhook,适用于搭建处理器、调试 x-zh-hook-signature 验签失败,以及处理交易与支付状态变更事件。
主要能力:Zero Hash 不提供 Webhook SDK,需手动验签。推荐方案对原始请求体与时间戳拼接后做 HMAC-SHA256,以十六进制字符串放在 x-zh-hook-signature 中,时间戳在 x-zh-hook-timestamp。应先拒绝超出 ±5 分钟窗口的请求,再用恒定时间比较签名。时间戳单位未文档化(约 10 位为秒、13 位为毫秒),需先归一化。旧方案使用 x-zh-hook-signature-256,仅对 payload 验签、无时间戳;另支持 RSA-SHA256 变体(x-zh-hook-rsa-signature / x-zh-hook-rsa-signature-256,用 Zero Hash 公钥验证)。
使用方式:事件类型在请求头 x-zh-hook-payload-type 中,常见值有 trade_status_changed、payment_status_changed。以 header 值为准分发,并记录实际收到的值。需要配置环境变量 ZEROHASH_WEBHOOK_SECRET。本地开发可用 npx hookdeck-cli listen 3000 zerohash --path /webhooks/zerohash。示例处理器见 examples/express、examples/nextjs、examples/fastapi。
限制:订阅非自助,需 Zero Hash 代表配置目标 URL 并提供 HMAC 共享密钥或 RSA 公钥。事件命名在官方文档中不一致,点号形式如 trade.status_changed / account_balance.changed 属未确认写法,建议先与 Zero Hash 代表确认。x-zh-hook-notification-id 未确认,缺失时应回退到 body 字段或 payload 哈希做幂等。建议同时安装 webhook-handler-patterns 技能处理重试与幂等。