Skip to main content

GitHub Repository

完整的源代码与设置指南

快速设置

1. 前置条件

你需要:

2. 安装依赖

3. 数据库设置

  1. 注册 Neon 并创建一个项目。
  2. 打开 SQL Editor。
  3. 复制 schema.sql 的全部内容并运行。
  4. 从 Connection Details 中复制你的连接字符串。

4. 设置初始环境变量

部署后,在获得 webhook URL 后,你将设置 DODO_PAYMENTS_WEBHOOK_KEY。

5. 部署

6. 获取您的 Webhook URL

您的 Webhook URL 是:

7. 在 DodoPayments 仪表板中注册 Webhook

  1. 前往 Dodo Payments 控制台中的 Developer → Webhooks。
  2. 点击 Add endpoint。
  3. 输入你的 webhook URL。
  4. 选择以下事件:subscription.active、subscription.cancelled、subscription.renewed。
  5. 点击 Create endpoint 并复制 signing secret。

8. 设置 Webhook 密钥并重新部署

它的功能

webhook handler 会处理订阅事件并将其存储在 PostgreSQL 中:
  • subscription.active — 创建或更新客户和订阅记录
  • subscription.cancelled — 将订阅标记为已取消
  • subscription.renewed — 更新下一次计费日期

主要特性

  • 签名验证 — 使用 Dodo Payments SDK 验证 webhook 的真实性
  • 幂等性 — 使用 webhook-id header 防止重复处理
  • 事件日志记录 — 将所有事件存储在 webhook_events 表中,以便进行审计追踪
  • 错误处理 — 记录失败并标记事件以便重试
此示例使用最少的字段处理三种核心订阅事件。你可以根据需要扩展它,以支持其他事件类型和字段。

配置文件

数据库架构

已创建的表:
  • customers — 电子邮件、姓名和 Dodo Payments customer ID
  • subscriptions — 状态、金额、下一次计费日期,以及关联的客户
  • webhook_events — 包含 webhook ID 的事件日志,用于实现幂等性

实现代码

工作原理

webhook handler 会执行以下操作:
  1. 禁用 body 解析 — 以便访问用于签名验证的原始 body
  2. 验证签名 — 使用 Dodo Payments SDK 通过 HMAC-SHA256 验证请求
  3. 检查重复事件 — 使用 webhook-id header,防止重复处理同一事件
  4. 记录事件 — 将原始 webhook 存储在 webhook_events 表中,以便进行审计追踪
  5. 处理事件 — 在 Neon 中创建或更新客户和订阅
  6. 处理错误 — 记录失败,并将事件标记为未处理,以便重试

测试

本地开发:
在 Vercel 控制台中查看日志:
  1. 选择你的项目。
  2. 前往 Deployments → 最新部署。
  3. 点击 Functions → Logs。
在 Dodo Payments 控制台中配置:
  1. 前往 Developer → Webhooks。
  2. 使用你的 Vercel Functions URL 添加 endpoint。
  3. 选择 subscription.active、subscription.cancelled 和 subscription.renewed。

常见问题

资源

最后修改于 2026年9月26日