Skip to main content
@dodopayments/convex component 将 Dodo Payments 添加到您的 Convex 后端。它提供一个 checkout 函数来创建 checkout sessions,一个 customerPortal 函数来为已登录用户打开 Customer Portal,以及 createDodoWebhookHandler,用于在 Convex HTTP action 中验证 webhooks。要求 Convex 1.26 或更高版本。

Checkout Function

从 Convex actions 创建 checkout sessions。

Customer Portal

让客户管理其订阅和详细信息。

Webhooks

接收并处理 Dodo Payments webhook events。

安装

1

Install the Package

在项目根目录中运行此命令:
2

Add Component to Convex Config

将 Dodo Payments component 添加到您的 Convex 配置中:
编辑 convex.config.ts 后,运行一次 npx convex dev 以生成 types。
3

Set Up Environment Variables

在 Convex dashboard 的 Settings → Environment Variables 下设置环境变量。要打开 dashboard,请运行:
添加以下环境变量:
  • DODO_PAYMENTS_API_KEY:您的 Dodo Payments API key,可在 Dodo Payments dashboard 的 Developer → API Keys 中获取。
  • DODO_PAYMENTS_ENVIRONMENT:test_mode 或 live_mode。
  • DODO_PAYMENTS_WEBHOOK_SECRET:您的 webhook secret,可在 Developer → Webhooks 中获取。处理 webhook 时必需。webhook handler 会读取此确切的变量名称。
将 secrets 存储为 Convex environment variables。Convex backend functions 不会读取 .env 文件。切勿将 secrets 提交到版本控制系统。

Component 设置示例

1

Create Internal Query

创建一个 internal query,通过 auth ID 在您的数据库中查找客户。下一步中的 identify 函数会使用它获取已登录用户的 Dodo Payments customer ID,以用于 customer portal。
该 component 不定义 schema。在使用此 query 前,请在 convex/schema.ts 中定义一个带有 by_auth_id index 的 customers table,或修改 query 以匹配您现有的 schema。
2

Configure DodoPayments Component

创建 client。identify 会将已登录的 Convex user 映射到 Dodo Payments customer ID。如果没有用户登录或没有匹配的 customer,它会返回 null。
然后添加您需要的 functions:
使用此 function 将 Dodo Payments checkout 添加到您的 Convex app。它会根据 component 的 checkout payload validator 所接受的字段创建 checkout session。

Checkout Function

Convex component 会创建 checkout sessions,这是所有 payments 推荐的 checkout flow。一个 session 包含 product cart、customer details 和 checkout options。

用法

从 Convex action 调用 checkout,并将 checkout session fields 传入 payload:
checkout 不会调用 identify。要关联现有 customer,请在 payload 中传入 customer: { customer_id }。有关更多详细信息及支持字段的完整列表,请参阅 Checkout Sessions。 使用 payment_method_id 创建的 session 不会返回 checkout URL,因此 checkout 会对其抛出 error。

Response Format

checkout function 返回一个包含 checkout URL 的 object:

Customer Portal Function

customer portal function 会为已登录用户返回一个 Customer Portal URL。

用法

它会返回一个包含 portal_url field 的 object。

Parameters

boolean
默认值:"false"
如果设置为 true,Dodo Payments 还会将 portal link 通过 email 发送给 customer。
customerPortal 会从 DodoPayments setup 中的 identify function 获取 customer,该 function 必须返回 customer 的 dodoCustomerId。如果 identify 返回 null,customerPortal 会抛出 User is not authenticated. error。

Webhook Handler

createDodoWebhookHandler 会在运行您的代码前验证每个 request:
  • Method: 使用 method: "POST" 注册 route。使用其他 methods 的 requests 不会到达 handler。
  • Signature Verification: 使用 DODO_PAYMENTS_WEBHOOK_SECRET environment variable 验证 Standard Webhooks signature。验证失败时返回 400。
  • Payload Validation: 使用 Zod 验证。payload 无效时返回 400。
  • Error Handling:
    • 400:signature 无效、payload 无效,或某个 handler 抛出 error
    • 200:所有 handlers 已完成
    • 如果未设置 DODO_PAYMENTS_WEBHOOK_SECRET,handler 会抛出 error,请求失败。
  • Event Routing: 对每个 event 调用 onPayload,然后调用该 event type 对应的 handler。

支持的 Webhook Event Handlers

每个 handler 都会接收 Convex ActionCtx 以及其 event type 对应的已验证 payload:

Frontend 用法

在 React components 中使用 convex/react 的 useAction hook 调用 checkout 和 portal actions。

面向 LLM 的 Prompt

将此 prompt 复制到您的 AI coding assistant 中,让它将 component 添加到您的项目中。若还要向 agent 提供 Dodo Payments 文档和 skills,请安装 Agent Plugin。
最后修改于 2026年9月26日