@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
固定收取的金额,以 major currency units 表示,例如 $12.50 对应
12.5。仅适用于 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 为 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
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。