Skip to main content
@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

将 @dodopayments/nuxt 添加到 modules 数组,并将 credentials 映射到 runtimeConfig:
nuxt.config.ts
设置这些 environment variables,例如在项目根目录的 .env 文件中设置:构建后的 Nuxt server 不会读取你的 .env 文件。在 runtime 中,Nuxt 只会根据与其路径匹配的 variable 覆盖 runtimeConfig 值,例如 private.returnUrl 对应的 NUXT_PRIVATE_RETURN_URL,因此也要在 hosting environment 中设置这些 variables。
切勿将 .env 文件或 secrets 提交到 version control。

API Route Handler 示例

这些示例会在 server/routes/api/ directory 中创建 server routes。Nuxt 根据文件名和 method suffix 为每个文件创建 route,因此 checkout.get.ts 会处理 GET /api/checkout。
使用此 handler 将 Dodo Payments checkout 添加到 Nuxt 应用。GET route 提供 static checkout。POST route 提供 checkout sessions;设置 type: "dynamic" 后,也可提供 dynamic checkout。
为 static checkout 创建 GET route:
checkout.post.ts 提供一个 POST flow。使用 dynamic checkout 示例或 checkout session 示例之一:
如果 productId 缺失或无效,handler 将返回 400 response。
要测试这些 routes,请发送以下 requests:

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:

支持的 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 传递。
handler 会将 config 中的 returnUrl 作为 redirect_url 添加到 link。
如果 productId 缺失,handler 将返回 400 response。无效的 query parameters 和不存在的 product IDs 也会返回 400。

Response Format

Static checkout 返回包含 checkout URL 的 JSON response。在 test mode 中,URL 使用 test.checkout.dodopayments.com。
Dynamic checkout 代理已弃用的 POST /payments 和 POST /subscriptions endpoints。它会继续支持现有 integrations,但新 integrations 应使用 checkout sessions。

Response Format

Dynamic checkout 返回包含 checkout URL 的 JSON response:
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。
handler 不会检查调用者的身份。任何使用 customer ID 请求它的人都可以获得该 customer 的 portal。请使用自己的 authentication 保护此 route,并且只传入已登录用户的 customer ID。

Query Parameters

string
必填
portal session 的 customer ID,例如 ?customer_id=cus_123。
boolean
如果设置为 true,Dodo Payments 还会将 portal link 发送到客户的 email。
从 @dodopayments/nuxt 0.2.11 开始,如果缺少 customer_id,处理程序将返回 HTTP 400;如果无法创建 portal session,则返回 HTTP 500。早期版本会返回 HTTP 200,并附带 JSON body { "status": 400, "body": "Missing customer_id in query parameters" }。要依赖 HTTP status,请升级到 0.2.11 或更高版本。

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-signature headers。验证失败时返回 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。
adaptor 不会捕获你的 handlers 抛出的 errors。它们会传播到 Nuxt,并导致 request 失败。

支持的 Webhook Event Handlers

每个 handler 都会接收其 event type 对应的已验证 payload:
有关每个 event 的含义,请参阅 Webhook Event Guide。

LLM Prompt

将此 prompt 复制到 AI coding assistant 中,让它将该 module 添加到你的项目。要同时为 agent 提供 Dodo Payments docs 和 skills,请安装 Agent Plugin。
最后修改于 2026年9月26日