Skip to main content
TypeScript SDK cung cấp cho mã TypeScript và JavaScript phía server quyền truy cập có kiểu vào REST API của Dodo Payments. SDK bao gồm định nghĩa kiểu cho mọi request và response, typed error, tự động retry, timeout và auto-pagination.

Installation

Cài đặt package dodopayments bằng package manager của bạn:

Bắt đầu nhanh

Tạo client, sau đó tạo checkout session:
Nếu bạn bỏ qua bearerToken, client sẽ đọc biến môi trường DODO_PAYMENTS_API_KEY. Nếu bạn bỏ qua environment, client sẽ kết nối đến live mode. Test mode API key chỉ hoạt động với environment: 'test_mode'.
Lưu API key trong biến môi trường hoặc secrets manager. Không bao giờ commit chúng vào version control hoặc để lộ trong mã phía client.

Tính năng cốt lõi

TypeScript First

Định nghĩa kiểu cho mọi request parameter và response field, hiển thị ngay trong editor của bạn.

Auto-Pagination

Các list method sẽ tự động tải trang tiếp theo khi bạn lặp qua chúng bằng for await...of.

Error Handling

Một typed error class cho từng HTTP error status, kèm status, headers và response body.

Smart Retries

Mặc định retry hai lần, với exponential backoff, đối với connection error và retryable status code.

Cấu hình

Biến môi trường

Lưu API key trong một biến môi trường:
.env
Client sẽ đọc các biến này khi bạn không truyền option tương ứng: Nếu base URL được thiết lập và bạn đồng thời truyền environment, constructor sẽ throw lỗi “Ambiguous URL”. Để sử dụng environment trong trường hợp đó, hãy truyền baseURL: null. Để xác minh webhook, truyền raw request body và headers vào client.webhooks.unwrap(rawBody, { headers }). Phương thức này kiểm tra signature bằng webhook key của bạn và trả về event đã được parse. client.webhooks.unsafeUnwrap(rawBody) parse body mà không xác minh, vì vậy chỉ sử dụng phương thức này để testing. Xem Webhooks.

Cấu hình timeout

Theo mặc định, request sẽ timeout sau 1 phút. Thiết lập timeout, tính bằng milliseconds, trên client hoặc cho một request đơn lẻ:
Khi request timeout, SDK sẽ throw APIConnectionTimeoutError. Request bị timeout sẽ được retry, vì vậy một call có thể mất nhiều thời gian hơn timeout trước khi thất bại.

Cấu hình retry

Thiết lập maxRetries trên client hoặc cho một request đơn lẻ:
SDK sẽ retry connection error và response có status 408, 409, 429 hoặc 500 trở lên. Theo mặc định, SDK retry hai lần với exponential backoff.
Khi request vẫn thất bại, SDK sẽ throw một subclass của DodoPayments.APIError. Mỗi error có các property status, headers và error (response body). Kiểm tra một class cụ thể bằng instanceof, chẳng hạn err instanceof DodoPayments.RateLimitError:

Các thao tác phổ biến

Các ví dụ trong phần này sử dụng client từ Bắt đầu nhanh.

Tạo Checkout Session

Tạo checkout session, sau đó redirect customer đến checkout_url được trả về:
Mỗi checkout_url chỉ hoạt động một lần và hết hạn sau 24 giờ. Để xem mọi session option, hãy xem Checkout Sessions.

Quản lý Customer

Tạo customer với email address và name, sau đó retrieve bằng ID:

Xử lý Subscription

Tạo subscription, charge một on-demand subscription và đọc usage history của subscription.
POST /subscriptions (method subscriptions.create của SDK) đã deprecated. Method này vẫn hoạt động với các integration hiện có, nhưng integration mới nên tạo subscription thông qua Checkout Session.
billing chỉ yêu cầu country, một mã quốc gia ISO gồm hai chữ cái. customer nhận { customer_id } để gắn customer hiện có hoặc { email, name? } để tạo customer mới. charge dành cho on-demand subscriptions, còn product_price được tính theo đơn vị nhỏ nhất của currency. retrieveUsageHistory trả về một paginated list mà bạn có thể lặp qua như mô tả trong Auto-Pagination.

