Skip to main content
Component @dodopayments/convex thêm Dodo Payments vào backend Convex của bạn. Component cung cấp hàm checkout để tạo các phiên checkout, hàm customerPortal để mở Customer Portal cho người dùng đã đăng nhập và createDodoWebhookHandler để xác minh webhook trong Convex HTTP action. Component yêu cầu Convex 1.26 trở lên.

Checkout Function

Tạo các phiên checkout từ Convex action.

Customer Portal

Cho phép khách hàng quản lý gói đăng ký và thông tin của họ.

Webhooks

Nhận và xử lý các sự kiện webhook của Dodo Payments.

Cài đặt

1

Install the Package

Chạy lệnh này trong thư mục gốc của dự án:
2

Add Component to Convex Config

Thêm component Dodo Payments vào cấu hình Convex của bạn:
Sau khi chỉnh sửa convex.config.ts, hãy chạy npx convex dev một lần để tạo các type.
3

Set Up Environment Variables

Thiết lập các biến môi trường trong dashboard Convex, tại Settings → Environment Variables. Để mở dashboard, hãy chạy:
Thêm các biến môi trường sau:
  • DODO_PAYMENTS_API_KEY: API key Dodo Payments của bạn, lấy từ Developer → API Keys trong dashboard Dodo Payments.
  • DODO_PAYMENTS_ENVIRONMENT: test_mode hoặc live_mode.
  • DODO_PAYMENTS_WEBHOOK_SECRET: webhook secret của bạn, lấy từ Developer → Webhooks. Bắt buộc để xử lý webhook. Webhook handler đọc chính xác tên biến này.
Lưu các secret dưới dạng biến môi trường Convex. Các hàm backend Convex không đọc các file .env. Không bao giờ commit secret vào hệ thống quản lý phiên bản.

Ví dụ thiết lập component

1

Create Internal Query

Tạo một internal query để tìm khách hàng trong cơ sở dữ liệu theo auth ID. Hàm identify ở bước tiếp theo sử dụng query này để lấy Dodo Payments customer ID của người dùng đã đăng nhập cho customer portal.
Component không định nghĩa schema. Trước khi sử dụng query này, hãy định nghĩa bảng customers với index by_auth_id trong convex/schema.ts, hoặc thay đổi query để khớp với schema hiện có của bạn.
2

Configure DodoPayments Component

Tạo client. identify ánh xạ người dùng Convex đã đăng nhập với Dodo Payments customer ID. Hàm trả về null nếu chưa có người dùng nào đăng nhập hoặc không có khách hàng phù hợp.
Sau đó thêm các function bạn cần:
Sử dụng function này để thêm checkout Dodo Payments vào ứng dụng Convex của bạn. Function tạo một phiên checkout từ các field được validator payload checkout của component chấp nhận.

Checkout Function

Component Convex tạo các phiên checkout, là flow checkout được khuyến nghị cho mọi khoản thanh toán. Một phiên chứa giỏ sản phẩm, thông tin khách hàng và các tùy chọn checkout.

Cách sử dụng

Gọi checkout từ một Convex action, với các field của phiên checkout trong payload:
checkout không gọi identify. Để gắn một khách hàng hiện có, truyền customer: { customer_id } trong payload. Để biết thêm chi tiết và danh sách đầy đủ các field được hỗ trợ, xem Checkout Sessions. Một phiên được tạo bằng payment_method_id không trả về checkout URL, vì vậy checkout sẽ throw error cho phiên đó.

Định dạng phản hồi

Checkout function trả về một object chứa checkout URL:

Customer Portal Function

Customer portal function trả về Customer Portal URL cho người dùng đã đăng nhập.

Cách sử dụng

Function trả về một object có field portal_url.

Parameters

boolean
mặc định:"false"
Nếu được đặt thành true, Dodo Payments cũng gửi liên kết portal qua email cho khách hàng.
customerPortal lấy khách hàng từ function identify trong thiết lập DodoPayments của bạn; function này phải trả về dodoCustomerId của khách hàng. Nếu identify trả về null, customerPortal sẽ throw lỗi User is not authenticated..

Webhook Handler

createDodoWebhookHandler xác minh từng request trước khi chạy code của bạn:
  • Method: Đăng ký route bằng method: "POST". Request sử dụng method khác sẽ không đến handler.
  • Xác minh chữ ký: Xác minh chữ ký Standard Webhooks bằng biến môi trường DODO_PAYMENTS_WEBHOOK_SECRET. Trả về 400 nếu xác minh không thành công.
  • Xác thực payload: Được xác thực bằng Zod. Trả về 400 nếu payload không hợp lệ.
  • Xử lý lỗi:
    • 400: Chữ ký không hợp lệ, payload không hợp lệ hoặc lỗi do một trong các handler của bạn throw
    • 200: Tất cả handler đã hoàn tất
    • Nếu DODO_PAYMENTS_WEBHOOK_SECRET chưa được thiết lập, handler sẽ throw error và request sẽ thất bại.
  • Định tuyến sự kiện: Gọi onPayload cho mỗi event, sau đó gọi handler tương ứng với type của event.

Webhook Event Handler được hỗ trợ

Mỗi handler nhận Convex ActionCtx và payload đã được xác minh cho type event tương ứng:

Sử dụng trên frontend

Gọi các action checkout và portal từ component React bằng hook useAction từ convex/react.

Prompt cho LLM

Sao chép prompt này vào AI coding assistant để thêm component vào dự án của bạn. Để cung cấp cho agent tài liệu và skill của Dodo Payments, hãy cài đặt Agent Plugin.
Lần sửa đổi cuối 26 tháng 9, 2026