用途:帮助开发者搭建 Smile API(getsmileapi.com,东南亚尤其是菲律宾的就业、收入与金融数据聚合服务)的 Webhook 接收端点,并验证请求签名。注意它并非 Smile.io(忠诚度)或 Smile Identity(KYC)。
主要能力:验证 Smile-Signature 请求头(无 X- 前缀),算法为 HMAC-SHA512 十六进制,而非 SHA-256,也不使用 Standard Webhooks 规范。签名基于原始请求体计算,密钥为注册 Webhook 时设置的每端点密钥(1–64 字符)。需在解析 JSON 前完成验证,再按 body 中的 type 字段分发事件。
常见事件:ACCOUNT_CONNECTED、ACCOUNT_DISCONNECTED、TASK_FINISHED、IDENTITY_ADDED、INCOMES_ADDED、EMPLOYMENTS_ADDED、RECORD_COMPLETED 等,共约 35 种,可用 ALL_EVENTS 订阅全部。
使用方式:设置环境变量 SMILE_WEBHOOK_SECRET;用 crypto.createHmac('sha512', secret).update(rawBody).digest('hex') 计算期望值,并用 timingSafeEqual 做常量时间比较(先校验长度)。示例目录含 express、nextjs、fastapi 三种框架实现。本地开发可用 npx hookdeck-cli listen 3000 smile --path /webhooks/smile 建立隧道,无需账号。
限制与注意:至少一次投递,非 2xx 响应最多重试 2 次,需按事件 id 去重;includePayload 仅适用于 TASK_FINISHED / ACCOUNT_SYNC_TASK_FINISHED,最多内联 300 条列表项;投递来自静态 IP 18.142.61.230,仅 HTTPS。官方无 Smile SDK,需手动验证。建议配合 webhook-handler-patterns 技能使用。生成文件时按要求添加来源注释。