本教程提供了一个 Node.js/Express 应用的示例实现代码。您可以根据所使用的框架(Next.js、React、Vue 等)修改此代码,并根据应用需求自定义用户界面。
- 创建基于座位的订阅产品
- 设置额外座位的附加组件
- 生成带有自定义附加组件数量的支付链接
- 处理具有动态座位数量的结账会话
我们要构建的内容
让我们创建一个基于座位的定价模型:- 基础计划:每月 $49,最多 5 名团队成员
- 座位附加组件:每个额外座位每月 $2
- 支付链接:动态结账,带有自定义座位数量
开始之前,请确保您具备以下条件:
- Dodo Payments 帐户
- TypeScript/Node.js 的基本熟悉程度
第 1 步:创建您的座位附加组件
现在我们需要创建一个表示额外座位的附加组件。此附加组件将附加到我们的基础订阅上,并允许客户购买额外的座位。
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 步:将附加组件连接到订阅
现在我们需要将我们的座位附加组件与基础订阅关联,以便客户在结账时可以购买额外的座位。1
Attach the seat add-on

- 向下滚动到 附加组件 部分
- 点击 添加附加组件
- 从下拉菜单中选择您的座位附加组件
- 确认它出现在您的订阅配置中
2
Save subscription changes
- 审查完整订阅设置:
- 基础方案:$49/月,包含 5 个席位
- 附加组件:每个额外席位 $2/月
- 免费试用:14 天
- 点击 保存更改(Save Changes)
席位定价配置完成! 现在客户可以购买基础方案并根据需求添加额外席位。
第 4 步:生成带有自定义附加组件数量的支付链接
现在让我们创建一个 Express.js 应用程序,生成带有自定义附加组件数量的支付链接。这就是基于座位的定价的真正力量所在 - 您可以动态创建具有任意数量额外座位的结账会话。1
Set up your project
创建新的 Node.js 项目并安装所需依赖:创建一个
tsconfig.json 文件:2
Create your environment file
创建一个
.env 文件,存放您的 Dodo Payments API 密钥:3
Implement the checkout session creation
创建一个
src/server.ts 文件,并写入以下代码:4
Add a simple web interface
创建一个
public/index.html 文件,便于测试:网页界面已创建! 现在您有了一个简单的 UI,用于测试不同的席位数量。
5
Serve static files
将以下内容添加到您的
src/server.ts 中以提供 HTML 文件服务:静态文件配置完成! 访问
http://localhost:3000 即可查看演示界面。第 5 步:测试您的实现
让我们测试我们的基于座位的定价实现,以确保一切正常工作。1
Start your server
- 确保您的
.env文件中包含正确的 API 密钥 - 在代码中使用 Dodo Payments 仪表板中的实际值更新产品与附加组件 ID
- 启动服务器:
服务器应成功启动,并显示 “Server running on
http://localhost:3000”2
Test the web interface

- 在浏览器中打开
http://localhost:3000 - 您应该会看到席位定价演示界面
- 尝试不同的席位数量(0、3、10 等)
- 为每个数量点击 “生成结账链接(Generate Checkout Link)”
- 验证结账 URL 是否生成正确
3
Test a checkout session
- 生成一个包含 3 个额外席位的结账链接
- 点击该结账 URL 打开 Dodo Payments 结账页面
- 验证结账页面显示:
- 基础方案:$49/月
- 额外席位:3 × 2 美元 = $6/月
- 完成测试购买
结账页面应显示正确的定价明细,并允许您完成购买。
4
Listen for webhooks and update your DB
为了让数据库与订阅及席位更改保持同步,您需要监听来自 Dodo Payments 的 Webhook 事件。当客户完成结账、更新订阅或更改席位数量时,Webhook 会通知您的后端。请遵循官方 Dodo Payments webhook 指南,获取设置 webhook 端点和处理事件的逐步说明:
Dodo Payments Webhooks Documentation
了解如何安全地接收并处理订阅与席位管理的 Webhook 事件。
故障排除
常见问题及其解决方案:Checkout creation failing
Checkout creation failing
可能的原因:
- 产品 ID 或附加组件 ID 无效
- API 密钥权限不足
- 附加组件未正确关联到订阅
- 网络连接问题
- 确认 Dodo Payments 仪表板中存在相应的产品与附加组件 ID
- 检查附加组件是否正确附加到订阅中
- 确保 API 密钥具有创建结账会话的权限
- 通过简单的 GET 请求测试 API 连通性
恭喜!您已实现基于座位的定价
您已成功创建了一个基于座位的定价系统,使用 Dodo Payments!以下是您完成的内容:Base Subscription
创建了一个每月 $49、含 5 个席位的订阅产品
Seat Add-ons
配置了每个额外席位 $2/月的附加组件
Checkout
构建了一个可根据自定义席位数量生成结账会话的 API
Web Interface
创建了一个用于测试不同席位数量的简单网页界面
此示例仅展示了席位定价的最小实现。用于生产环境时,您应添加健全的错误处理、身份验证、数据验证、安全措施,并根据应用需求调整逻辑。