@dodopayments/nextjs cung cấp cho dự án Next.js App Router của bạn ba route handler. Checkout trả về các URL checkout, CustomerPortal đưa khách hàng đến Customer Portal, còn Webhooks xác minh các sự kiện webhook và chuyển chúng đến code của bạn. Package này hỗ trợ Next.js 14, 15 và 16.
Checkout Handler
Tạo URL checkout với các flow static, dynamic và checkout session.
Customer Portal
Cho phép khách hàng quản lý subscription 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 tại thư mục gốc của dự án:Package này cũng yêu cầu Zod 3.25 hoặc Zod 4 dưới dạng peer dependency.
2
Set Up Environment Variables
Tạo tệp
.env tại thư mục gốc của dự án. Tạo API key trong Developer → API Keys và webhook secret trong Developer → Webhooks trên dashboard:DODO_PAYMENTS_RETURN_URL là nơi khách hàng được chuyển đến sau checkout. Nếu bạn không truyền environment, các handler sẽ sử dụng live_mode.Ví dụ về Route Handler
Tất cả ví dụ đều giả định rằng bạn sử dụng Next.js App Router.
- Checkout Handler
- Customer Portal Handler
- Webhook Handler
Sử dụng handler này để thêm checkout của Dodo Payments vào ứng dụng của bạn. Handler
GET phục vụ static checkout. Handler POST phục vụ checkout session hoặc dynamic checkout khi bạn đặt type: "dynamic".Checkout Route Handler
Checkout handler hỗ trợ cả ba cách nhận thanh toán bằng Dodo Payments:- Static Payment Links: URL có thể chia sẻ để thu payment mà không cần code.
- Dynamic Payment Links: payment link được tạo với các thông tin tùy chỉnh. Chúng sử dụng các endpoint đã deprecated.
- Checkout Sessions: checkout được host với product cart, thông tin khách hàng và các tùy chọn tùy chỉnh. Đây là flow được khuyến nghị.
Static Checkout (GET)
Static Checkout (GET)
Query Parameters được hỗ trợ
string
bắt buộc
Mã định danh product, ví dụ
?productId=pdt_123.integer
mặc định:"1"
Số lượng product.
string
Họ tên đầy đủ của khách hàng. Bị bỏ qua nếu cung cấp
firstName hoặc lastName.string
Tên của khách hàng.
string
Họ của khách hàng.
string
Địa chỉ email của khách hàng.
string
Quốc gia của khách hàng, dưới dạng mã ISO 3166-1 alpha-2.
string
Dòng địa chỉ của khách hàng.
string
Thành phố của khách hàng.
string
Bang hoặc tỉnh của khách hàng.
string
Mã ZIP hoặc mã bưu chính của khách hàng.
boolean
Đặt thành
true để tắt trường họ tên đầy đủ.boolean
Đặt thành
true để tắt trường tên.boolean
Đặt thành
true để tắt trường họ.boolean
Đặt thành
true để tắt trường email.boolean
Đặt thành
true để tắt trường quốc gia.boolean
Đặt thành
true để tắt trường dòng địa chỉ.boolean
Đặt thành
true để tắt trường thành phố.boolean
Đặt thành
true để tắt trường bang.boolean
Đặt thành
true để tắt trường mã ZIP.string
Đơn vị tiền tệ thanh toán, ví dụ
USD.boolean
mặc định:"true"
Hiển thị hoặc ẩn bộ chọn tiền tệ.
number
Cố định số tiền được charge, theo đơn vị tiền tệ chính, ví dụ
12.5 cho $12.50. Chỉ hoạt động với product Pay What You Want và bị bỏ qua nếu thấp hơn giá tối thiểu của product.boolean
mặc định:"true"
Hiển thị hoặc ẩn phần discounts.
string
Mọi query parameter bắt đầu bằng
metadata_ sẽ được truyền dưới dạng metadata.returnUrl từ config của handler vào link dưới dạng redirect_url.Định dạng Response
Static checkout trả về JSON response chứa checkout URL. Ở test mode, URL sử dụngtest.checkout.dodopayments.com.Dynamic Checkout (POST)
Dynamic Checkout (POST)
- Gửi các parameter dưới dạng JSON body trong một POST request.
- Hỗ trợ cả payment một lần và recurring payment.
- Bắt buộc phải có
billingvàcustomer. - Để xem mọi body field được hỗ trợ, hãy tham khảo:
Định dạng Response
Dynamic checkout trả về JSON response chứa checkout URL:Checkout Sessions (POST)
Checkout Sessions (POST)
Checkout session tạo checkout được host cho các giao dịch mua một lần và subscription, với toàn quyền kiểm soát việc tùy chỉnh.
product_cart là field duy nhất bắt buộc. Nếu body không có return_url, handler sẽ sử dụng returnUrl từ config của handler.Để biết thêm chi tiết và xem mọi field được hỗ trợ, hãy tham khảo Checkout Sessions Integration Guide.Session được tạo với payment_method_id không trả về checkout URL, vì vậy handler sẽ phản hồi 400. Để charge một payment method đã lưu, hãy tạo session bằng SDK.Định dạng Response
Checkout session trả về JSON response chứa checkout URL:Customer Portal Route Handler
Customer Portal route handler tạo Customer Portal session cho khách hàng mà bạn truyền vào và redirect trình duyệt đến đó.Query Parameters
string
bắt buộc
Customer ID cho portal session, ví dụ
?customer_id=cus_123.boolean
Nếu đặt thành
true, Dodo Payments cũng sẽ gửi email chứa portal link cho customer.customer_id và trả về 500 nếu không thể tạo portal session.
Webhook Route Handler
Webhook route handler xác minh từng request trước khi chạy code của bạn:- Method: Chỉ hỗ trợ POST request. Các method khác trả về 405.
- Signature Verification: Xác minh raw request body bằng các header
webhook-id,webhook-timestampvàwebhook-signaturevớiwebhookKey. Trả về 401 nếu xác minh thất bại. - Payload Validation: Parse body đã được xác minh dưới dạng JSON và validate bằng Zod. Trả về 400 khi payload sau khi parse không khớp với webhook schema.
- Error Handling:
- 401: Chữ ký không hợp lệ
- 400: Payload không hợp lệ
- 500: Lỗi xác minh không mong muốn, JSON không hợp lệ hoặc lỗi do callback của bạn throw
- Event Routing: Gọi
onPayloadcho mọi event, sau đó gọi handler tương ứng với type của event và trả về 200.