Skip to main content
Python SDK cung cấp quyền truy cập có kiểu dữ liệu cho các ứng dụng Python đến REST API của Dodo Payments. SDK có một client đồng bộ, DodoPayments, và một client bất đồng bộ, AsyncDodoPayments, cả hai đều được xây dựng trên httpx. Các tham số request lồng nhau là các typed dictionary, còn response là các Pydantic model.

Cài đặt

Cài đặt SDK bằng pip:
Để sử dụng aiohttp làm HTTP backend cho client bất đồng bộ, hãy cài đặt extra aiohttp:
Để xác minh chữ ký webhook bằng client.webhooks.unwrap(), hãy cài đặt thêm extra webhooks: pip install "dodopayments[webhooks]".
SDK yêu cầu Python 3.9 trở lên. Sử dụng bản phát hành Python ổn định mới nhất để nhận các bản cập nhật bảo mật.

Bắt đầu nhanh

Client đồng bộ

Tạo client, sau đó tạo checkout session:
Nếu không truyền bearer_token, client sẽ đọc biến môi trường DODO_PAYMENTS_API_KEY. Nếu không truyền environment, client sẽ kết nối đến live mode. Test mode API key chỉ hoạt động với environment="test_mode".

Client bất đồng bộ

AsyncDodoPayments có cùng các method với DodoPayments. Hãy await từng lần gọi:
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.

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

Pythonic Interface

Keyword argument cho các tham số, kiểu TypedDict cho các object lồng nhau và Pydantic model cho response.

Async/Await

AsyncDodoPayments cho asyncio, với aiohttp làm HTTP backend tùy chọn.

Type Hints

Type hint trên mọi method, hỗ trợ autocomplete trong editor và type checking với mypy.

Auto-Pagination

Các method list trả về iterator, tự tải trang tiếp theo khi bạn lặp.

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 argument tương ứng: Nếu DODO_PAYMENTS_BASE_URL được thiết lập và bạn cũng truyền environment, constructor sẽ báo lỗi “Ambiguous URL”. Để sử dụng environment trong trường hợp đó, hãy truyền base_url=None. Để xác minh webhook, truyền raw request body và headers vào client.webhooks.unwrap(payload, headers=headers). Method này kiểm tra chữ ký bằng webhook key của bạn và trả về event đã được parse. client.webhooks.unsafe_unwrap(payload) parse body mà không xác minh, vì vậy chỉ sử dụng method này để testing. Xem Webhooks.

Timeout

Theo mặc định, request sẽ timeout sau 1 phút, với connection timeout là 5 giây. Truyền timeout theo đơn vị giây hoặc một httpx.Timeout để thiết lập riêng giới hạn read, write và connect:
Khi request timeout, SDK sẽ raise APITimeoutError. Các request bị timeout sẽ được retry, vì vậy một lần gọi có thể mất nhiều thời gian hơn timeout trước khi thất bại.

Retry

Thiết lập max_retries trên client hoặc trên một request riêng lẻ bằng with_options():
SDK retry các lỗi kết nối và các 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ẽ raise một subclass của dodopayments.APIError: Các status exception kế thừa từ dodopayments.APIStatusError, có các attribute status_code và response. APITimeoutError là một subclass của APIConnectionError.

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 tùy chọn session, hãy xem Checkout Sessions.

Quản lý Customer

Tạo customer với địa chỉ email và tên, sau đó retrieve customer bằng ID:

Xử lý Subscription

Tạo subscription, charge một on-demand subscription và đọc lịch sử usage của subscription.
POST /subscriptions (method subscriptions.create của SDK) đã deprecated. Method này vẫn hoạt động đối 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, là 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. retrieve_usage_history trả về một danh sách được phân trang, bạn có thể lặp qua danh sách này như minh họa trong 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 một giá trị duy nhất cho mỗi event. 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 trước đó, 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.

Liệt kê và Retrieve Event

Retrieve một event duy nhất bằng event_id hoặc liệt kê các event được lọc theo customer và event name:
usage_events.list cũng chấp nhận các filter meter_id, start và end.

Pagination

Auto-Pagination

Các method list trả về một iterator, tự tải trang tiếp theo khi bạn lặp:

Async Pagination

Với async client, hãy lặp bằng async for:

Manual Pagination

Để làm việc với từng trang một, đọc items và gọi has_next_page() cùng get_next_page(). next_page_info() trả về các parameter cho request tiếp theo:

Cấu hình HTTP Client

Để thêm proxy, custom transport hoặc các thiết lập httpx khác, hãy truyền http_client của riêng bạn. DefaultHttpxClient giữ nguyên connection limit, timeout và redirect setting mặc định của SDK:
Để sử dụng HTTP client khác cho một request, hãy gọi client.with_options(http_client=...).

Async với AIOHTTP

Theo mặc định, async client gửi request bằng httpx. Để có concurrency tốt hơn, hãy cài đặt extra aiohttp và truyền DefaultAioHttpClient() làm http_client:

Logging

SDK ghi log bằng module logging của standard library. Để bật logging, đặt DODO_PAYMENTS_LOG thành info:
Để xem chi tiết hơn, đặt thành debug:

Tích hợp Framework

Các ví dụ này tạo checkout session từ một web endpoint và trả về URL của session.

FastAPI

Endpoint này sử dụng async client:

Django

View này sử dụng sync client:

Tài nguyên

GitHub Repository

Source code, các bản phát hành 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 tính năng.

Hỗ trợ

Để được hỗ trợ về Python 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