概述
Next.js 最小样板是一个已连接 Dodo Payments 的入门应用。添加 API 密钥和产品 ID 后,即可获得一个可打开结账页面的定价页面、一个用于处理支付事件的 webhook 端点,以及一个指向 Customer Portal 的链接。此样板使用带有 TypeScript、Tailwind CSS 4 和
@dodopayments/nextjs adaptor 的 Next.js 16 App Router。若要将相同的路由处理程序添加到现有应用,请参阅 Next.js Adaptor。特性
样板包含:- 快速设置:大约五分钟即可从克隆项目开始运行定价页面。
- 结账:基于
@dodopayments/nextjs构建的预配置结账流程。 - 定价页面:使用 Tailwind CSS 设置样式的深色主题定价页面。
- Webhook 处理程序:验证每个 webhook 签名并为事件运行你的代码的端点。
- Customer Portal:打开 Customer Portal 的页眉链接,客户可以在其中管理订阅。
- TypeScript:带类型的产品定义和处理程序。
- 预填充结账信息:将客户姓名和电子邮件传递给结账页面,客户无需重新输入。
前置条件
开始之前,你需要:- Node.js 20.9 或更高版本,这是 Next.js 16 的要求。
- Dodo Payments 账户,用于在控制面板中创建 API 密钥和 webhook 签名密钥。
快速开始
1
Clone the Repository
2
Install Dependencies
3
Get API Credentials
在 Dodo Payments 注册,然后从控制面板获取凭据:
- API Key: 在 Dashboard → Developer → API Keys 下创建密钥。
- Webhook Key: 在 Dashboard → Developer → Webhooks 下添加端点,然后复制其签名密钥。端点 URL 必须公开并使用 HTTPS。若要在你的计算机上接收事件,请参阅 Webhook Events。
4
Configure Environment Variables
将示例文件复制到根目录,以创建一个 将值设置为你的 Dodo Payments 凭据:路由处理程序会读取以下变量:
.env 文件:DODO_PAYMENTS_API_KEY用于验证结账和 Customer Portal 处理程序。DODO_PAYMENTS_WEBHOOK_KEY用于验证 webhook 签名。DODO_PAYMENTS_RETURN_URL是结账完成支付后将客户重定向到的位置。DODO_PAYMENTS_ENVIRONMENT的值为test_mode或live_mode。
5
Add Your Products
将 定价页面会从此文件中显示
src/lib/products.ts 中的示例产品替换为你自己的产品。将每个 product_id 设置为控制面板 Products 下某个产品的 ID:name、description、price 和 features。结账会按照 Dodo Payments 中产品设置的价格收费,因此请确保 price 与产品保持同步。6
Run the Development Server
项目结构
结账、Customer Portal 和 webhook 路由处理程序位于src/app/api/ 下:
自定义
更新产品信息
编辑src/lib/products.ts 以更改:
- 产品 ID,来自 Dodo Payments 控制面板中的 Products
- 价格
- 功能
- 描述
预填充客户数据
src/app/components/ProductCard.tsx 会在每个结账请求中发送硬编码的姓名和电子邮件。将其替换为已登录用户的信息:
更新 Customer Portal
src/app/components/Header.tsx 中的 Customer Portal 链接会打开 /api/customer-portal,并使用硬编码的客户 ID。将其替换为已登录用户的 Dodo Payments 客户 ID:
Webhook 事件
src/app/api/webhook/route.ts 中的处理程序会使用 DODO_PAYMENTS_WEBHOOK_KEY 验证每个请求,然后处理两个事件:
onSubscriptionActive在订阅变为活跃状态时运行(subscription.active)。onPaymentSucceeded在支付成功时运行(payment.succeeded)。
onSubscriptionCancelled。Next.js Adaptor 列出了所有受支持的处理程序。
Dodo Payments 无法访问 localhost。进行本地开发时,请使用 ngrok 等隧道工具公开本地服务器,并将隧道 URL 用作 webhook 端点。
部署
构建生产版本
部署到 Vercel
[DODO_PAYMENTS_RETURN_URL 设置为你的生产 URL。
更新 Webhook URL
部署后,在 Dodo Payments Dashboard 中添加生产 webhook URL,将example.com 替换为你的域名:
DODO_PAYMENTS_WEBHOOK_KEY。
故障排除
Module not found or build errors
Module not found or build errors
删除
node_modules 和 package-lock.json,然后重新安装依赖:Checkout redirect fails
Checkout redirect fails
检查以下常见原因:
- 产品 ID 在你的 Dodo Payments 控制面板中不存在。
.env中的 API 密钥或DODO_PAYMENTS_ENVIRONMENT不正确。测试模式密钥只能与test_mode配合使用。
npm run dev 的终端中查找错误。Webhooks not receiving events
Webhooks not receiving events
进行本地测试时,使用 ngrok 暴露你的服务器:在你的 Dodo dashboard 中,添加一个端点,其 URL 为 ngrok HTTPS URL 后接
/api/webhook。将该端点的签名密钥复制到 .env 文件中的 DODO_PAYMENTS_WEBHOOK_KEY。Customer portal link doesn't work
Customer portal link doesn't work
将
src/app/components/Header.tsx 中硬编码的 CUSTOMER_ID 替换为 Dodo Payments 控制面板中某个客户的 ID。在生产环境中,请改为从身份验证系统和数据库获取客户 ID。了解更多
- Dodo Payments 文档
- Checkout Sessions 文档
- Webhooks 文档
- Next.js Adaptor:
Checkout、CustomerPortal和Webhooks处理程序的选项
支持
如需样板帮助:- 在 Discord 社区中提问。
- 在 GitHub 代码库中报告问题并关注更新。
- 发送电子邮件至 支持团队。