Tổng quan
Adaptor Better Auth,@dodopayments/better-auth, là một plugin Better Auth kết nối người dùng của bạn với Dodo Payments. Plugin cung cấp:
- Tùy chọn tạo khách hàng hoặc liên kết khách hàng dựa trên email khi đăng ký
- Các phiên checkout, phương thức checkout được ưu tiên, với ánh xạ product slug
- Customer Portal tự phục vụ
- Các endpoint tiếp nhận và báo cáo mức sử dụng cho tính phí dựa trên mức sử dụng
- Xử lý sự kiện webhook với xác minh chữ ký
- TypeScript types cho mọi endpoint
Bạn cần có tài khoản Dodo Payments và khóa API để sử dụng tích hợp này.
Điều kiện tiên quyết
- Node.js 16 trở lên
- Quyền truy cập vào dashboard Dodo Payments
- Một project hiện có sử dụng Better Auth 1.4 hoặc bản phát hành 1.x mới hơn
Cài đặt
1
Install Dependencies
Chạy command này trong thư mục gốc của project:
Adaptor, Dodo Payments SDK, Better Auth và Zod đã được cài đặt.
Cấu hình
1
Configure Environment Variables
Thêm các biến này vào file
.env. Tạo API key trong Developer → API Keys trên dashboard. Bạn nhận webhook secret khi thêm webhook endpoint, như mô tả trong mục Webhooks trên trang này. BETTER_AUTH_SECRET là một chuỗi ngẫu nhiên có ít nhất 32 ký tự.2
Set Up Server-Side Integration
Tạo hoặc cập nhật Plugin thêm một trường
src/lib/auth.ts:dodoCustomerId vào bảng user của Better Auth, nơi lưu Dodo Payments customer ID của từng người dùng. Sau khi thêm plugin, hãy cập nhật database schema bằng Better Auth CLI.3
Set Up Client-Side Integration
Tạo hoặc cập nhật
src/lib/auth-client.ts:Ví dụ sử dụng
Sử dụng
authClient.dodopayments.checkoutSession cho các tích hợp mới. Phương thức
checkout cũ đã deprecated và chỉ được giữ lại để
tương thích ngược.Tạo Checkout Session (Được ưu tiên)
Tạo một checkout session từ slug đã cấu hình hoặc từ product cart, sau đó redirect khách hàng đến URL được trả về:checkoutSession tự động điền một số trường cho bạn:
- Billing address: Không bắt buộc ngay từ đầu vì checkout sẽ thu thập thông tin này từ khách hàng. Để điền trước, hãy truyền
billing_address. - Customer: Với người dùng đã đăng nhập, plugin sử dụng email và tên từ Better Auth session của họ và bỏ qua mọi object
customermà bạn truyền vào. Khi không có người dùng đã đăng nhập, plugin sử dụng objectcustomer. - Các trường khác: Argument chấp nhận các trường giống request body của endpoint Create Checkout Session, cùng với
slugvàreferenceId.
slug cũng như product_cart, request sẽ thất bại với lỗi 400.
Return URL lấy từ
successUrl được cấu hình trong server plugin,
và được phân giải dựa trên URL của app. Plugin bỏ qua mọi return_url trong
client payload.Checkout cũ (Deprecated)
Phương thức cũ yêu cầubilling và customer, đồng thời tạo payment link thông qua dynamic checkout flow đã deprecated. Các trường bạn đặt trong customer sẽ ghi đè email và tên từ session.
Truy cập Customer Portal
Các portal endpoint yêu cầu người dùng đã đăng nhập với địa chỉ email đã được xác minh. Nếu người dùng chưa có Dodo Payments customer, plugin sẽ tìm một customer theo email hoặc tạo customer mới. INLINE_CODE_PLACEHOLDER_baf0df18400b3e6_END trả về URL của portal:Liệt kê dữ liệu khách hàng
Liệt kê subscriptions và payments của khách hàng đã đăng nhập.page bắt đầu từ 1 và status lọc các kết quả:
Theo dõi mức sử dụng được đo lường
Bật pluginusage() trên server để ghi nhận các sự kiện sử dụng cho việc tính phí dựa trên mức sử dụng và cho phép khách hàng xem mức sử dụng của họ. Cả hai method đều yêu cầu người dùng đã đăng nhập với địa chỉ email đã được xác minh.
authClient.dodopayments.usage.ingestghi nhận một event cho người dùng đã đăng nhập.authClient.dodopayments.usage.meters.listliệt kê các sự kiện sử dụng của khách hàng đã đăng nhập. Method này chấp nhận các query parameterpage_number,page_size,event_name,meter_id,startvàend.
meter_id, danh sách sẽ bao gồm tất cả sự kiện sử dụng của khách hàng. Khi có meter_id, danh sách chỉ bao gồm các event khớp với meter đó.
Webhooks
Webhooks plugin xác minh chữ ký của từng Dodo Payments event và
gọi các handler của bạn. Endpoint mặc định là
/api/auth/dodopayments/webhooks.1
Generate and Set Webhook Secret
Trong dashboard, đi đến Developer → Webhooks và thêm endpoint URL của bạn, ví dụ
https://<your-domain>/api/auth/dodopayments/webhooks. Sao chép signing secret của endpoint vào file .env:2
Handle Webhook Events
Truyền một handler cho mỗi event bạn muốn xử lý.
onPayload được chạy cho mọi event:{ received: true }.
Các Webhook Event Handler được hỗ trợ
Mỗi handler nhận payload đã được xác minh cho loại event tương ứng:Tài liệu tham khảo về cấu hình
Plugin Options
Plugin Options
- client (bắt buộc): DodoPayments client instance
- createCustomerOnSignUp (tùy chọn): Tạo Dodo Payments customer khi người dùng đăng ký hoặc liên kết customer hiện có với cùng email. Plugin cũng cập nhật customer khi thông tin người dùng thay đổi.
- use (bắt buộc): Mảng các plugin cần bật (checkout, portal, usage, webhooks)
- getCustomerParams (tùy chọn): Function nhận Better Auth
Uservà trả về các trường bổ sung để đính kèm vào Dodo Payments customer khi tạo và cập nhật (ví dụmetadata,phone_number). Function này có thể là async.
Checkout Plugin Options
Checkout Plugin Options
- products: Mảng các object
{ productId, slug }hoặc một async function trả về một object - successUrl: URL để redirect đến sau khi thanh toán thành công
- authenticatedUsersOnly: Yêu cầu xác thực người dùng (mặc định:
false)
Khắc phục sự cố & Mẹo
Common Issues
Common Issues
- Invalid API key: Kiểm tra
DODO_PAYMENTS_API_KEYtrong.envvà kiểm tra mode của key có khớp vớienvironmenthay không. - Webhook signature mismatch: Kiểm tra webhook secret có khớp với secret được đặt trong dashboard Dodo Payments hay không.
- Customer not created: Kiểm tra
createCustomerOnSignUpđã được đặt thànhtruechưa. - Portal hoặc usage requests trả về 401: Địa chỉ email của người dùng chưa được xác minh.
Best Practices
Best Practices
- Sử dụng environment variables cho tất cả secret và key.
- Kiểm thử trong
test_modetrước khi chuyển sanglive_mode. - Ghi log webhook event để debug và audit.