@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
string
必填
Product identifier,例如
?productId=pdt_123。integer
默认值:"1"
Product 的数量。
string
Customer 的全名。如果提供了
firstName 或 lastName,则会忽略此项。string
Customer 的名字。
string
Customer 的姓氏。
string
Customer 的 email address。
string
Customer 的国家,使用 ISO 3166-1 alpha-2 code 表示。
string
Customer 的地址行。
string
Customer 所在的城市。
string
Customer 所在的州或省。
string
Customer 的 ZIP 或 postal code。
boolean
设置为
true 可禁用 full name 字段。boolean
设置为
true 可禁用 first name 字段。boolean
设置为
true 可禁用 last name 字段。boolean
设置为
true 可禁用 email 字段。boolean
设置为
true 可禁用 country 字段。boolean
设置为
true 可禁用 address line 字段。boolean
设置为
true 可禁用 city 字段。boolean
设置为
true 可禁用 state 字段。boolean
设置为
true 可禁用 ZIP code 字段。string
Payment currency,例如
USD。boolean
默认值:"true"
显示或隐藏 currency selector。
number
固定收取的金额,单位为主要货币单位,例如
12.5 表示 $12.50。仅适用于 Pay What You Want products;如果低于 product 的 minimum price,则会忽略该值。boolean
默认值:"true"
显示或隐藏 discounts section。
string
任何以
metadata_ 开头的 query parameter 都会作为 metadata 传递。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)
- 在 POST request 中将 parameters 作为 JSON body 发送。
- 支持一次性付款和 recurring payments。
billing和customer是必需的。- 有关所有支持的 body fields,请参阅:
Response Format
Dynamic checkout 返回包含 checkout URL 的 JSON response: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
string
必填
portal session 的 customer ID,例如
?customer_id=cus_123。boolean
如果设置为
true,Dodo Payments 还会将 portal link 通过 email 发送给 customer。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。