跳转到主要内容

GitHub Repository

完整源代码与设置指南
查看完整的 Supabase 入门套件
一个使用 Next.js、Supabase 和 Dodo Payments 构建的最小化订阅入门套件。这个样板项目可以帮助您快速搭建一个具备身份验证、支付和 webhook 功能的订阅型 SaaS。
Dodo Payments Supabase Subscription Starter

快速设置

1. 先决条件

2. 认证与链接

Supabase 仪表板 获取您的项目引用 → 项目设置

3. 数据库设置

  1. 前往您的 Supabase 控制面板
  2. 打开 SQL 编辑器
  3. 创建一个新的查询
  4. 复制并粘贴 schema.sql 的全部内容
  5. 运行查询

4. 设置初始密钥

Supabase 会在运行时自动提供 SUPABASE_URLSUPABASE_SERVICE_ROLE_KEY
注意: 在您获取 webhook URL 后并完成部署,我们将在部署后设置 DODO_PAYMENTS_WEBHOOK_KEY

5. 部署

该函数已在 functions/webhook/index.ts 中配置完成 —— 只需部署即可:

6. 获取您的 Webhook URL

您的 Webhook URL 是:

7. 在 DodoPayments 仪表板中注册 Webhook

  1. 访问 DodoPayments 控制面板 → Developer → Webhooks
  2. 创建一个新的 webhook 端点
  3. 将您的 webhook URL 配置为该端点
  4. 启用以下订阅事件:
    • subscription.active
    • subscription.cancelled
    • subscription.renewed
  5. 复制 Signing Secret

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

它的功能

处理订阅事件并将其存储在 Supabase PostgreSQL 中:
  • subscription.active - 创建/更新客户和订阅记录
  • subscription.cancelled - 将订阅标记为已取消
  • subscription.renewed - 更新下一个账单日期

主要特性

签名验证 - 使用 dodopayments 库
幂等性 - 通过 webhook ID 防止重复处理
事件记录 - 在 webhook_events 表中保留完整审计轨迹
错误处理 - 已记录且可重试
注意: 此实现演示了如何处理三种核心订阅事件(subscription.activesubscription.cancelledsubscription.renewed)并使用最少字段。您可以根据需求轻松扩展以支持更多事件类型和字段。

配置文件

数据库架构

创建的表:
  • customers - 电子邮件、姓名、dodo_customer_id
  • subscriptions - 状态、金额、下一个账单日期,链接到客户
  • webhook_events - 带有 webhook_id 的事件日志以实现幂等性

实现代码

工作原理

Deno 驱动的边缘函数:
  1. 验证签名 - 使用 dodopayments 库进行 HMAC-SHA256 验证
  2. 检查幂等性 - 查找 webhook ID,以防止重复处理
  3. 记录事件 - 将原始 webhook 数据存储在 webhook_events 表中
  4. 处理更新 - 通过 Supabase 客户端创建或更新客户和订阅
  5. 处理错误 - 记录失败并将事件标记为可重试

测试

本地开发:
由于 webhook 不包含 JWT 令牌,必须设置 --no-verify-jwt 标志。安全性通过 webhook 签名验证提供。
查看日志:
或在 Supabase 仪表板 → Edge Functions → webhook → 日志选项卡中查看 在 DodoPayments 仪表板中配置:
  1. 转到开发者 → Webhooks
  2. 添加带有您的 Supabase URL 的端点
  3. 启用:subscription.active、subscription.cancelled、subscription.renewed

常见问题

资源

最后修改于 2026年5月22日