@dodopayments/nuxt module 为 Nuxt 应用提供三个 server route handlers。checkoutHandler 返回 checkout URLs,customerPortalHandler 将客户发送到 Customer Portal,而 Webhooks 验证 webhook events 并将其路由到你的代码。
Checkout API Route
从 Nuxt server route 创建 checkout URLs。
Customer Portal API Route
让客户通过 Nuxt server route 管理其订阅和详细信息。
Webhooks API Route
在 Nuxt 中接收并验证 Dodo Payments webhook events。
概述
该 module 将其 handlers 注册为 Nuxt server auto-imports,因此你的 server routes 无需 import statements 即可调用
checkoutHandler、customerPortalHandler 和 Webhooks。每个 route 都从 runtimeConfig 读取 credentials。Nuxt 只向浏览器公开 runtimeConfig.public,因此 API key 和 webhook secret 会保留在 server 上。安装
1
Install the Nuxt Module
在项目根目录运行此命令:该 module 将 Nuxt 3(3.13.1 或更高版本)和
zod 3.25 或更高版本列为 peer dependencies。2
Register the Module in nuxt.config.ts
将 设置这些 environment variables,例如在项目根目录的
@dodopayments/nuxt 添加到 modules 数组,并将 credentials 映射到 runtimeConfig:nuxt.config.ts
.env 文件中设置:构建后的 Nuxt server 不会读取你的
.env 文件。在 runtime 中,Nuxt 只会根据与其路径匹配的 variable 覆盖 runtimeConfig 值,例如 private.returnUrl 对应的 NUXT_PRIVATE_RETURN_URL,因此也要在 hosting environment 中设置这些 variables。API Route Handler 示例
这些示例会在
server/routes/api/ directory 中创建 server routes。Nuxt 根据文件名和 method suffix 为每个文件创建 route,因此 checkout.get.ts 会处理 GET /api/checkout。- Checkout API Route
- Customer Portal API Route
- Webhook API Route
使用此 handler 将 Dodo Payments checkout 添加到 Nuxt 应用。GET route 提供 static checkout。POST route 提供 checkout sessions;设置
type: "dynamic" 后,也可提供 dynamic checkout。checkout.post.ts 提供一个 POST flow。使用 dynamic checkout 示例或 checkout session 示例之一: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。这是推荐的 flow。
checkoutHandler 接受以下 options:
Static Checkout (GET)
Static Checkout (GET)
支持的 Query Parameters
string
必填
Product identifier,例如
?productId=pdt_nZuwz45WAs64n3l07zpQR。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 的 address line。
string
Customer 的 city。
string
Customer 的 state 或 province。
string
Customer 的 ZIP 或 postal code。
boolean
设置为
true 可禁用 full name field。boolean
设置为
true 可禁用 first name field。boolean
设置为
true 可禁用 last name field。boolean
设置为
true 可禁用 email field。boolean
设置为
true 可禁用 country field。boolean
设置为
true 可禁用 address line field。boolean
设置为
true 可禁用 city field。boolean
设置为
true 可禁用 state field。boolean
设置为
true 可禁用 ZIP code field。string
Payment currency,例如
USD。boolean
默认值:"true"
显示或隐藏 currency selector。
number
固定收取的金额,以 major currency units 表示,例如 $12.50 对应
12.5。仅适用于 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 发送。
- 支持 one-time 和 recurring payments。
billing和customer为必需项。- 所有受支持的 body fields,请参阅:
Response Format
Dynamic checkout 返回包含 checkout URL 的 JSON response:Checkout Sessions (POST)
Checkout Sessions (POST)
Checkout sessions 为 one-time purchases 和 subscriptions 创建 hosted checkout,并提供完整的 customization 控制。
product_cart 是唯一必需的 field。如果 body 中没有 return_url,handler 将使用 config 中的 returnUrl。如需了解详细信息和所有受支持的 fields,请参阅 Checkout Sessions Integration Guide。使用 payment_method_id 创建的 session 不会返回 checkout URL,因此 handler 会响应 400。要向 saved 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。Webhook Route Handler
webhook route handler 会在运行你的代码前验证每个 request:- Method: 仅支持 POST requests。其他 methods 返回 405。
- Signature Verification: 根据 Standard Webhooks specification,使用
webhookKey验证 raw request body 以及webhook-id、webhook-timestamp和webhook-signatureheaders。验证失败时返回 401。 - Payload Validation: 使用 Zod 验证 payload。payload 无效时返回 400。
- Error Handling:
- 401:Invalid signature
- 400:Invalid payload
- 500:验证期间发生 Internal error
- Event Routing: 对每个 event 调用
onPayload,然后调用该 event type 对应的 handler,并返回 200。