Usage-Based Billing

Ingest Usage Event

Gửi usage event cho một customer:
event_id là idempotency key, vì vậy hãy cung cấp cho mỗi event một giá trị duy nhất. Nếu cùng một event_id xuất hiện hai lần trong một request, toàn bộ request sẽ bị từ chối. Nếu một event_id đã được ingest, event mới sẽ bị bỏ qua. Một request chấp nhận tối đa 1.000 event. timestamp mặc định là thời gian hiện tại và sẽ bị từ chối nếu sớm hơn hiện tại quá 1 giờ hoặc muộn hơn hiện tại quá 5 phút.

Retrieve Usage Event

Retrieve một event đơn lẻ bằng event_id hoặc liệt kê event được lọc theo customer, event name và time range:
usageEvents.list cũng chấp nhận meter_id và trả về một paginated list.

Cấu hình proxy

Để gửi request thông qua proxy, truyền proxy setting của runtime vào fetchOptions.

Node.js (Sử dụng Undici)

Truyền một undici ProxyAgent làm dispatcher:

Bun

Thiết lập option proxy:

Deno

Tạo HTTP client với Deno.createHttpClient và truyền nó làm client:

Logging

Thiết lập log level bằng client option logLevel hoặc biến môi trường DODO_PAYMENTS_LOG. Client option sẽ ghi đè biến môi trường.
Ở level debug, SDK log mọi HTTP request và response, bao gồm headers và bodies. Một số authentication header sẽ được redact, nhưng dữ liệu nhạy cảm trong body vẫn có thể hiển thị.
Các log level, từ verbose nhiều nhất đến ít nhất, là:
  • 'debug': Debug message, info, warning và error.
  • 'info': Info message, warning và error.
  • 'warn': Warning và error. Đây là mặc định.
  • 'error': Chỉ error.
  • 'off': Không logging.
Theo mặc định, SDK log vào console. Để sử dụng pino, winston hoặc logging library khác, hãy truyền logger của bạn làm option logger; logLevel vẫn kiểm soát message nào được gửi đến logger. Log message chỉ dùng cho debugging và format của chúng có thể thay đổi giữa các release.

Migration từ Node.js SDK

Nếu bạn sử dụng Node.js SDK cũ, hãy làm theo migration guide để nâng cấp. SDK hiện tại sử dụng API fetch tích hợp sẵn thay cho node-fetch, yêu cầu Node.js 20, TypeScript 4.9 và Jest 28 trở lên, đồng thời bao gồm migration tool cập nhật phần lớn code của bạn.

View Migration Guide

Tìm hiểu cách migrate từ Node.js SDK sang TypeScript SDK

Auto-Pagination

Các list method trả về paginated result. Lặp qua bằng for await...of để lấy item từ mọi page. SDK sẽ request page tiếp theo khi cần:
Để làm việc với từng page một, đọc page.items và gọi hasNextPage() cùng getNextPage():
Để thiết lập page size, truyền page_size vào list method, chẳng hạn client.payments.list({ page_size: 50 }).

Yêu cầu

SDK hỗ trợ TypeScript 4.9 trở lên và các runtime sau:
  • Web browser (Chrome, Firefox, Safari, Edge và các browser khác được cập nhật mới nhất)
  • Node.js 20 LTS trở lên, với các version (non-EOL)
  • Deno 1.28.0 trở lên
  • Bun 1.0 trở lên
  • Cloudflare Workers
  • Vercel Edge Runtime
  • Jest 28 trở lên với environment "node" (environment "jsdom" không được hỗ trợ)
  • Nitro 2.6 trở lên
React Native không được hỗ trợ.

Tài nguyên

GitHub Repository

Mã nguồn, các release và danh sách method đầy đủ.

API Reference

Mọi endpoint, parameter và response.

Discord Community

Đặt câu hỏi và trao đổi với các developer khác.

Report Issues

Báo cáo bug hoặc yêu cầu feature.

Hỗ trợ

Để được hỗ trợ về TypeScript SDK:

Đóng góp

Để đóng góp, hãy đọc hướng dẫn đóng góp.
Lần sửa đổi cuối 26 tháng 9, 2026