@dodopayments/tanstack cung cấp cho dự án TanStack Start của bạn ba request handler. Checkout trả về 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. Mỗi handler nhận một Request tiêu chuẩn và trả về một Response, vì vậy bạn gọi nó từ một server route handler.
Checkout Handler
Tạo URL checkout bằng các flow static, dynamic và checkout session.
Customer Portal
Cho phép khách hàng quản lý các 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:Package này cũng cần
zod 3.25 trở lên, được khai báo là peer dependency.2
Set Up Environment Variables
Tạo file TanStack Start tải các file
.env trong thư mục gốc của dự án. Tạo API key trong Developer → API Keys. Thêm webhook endpoint trong Developer → Webhooks, rồi sao chép Signing secret vào DODO_PAYMENTS_WEBHOOK_KEY:.env, còn server route đọc các giá trị từ process.env. 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. Test mode API key chỉ hoạt động với test_mode.Ví dụ về Route Handler
Các ví dụ là server route của TanStack Start trong
src/routes/api/. Mỗi ví dụ định nghĩa các handler trong server.handlers tại createFileRoute. Các bản phát hành TanStack Start cũ hơn, chẳng hạn 1.129, định nghĩa server route bằng createServerFileRoute từ @tanstack/react-start/server và một lệnh gọi .methods(). Các handler của Dodo Payments hoạt động giống nhau với cả hai API: truyền cho chúng request.- Checkout Handler
- Customer Portal Handler
- Webhook Handler
Sử dụng handler này để thêm checkout 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 thiết lập type: "dynamic". Ví dụ dynamic checkout giả định rằng bạn đã thiết lập 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: Các URL có thể chia sẻ để thu tiền mà không cần code.
- Dynamic Payment Links: Các payment link được tạo với 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ị.
Checkout nhận các tùy chọn sau:
Handler phục vụ static checkout cho các request
GET. Với các request POST, handler tạo dynamic payment link khi type là dynamic, và tạo checkout session trong các trường hợp còn lại.
Static Checkout (GET)
Static Checkout (GET)
Query Parameters được hỗ trợ
string
bắt buộc
Mã định danh sản phẩm, ví dụ
?productId=pdt_nZuwz45WAs64n3l07zpQR.integer
mặc định:"1"
Số lượng sản phẩm.
string
Họ tên đầy đủ của khách hàng. Bị bỏ qua nếu
firstName hoặc lastName được cung cấp.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
Địa chỉ đường phố 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 tính theo đơn vị tiền tệ chính, ví dụ
12.5 cho $12.50. Chỉ hoạt động với sản phẩm Pay What You Want và bị bỏ qua nếu thấp hơn giá tối thiểu của sản phẩm.boolean
mặc định:"true"
Hiển thị hoặc ẩn phần giảm giá.
string
Mọi query parameter bắt đầu bằng
metadata_ đều được truyền vào checkout dưới dạng metadata, ví dụ metadata_orderId=123.email cùng với disableEmail=true. Handler thêm returnUrl từ config của nó vào link dưới dạng redirect_url.Định dạng Response
Static checkout trả về response JSON 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ả thanh toán một lần và thanh toán định kỳ. Handler lấy sản phẩm, sau đó tạo subscription nếu sản phẩm là định kỳ và tạo thanh toán một lần trong trường hợp còn lại.
- Body cần
billing(vớistreet,city,state,countryvàzipcode) cùng vớicustomer, cũng nhưproduct_idhoặcproduct_cart. Subscription cầnproduct_id. - Để xem mọi body field được hỗ trợ, tham khảo:
Định dạng Response
Dynamic checkout trả về response JSON với payment link làm checkout URL:Checkout Sessions (POST)
Checkout Sessions (POST)
Checkout session tạo checkout được host cho 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 bắt buộc duy nhất và cần ít nhất một sản phẩm. Nếu body không có return_url, handler sử dụng returnUrl từ config của nó.Mỗi checkout_url chỉ hoạt động một lần và hết hạn sau 24 giờ, hoặc sau 15 phút khi bạn truyền confirm: true. Session được tạo với payment_method_id không trả về checkout_url, vì vậy handler phản hồi 400.Để biết thêm chi tiết và xem mọi field được hỗ trợ, hãy tham khảo Checkout Sessions Integration Guide.Định dạng Response
Checkout session trả về response JSON với checkout URL:Customer Portal Route Handler
Customer Portal route handler tạo Customer Portal session cho khách hàng bạn truyền vào và chuyển hướng trình duyệt đến đó.CustomerPortal nhận cùng các tùy chọn bearerToken và environment như Checkout.
Query Parameters
string
bắt buộc
Customer ID cho portal session, ví dụ
?customer_id=cus_123.boolean
Nếu được đặt thành
true, Dodo Payments cũng gửi email portal link cho khách hàng.customer_id và 500 nếu không thể tạo portal session.
Webhook Route Handler
Webhook route handler xác minh từng request bằng webhook secret của bạn, được truyền dưới dạngwebhookKey, 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 các header
webhook-id,webhook-timestampvàwebhook-signaturebằngwebhookKey, theo đặc tả Standard Webhooks. Trả về 401 nếu xác minh thất bại. - Payload Validation: Xác thực payload bằng Zod. Trả về 400 nếu payload không hợp lệ.
- Error Handling:
- 401: Chữ ký không hợp lệ
- 400: Payload không hợp lệ
- 500: Lỗi nội bộ trong quá trình xác minh
- 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.