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:aiohttp:
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: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:
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
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ềntimeout 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:
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ậpmax_retries trên client hoặc trên một request riêng lẻ bằng with_options():
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ụngclient từ Bắt đầu nhanh.
Tạo Checkout Session
Tạo checkout session, sau đó redirect customer đếncheckout_url được trả về:
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.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ằngevent_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ằngasync for:
Manual Pagination
Để làm việc với từng trang một, đọcitems 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ậphttpx 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:
client.with_options(http_client=...).
Async với AIOHTTP
Theo mặc định, async client gửi request bằnghttpx. Để 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 modulelogging của standard library. Để bật logging, đặt DODO_PAYMENTS_LOG thành info:
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:- Discord: Tham gia community server để được hỗ trợ theo thời gian thực.
- Email: Liên hệ support@dodopayments.com.
- GitHub: Mở issue trên repository.