Skip to main content
Module @dodopayments/nuxt cung cấp cho ứng dụng Nuxt của bạn ba trình xử lý route máy chủ. checkoutHandler trả về URL checkout, customerPortalHandler đư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 mã của bạn.

Checkout API Route

Tạo các URL checkout từ một server route của Nuxt.

Customer Portal API Route

Cho phép khách hàng quản lý subscription và thông tin của họ từ một server route của Nuxt.

Webhooks API Route

Nhận và xác minh các sự kiện webhook của Dodo Payments trong Nuxt.

Tổng quan

Module đăng ký các trình xử lý của mình dưới dạng Nuxt server auto-import, vì vậy các route máy chủ của bạn có thể gọi checkoutHandler, customerPortalHandler và Webhooks mà không cần câu lệnh import. Mỗi route đọc thông tin xác thực từ runtimeConfig. Nuxt chỉ cung cấp runtimeConfig.public cho trình duyệt, nên API key và webhook secret vẫn nằm trên máy chủ.

Cài đặt

1

Install the Nuxt Module

Chạy lệnh này trong thư mục gốc của dự án:
Module này liệt kê Nuxt 3 (3.13.1 trở lên) và zod 3.25 trở lên dưới dạng peer dependency.
2

Register the Module in nuxt.config.ts

Thêm @dodopayments/nuxt vào mảng modules, rồi ánh xạ thông tin xác thực của bạn vào runtimeConfig:
nuxt.config.ts
Đặt các biến môi trường này, chẳng hạn trong tệp .env ở thư mục gốc của dự án:Nuxt server đã build không đọc tệp .env của bạn. Khi chạy, Nuxt chỉ ghi đè giá trị runtimeConfig bằng biến khớp với đường dẫn của biến đó, chẳng hạn NUXT_PRIVATE_RETURN_URL cho private.returnUrl, vì vậy bạn cũng phải đặt các biến này trong môi trường hosting.
Không bao giờ commit tệp .env hoặc các secret vào version control.

Ví dụ về trình xử lý API Route

Các ví dụ tạo các route máy chủ trong thư mục server/routes/api/. Nuxt định tuyến từng tệp theo tên và hậu tố method, vì vậy checkout.get.ts xử lý GET /api/checkout.
Sử dụng trình xử lý này để thêm checkout của Dodo Payments vào ứng dụng Nuxt. Route GET cung cấp static checkout. Route POST cung cấp checkout session hoặc dynamic checkout khi bạn đặt type: "dynamic".
Tạo route GET cho static checkout:
checkout.post.ts cung cấp một luồng POST. Sử dụng ví dụ dynamic checkout hoặc ví dụ checkout session:
Nếu productId bị thiếu hoặc không hợp lệ, trình xử lý sẽ trả về phản hồi 400.
Để kiểm thử các route, hãy gửi những request sau:

Trình xử lý Checkout Route

Trình xử lý checkout hỗ trợ cả ba cách nhận thanh toán bằng Dodo Payments:
  • Static Payment Links: URL có thể chia sẻ, thu tiền mà không cần code.
  • Dynamic Payment Links: 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à luồng được khuyến nghị.
checkoutHandler nhận các tùy chọn sau:

Query Parameters được hỗ trợ

string
bắt buộc
Mã định danh product, chẳng hạn ?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
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
ZIP hoặc mã bưu chính của khách hàng.
boolean
Đặt thành true để tắt field họ tên đầy đủ.
boolean
Đặt thành true để tắt field tên.
boolean
Đặt thành true để tắt field họ.
boolean
Đặt thành true để tắt field email.
boolean
Đặt thành true để tắt field quốc gia.
boolean
Đặt thành true để tắt field dòng địa chỉ.
boolean
Đặt thành true để tắt field thành phố.
boolean
Đặt thành true để tắt field bang.
boolean
Đặt thành true để tắt field ZIP code.
string
Đơn vị tiền tệ thanh toán, chẳng hạn 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; chẳng hạn 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 dưới dạng metadata.
Trình xử lý thêm returnUrl từ config của nó vào link dưới dạng redirect_url.
Nếu productId bị thiếu, trình xử lý trả về phản hồi 400. Query parameter không hợp lệ và product ID không tồn tại cũng trả về 400.

Định dạng phản hồi

Static checkout trả về JSON response chứa URL checkout. Ở test mode, URL sử dụng test.checkout.dodopayments.com.
Dynamic checkout proxy các endpoint POST /payments và POST /subscriptions đã deprecated. Tính năng này vẫn hoạt động với các integration hiện có, nhưng integration mới nên sử dụng checkout session.

Định dạng phản hồi

Dynamic checkout trả về JSON response chứa URL checkout:
Checkout session tạo checkout được host cho giao dịch mua một lần và subscription, với toàn quyền tùy chỉnh. product_cart là field bắt buộc duy nhất. Nếu body không có return_url, trình xử lý sử dụng returnUrl từ config của nó.Để biết thêm chi tiết và tất cả field được hỗ trợ, hãy xem Checkout Sessions Integration Guide.Session được tạo với payment_method_id không trả về URL checkout, vì vậy trình xử lý phản hồi 400. Để tính phí bằng payment method đã lưu, hãy tạo session bằng SDK.

Định dạng phản hồi

Checkout session trả về JSON response chứa URL checkout:

Trình xử lý Customer Portal Route

Trình xử lý Customer Portal route 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 đó.
Trình xử lý không kiểm tra người đang gọi nó. Bất kỳ ai request route này với customer ID đều nhận được portal của customer đó. Hãy bảo vệ route bằng cơ chế authentication của riêng bạn và chỉ truyền customer ID của người dùng đã đăng nhập.

Query Parameters

string
bắt buộc
Customer ID cho portal session, chẳng hạn ?customer_id=cus_123.
boolean
Nếu được đặt thành true, Dodo Payments cũng gửi email chứa liên kết portal cho khách hàng.
Kể từ @dodopayments/nuxt 0.2.11, handler trả về HTTP 400 nếu thiếu customer_id và HTTP 500 nếu không thể tạo portal session. Các phiên bản trước trả về HTTP 200 với JSON body { "status": 400, "body": "Missing customer_id in query parameters" }. Để dựa vào HTTP status, hãy nâng cấp lên 0.2.11 hoặc phiên bản mới hơn.

Trình xử lý Webhook Route

Trình xử lý webhook route xác minh từng request trước khi chạy code của bạn:
  • Method: Chỉ hỗ trợ request POST. Các method khác trả về 405.
  • Signature Verification: Xác minh raw request body và các header webhook-id, webhook-timestamp và webhook-signature bằng webhookKey, 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: 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 onPayload cho mọi event, sau đó gọi handler tương ứng với type của event và trả về 200.
Adaptor không bắt các lỗi được throw trong handler của bạn. Các lỗi đó lan truyền đến Nuxt và request sẽ thất bại.

Trình xử lý Webhook Event được hỗ trợ

Mỗi handler nhận payload đã được xác minh cho event type tương ứng:
Để biết ý nghĩa của từng event, hãy xem Webhook Event Guide.

Prompt cho LLM

Sao chép prompt này vào AI coding assistant để thêm module vào dự án của bạn. Để cung cấp cho agent tài liệu và kỹ năng của Dodo Payments, hãy cài đặt Agent Plugin.
Lần sửa đổi cuối 26 tháng 9, 2026