@dodopayments/fastify cung cấp cho ứng dụng Fastify của bạn ba trình xử lý route: Checkout trả về URL checkout, CustomerPortal đưa khách hàng đến Customer Portal, còn Webhooks xác minh các yêu cầu webhook và gọi các trình xử lý sự kiện của bạn.
Checkout Handler
Tạo payment link và checkout session từ ứng dụng Fastify 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 dự án:Gói này yêu cầu Fastify 5.4.0 trở lên.
2
Set Up Environment Variables
Tạo tệp Tạo API key trong Developer → API Keys. Thêm webhook endpoint trong Developer → Webhooks và sao chép signing secret vào
.env trong thư mục gốc của dự án:DODO_PAYMENTS_WEBHOOK_KEY. Trong quá trình xây dựng, hãy sử dụng API key ở test mode cùng 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ề trình xử lý route
Các ví dụ đăng ký route trên một instance Fastify được tạo bằng
Fastify(). Route webhook cần request body thô, vì vậy ví dụ thêm một body parser dạng string bên trong plugin chỉ chứa route webhook.- Checkout Handler
- Customer Portal Handler
- Webhook Handler
Sử dụng trình xử lý này để tích hợp checkout của Dodo Payments vào ứng dụng Fastify. Hỗ trợ các luồng thanh toán static (GET), dynamic (POST) và session (POST).
Checkout() trả về getHandler cho luồng static và postHandler cho các luồng dynamic và session. Đăng ký mỗi luồng POST trên một path riêng.Trình xử lý Checkout Route
Adaptor hỗ trợ cả ba luồng checkout của Dodo Payments. Đặt
type trong cấu hình trình xử lý để chọn luồng mà route cung cấp. Mỗi luồng phản hồi 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 có 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.
Checkout nhận các tùy chọn sau:
Checkout trả về một object có hai trình xử lý. Đăng ký getHandler cho GET khi type là static, và postHandler cho POST khi type là dynamic hoặc session.
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, 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ã bưu chính hoặc ZIP 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 hoặc tỉnh.boolean
Đặt thành
true để tắt trường 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 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_ được chuyển đến 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. Trình xử lý chuyển các parameter này đến static payment link.Định dạng response
Static checkout trả về JSON response 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. Trình xử lý 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. - Trình xử lý 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, nó cũng chuyển tiếpaddons,on_demandvàtrial_period_days. Các field khác sẽ bị bỏ qua. - Để biết chi tiết về field, xem:
Định dạng response
Dynamic checkout trả về JSON response 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. Trình xử lý 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. 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 trình xử lý phản hồi 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ề JSON response chứa checkout URL:Trình xử lý Customer Portal Route
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ư Checkout. Nếu Dodo Payments không thể tạo session, trình xử lý 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, sẽ gửi email chứa portal link cho khách hàng.Trình xử lý Webhook Route
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 trình xử lý sự kiện 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 với 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 hoàn tất. Handler không bắt các lỗi do event handler của bạn throw.