@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_modehoặclive_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.
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.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.- Checkout Function Setup
- Customer Portal Setup
- Webhook Handler Setup
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ọicheckout 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
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_SECRETchư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
onPayloadcho 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 ConvexActionCtx 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 hookuseAction từ convex/react.