本教程使用 Node.js 和 Express。你可以根据所使用的框架(Next.js、React、Vue 等)调整代码,并自定义 UI 以匹配你的应用程序。
- 创建基于座位的订阅产品
- 设置额外座位的附加组件
- 生成带有自定义附加组件数量的支付链接
- 处理具有动态座位数量的结账会话
我们要构建的内容
让我们创建一个基于座位的定价模型:- 基础套餐:每月 $49,最多包含 5 名团队成员
- 席位 Add-on:每增加一个席位,每月 $2
- Payment Links:支持自定义席位数量的动态 checkout
开始之前,请确保您具备以下条件:
- Dodo Payments 帐户
- TypeScript/Node.js 的基本熟悉程度
第 1 步:创建您的座位附加组件
创建一个表示额外席位的 add-on。此 add-on 将附加到基础订阅,允许客户购买额外席位。
1
Navigate to Add-Ons
- 在 Dodo Payments 仪表板中,保持在 产品(Products) 部分
- 点击 附加组件(Add-Ons) 选项卡
- 点击 创建附加组件(Create Add-On)
2
Enter add-on details
为我们的席位附加组件填写以下内容:附加组件名称:
Additional Team Seat描述:Add extra team members to your workspace with full access to all features价格:输入 → 2.00货币:必须与您的基础订阅货币匹配税务类别:选择适合您产品的类别。3
Save your add-on
- 检查所有设置:
- 名称:Additional Team Seat
- 价格:每月 $2.00
- 点击 Create Add-On
附加组件已创建! 现在您可以将席位附加组件附加到订阅中。
第 2 步:创建您的基础订阅产品
创建一个包含 5 名团队成员的基础订阅产品。这将作为基于席位的定价模型的基础。
1
Navigate to Products
- 登录您的 Dodo Payments 仪表板
- 在左侧边栏中点击 产品(Products)
- 点击 创建产品(Create Product) 按钮
- 选择 订阅(Subscription) 作为产品类型
2
Fill in the subscription details
接下来我们为基础方案输入具体信息:产品名称:
Motion描述:Where your team's documentation lives.定期价格:输入 → 49.00计费周期:选择 → Monthly货币:选择您偏好的货币(例如:USD)第 3 步:将附加组件连接到订阅
将席位 add-on 关联到基础订阅,以便客户在 checkout 期间购买额外席位。1
Attach the seat add-on

- 向下滚动到 附加组件 部分
- 点击 添加附加组件
- 从下拉菜单中选择您的座位附加组件
- 确认它出现在您的订阅配置中
2
Save subscription changes
- 查看完整的订阅设置:
- 基础方案:每月 $49,包含 5 个席位
- 附加项:每增加一个席位,每月 $2
- 点击 保存更改
基于席位的定价已配置完成! 客户现在可以购买你的基础套餐,并按需添加额外席位。
第 4 步:生成带有自定义 Add-on 数量的 Payment Links
创建一个能够生成带有自定义 add-on 数量的 payment links 的 Express.js 应用。这样你就可以动态创建包含任意数量额外席位的 checkout sessions。1
Set up your project
创建一个新的 Node.js 项目并安装所需的依赖:创建一个
tsconfig.json 文件:2
Create your environment file
创建一个包含 Dodo Payments API key 的
.env 文件:3
Implement the checkout session creation
创建一个包含以下代码的
src/server.ts 文件:4
Add a simple web interface
创建一个
public/index.html 文件,以便进行简单测试:Web 界面已创建! 现在你可以使用简单的 UI 测试不同的席位数量。
5
Serve static files
将以下内容添加到你的
src/server.ts,以提供 HTML 文件:静态文件已配置! 访问
http://localhost:3000 查看演示界面。第 5 步:测试实现
让我们测试基于席位的定价实现,确保一切正常运行。1
Start your server
- 确保你的
.env文件包含正确的 API key - 在代码中将产品 ID 和 add-on ID 更新为 Dodo Payments 控制面板中的实际值
- 启动服务器:
你的服务器应成功启动,并显示 “Server is running on port 3000”
2
Test the web interface

- 打开浏览器并访问
http://localhost:3000 - 你应该会看到基于席位的定价演示界面
- 尝试不同的席位数量(0、3、10 等)
- 针对每个数量点击 “Generate Checkout Link”
- 验证 checkout URLs 是否正确生成
3
Test a checkout session
- 生成一个包含 3 个额外席位的 checkout link
- 点击 checkout URL,打开 Dodo Payments checkout
- 验证 checkout 显示:
- 基础套餐:每月 $49
- 额外席位:3 × 2 dollars = 每月 $6
- 完成测试购买
checkout 应显示正确的价格明细,并允许你完成购买。
4
Listen for webhooks and update your database
通过监听来自 Dodo Payments 的 webhook events,使数据库与订阅和席位变更保持同步。当客户完成 checkout、更新订阅或更改席位数量时,webhooks 会通知你的后端。按照官方 Dodo Payments webhooks 指南中的分步说明设置 webhook endpoints 并处理 events:
Dodo Payments Webhooks Documentation
了解如何安全地接收和处理用于订阅与席位管理的 webhook events。
故障排除
常见问题及其解决方案:Checkout creation failing
Checkout creation failing
可能原因:
- 产品 ID 或 add-on ID 无效
- API key 没有足够的权限
- Add-on 未正确关联到订阅
- 网络连接问题
- 验证 Dodo Payments 控制面板中是否存在产品 ID 和 add-on ID
- 检查 add-on 是否已正确附加到订阅
- 确保 API key 具有创建 checkout session 的权限
- 使用简单的 GET request 测试 API connectivity
恭喜!你已实现基于席位的定价
你已成功使用 Dodo Payments 创建基于席位的定价系统。以下是你完成的内容:Base Subscription
创建了一个每月 $49、包含 5 个席位的订阅产品
Seat Add-ons
配置了额外席位 add-ons,每个席位每月收费 $2
Checkout
构建了一个能够使用自定义席位数量生成 checkout sessions 的 API
Web Interface
创建了一个用于测试不同席位数量的简单 Web 界面
此示例演示了基于席位定价的最小实现。用于生产环境时,请添加错误处理、身份验证、数据验证和安全措施,并根据应用程序的需求调整逻辑。