@dodopayments/express cung cấp cho ứng dụng Express của bạn ba route handler: checkoutHandler trả về URL checkout, CustomerPortal đưa khách hàng đến Customer Portal, còn Webhooks xác minh các request webhook và gọi các event handler của bạn.
Checkout Handler
Tạo payment link và checkout session từ ứng dụng Express của bạn.
Customer Portal
Cho phép khách hàng quản lý subscription và thông tin của họ.
Webhooks
Xác minh và xử lý các sự kiện webhook của Dodo Payments.
Cài đặt
1
Install the Package
Chạy lệnh sau trong thư mục gốc của project:
2
Set Up Environment Variables
Tạo file Tạo API key trong Developer → API Keys. Thêm endpoint webhook trong Developer → Webhooks và sao chép signing secret vào
.env trong thư mục gốc của project:DODO_PAYMENTS_WEBHOOK_KEY. Trong quá trình xây dựng, hãy sử dụng API key ở test mode với DODO_PAYMENTS_ENVIRONMENT=test_mode, vì key ở test mode chỉ hoạt động với test mode. DODO_PAYMENTS_RETURN_URL là tùy chọn.Ví dụ về Route Handler
Các ví dụ đăng ký route trên một ứng dụng Express được tạo bằng
express(). Các checkout handler POST và webhook handler đọc req.body, vì vậy mỗi ví dụ đăng ký express.json() trước các route của mình.- Checkout Handler
- Customer Portal Handler
- Webhook Handler
Sử dụng handler này để tích hợp checkout của Dodo Payments vào ứng dụng Express. Hỗ trợ các luồng thanh toán static (GET), dynamic (POST) và session (POST). Đăng ký mỗi luồng POST trên một path riêng, vì handler đầu tiên được đăng ký cho một path sẽ xử lý mọi request đến path đó.
Checkout Route Handler
Adaptor hỗ trợ cả ba luồng checkout của Dodo Payments. Đặt
type trong cấu hình handler để chọn luồng mà route cung cấp. Mỗi luồng trả về JSON chứa checkout_url để khách hàng mở.- Static Payment Links:
type: "static", GET. Tạo payment link cho một product từ query parameter sau khi kiểm tra product tồn tại. - Dynamic Payment Links:
type: "dynamic", POST. Tạo khoản thanh toán một lần hoặc subscription bằng payment link, tùy thuộc product có recurring hay không. - Checkout Sessions:
type: "session", POST. Tạo checkout session từ product cart và thông tin khách hàng. Sử dụng luồng này cho các tích hợp mới.
checkoutHandler nhận các tùy chọn sau:
Đăng ký handler cho GET khi
type là static, và cho POST khi type là dynamic hoặc session. Handler trả về 405 cho các method khác.
Static Checkout (GET)
Static Checkout (GET)
Query Parameter được hỗ trợ
string
bắt buộc
Mã định danh product, ví dụ
?productId=pdt_nZuwz45WAs64n3l07zpQR.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, theo 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ã bưu chính hoặc ZIP code 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 đị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 ZIP code.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 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 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.true và trường tương ứng có giá trị, ví dụ email với disableEmail. Handler truyền các parameter này đến static payment link.Định dạng Response
Static checkout trả về response JSON chứa checkout URL:Dynamic Checkout (POST)
Dynamic Checkout (POST)
- Gửi parameter dưới dạng JSON body trong request POST.
- Hỗ trợ cả thanh toán một lần và recurring. Handler lấy product, sau đó tạo subscription nếu product là recurring; nếu không thì tạo khoản thanh toán một lần.
- Body cần
billing(vớistreet,city,state,countryvàzipcode) vàcustomer, cùng vớiproduct_id(vớiquantitytùy chọn) hoặcproduct_cart. Subscription cầnproduct_id. - Handler cũng chuyển tiếp
metadata,allowed_payment_method_types,billing_currency,discount_codes(hoặcdiscount_codeđã deprecated),return_url,show_saved_payment_methodsvàtax_id. Với subscription, handler cũng chuyển tiếpaddons,on_demandvàtrial_period_days. Các field khác bị bỏ qua. - Để biết chi tiết về field, xem:
Định dạng Response
Dynamic checkout trả về response JSON với payment link dưới dạng checkout URL:Checkout Sessions (POST)
Checkout Sessions (POST)
Gửi payload của checkout session dưới dạng JSON body. Handler tạo checkout session để xử lý toàn bộ luồng thanh toán cho giao dịch mua một lần và subscription, sau đó trả về
checkout_url của session. product_cart là bắt buộc và phải chứa ít nhất một product.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 trả về 400.Xem Checkout Sessions Integration Guide để biết thêm chi tiết và danh sách đầy đủ các field được hỗ trợ.Định dạng Response
Checkout session trả về response JSON chứa checkout URL:Customer Portal Route Handler
Customer Portal Route Handler tạo một Customer Portal session cho khách hàng trongcustomer_id và chuyển hướng request đến portal link. CustomerPortal nhận các tùy chọn bearerToken và environment, giống như checkoutHandler. Nếu Dodo Payments không thể tạo session, handler trả về 500.
Query Parameter
string
bắt buộc
Customer ID cho portal session, ví dụ
?customer_id=cus_123.boolean
Nếu được đặt thành
true, gửi email chứa portal link cho khách hàng.Webhook Route Handler
Webhook handler xác minh từng request bằng webhook secret của bạn, được truyền dưới dạngwebhookKey, sau đó gọi các event handler của bạn.
- Method: Chỉ hỗ trợ request POST. 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 bằng Zod. Trả về 400 cho payload không hợp lệ.
- Error Handling:
- 401: Signature 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 khi chúng hoàn tất. Handler không bắt các lỗi do event handler của bạn throw ra.