@dodopayments/nextjs package 为您的 Next.js App Router 项目提供三个 route handlers。Checkout 返回 checkout URLs,CustomerPortal 将客户发送到 Customer Portal,Webhooks 验证 webhook events 并将其路由到您的代码。该 package 支持 Next.js 14、15 和 16。
Checkout Handler
使用 static、dynamic 和 checkout session flows 创建 checkout URLs。
Customer Portal
让客户管理其 subscriptions 和详细信息。
Webhooks
接收并处理 Dodo Payments webhook events。
安装
1
Install the Package
在项目根目录运行此命令:该 package 还要求将 Zod 3.25 或 Zod 4 作为 peer dependency。
2
Set Up Environment Variables
在项目根目录创建一个
.env 文件。在 dashboard 的 Developer → API Keys 下创建 API key,并在 Developer → Webhooks 下创建 webhook secret:DODO_PAYMENTS_RETURN_URL 是客户完成 checkout 后到达的位置。如果不传入 environment,handlers 会使用 live_mode。Route Handler 示例
所有示例均假设您使用 Next.js App Router。
- Checkout Handler
- Customer Portal Handler
- Webhook Handler
使用此 handler 将 Dodo Payments checkout 添加到您的应用。
GET handler 提供 static checkout。POST handler 提供 checkout sessions;当您设置 type: "dynamic" 时,它也可以提供 dynamic checkout。Checkout Route Handler
checkout handler 支持使用 Dodo Payments 收款的三种方式:- Static Payment Links: 可分享的 URLs,无需代码即可收款。
- Dynamic Payment Links: 使用自定义详细信息生成的 payment links。它们使用 deprecated endpoints。
- Checkout Sessions: 托管式 checkout,包含 product cart、customer details 和 customization options。这是推荐的流程。
Static Checkout (GET)
Static Checkout (GET)
支持的 Query Parameters
固定收取的金额,单位为主要货币单位,例如
12.5 表示 $12.50。仅适用于 Pay What You Want products;如果低于 product 的 minimum price,则会忽略该值。returnUrl 作为 redirect_url 添加到 link 中。Response Format
Static checkout 返回包含 checkout URL 的 JSON response。在 test mode 中,URL 使用test.checkout.dodopayments.com。Dynamic Checkout (POST)
Dynamic Checkout (POST)
Checkout Sessions (POST)
Checkout Sessions (POST)
Checkout sessions 为一次性购买和 subscriptions 创建 hosted checkout,并提供完整的 customization control。
product_cart 是唯一必填字段。如果 body 不包含 return_url,handler 会使用其 config 中的 returnUrl。有关详细信息和所有支持的 fields,请参阅 Checkout Sessions Integration Guide。使用 payment_method_id 创建的 session 不会返回 checkout URL,因此 handler 会响应 400。若要向已保存的 payment method 收费,请改用 SDK 创建 session。Response Format
Checkout sessions 返回包含 checkout URL 的 JSON response:Customer Portal Route Handler
Customer Portal route handler 会为您传入的 customer 创建 Customer Portal session,并将浏览器重定向到该 session。Query Parameters
如果缺少customer_id,handler 会返回 400;如果无法创建 portal session,则返回 500。
Webhook Route Handler
webhook route handler 会在运行您的代码前验证每个 request:- Method: 仅支持 POST requests。其他 methods 返回 405。
- Signature Verification: 使用
webhookKey,针对webhook-id、webhook-timestamp和webhook-signatureheaders 验证 raw request body。验证失败时返回 401。 - Payload Validation: 将已验证的 body 解析为 JSON,并使用 Zod 进行验证。当解析后的 payload 与 webhook schema 不匹配时返回 400。
- Error Handling:
- 401:无效 signature
- 400:无效 payload
- 500:意外的 verification errors、格式错误的 JSON,或您的 callbacks 抛出的 errors
- Event Routing: 对每个 event 调用
onPayload,然后调用该 event type 对应的 handler,并返回 200。