Chuyển đến nội dung chính
SDK Python cung cấp một giao diện Pythonic cho API Dodo Payments, cung cấp cả khách hàng đồng bộ và bất đồng bộ với các định nghĩa kiểu cho các yêu cầu và phản hồi. Nó hỗ trợ Python 3.7+ và bao gồm phạm vi kiểm tra toàn diện.

Cài đặt

Cài đặt SDK bằng pip:
pip install dodopayments
Để cải thiện hiệu suất async với aiohttp:
pip install dodopayments[aiohttp]
SDK yêu cầu Python 3.7 trở lên. Chúng tôi khuyên bạn nên sử dụng phiên bản Python ổn định mới nhất để có trải nghiệm tốt nhất và cập nhật bảo mật.

Bắt đầu nhanh

Khách hàng đồng bộ

import os
from dodopayments import DodoPayments

client = DodoPayments(
    bearer_token=os.environ.get("DODO_PAYMENTS_API_KEY"),  # This is the default and can be omitted
    environment="test_mode",  # defaults to "live_mode"
)

checkout_session_response = client.checkout_sessions.create(
    product_cart=[
        {
            "product_id": "product_id",
            "quantity": 1
        }
    ],
)
print(checkout_session_response.session_id)

Khách hàng bất đồng bộ

import os
import asyncio
from dodopayments import AsyncDodoPayments

client = AsyncDodoPayments(
    bearer_token=os.environ.get("DODO_PAYMENTS_API_KEY"),
    environment="test_mode",
)

async def main() -> None:
    checkout_session_response = await client.checkout_sessions.create(
        product_cart=[
            {
                "product_id": "product_id",
                "quantity": 1,
            }
        ],
    )
    print(checkout_session_response.session_id)

asyncio.run(main())
Luôn lưu trữ các khóa API của bạn một cách an toàn bằng cách sử dụng biến môi trường. Không bao giờ cam kết chúng vào hệ thống kiểm soát phiên bản.

Tính năng chính

Giao diện Pythonic

Mã Python sạch sẽ, theo phong cách idiomatic tuân theo các hướng dẫn PEP 8 và các quy ước của Python

Async/Await

Hỗ trợ đầy đủ cho các hoạt động bất đồng bộ với asyncio và tích hợp aiohttp tùy chọn

Gợi ý kiểu

Gợi ý kiểu hoàn chỉnh để hỗ trợ tốt hơn cho IDE và kiểm tra kiểu với mypy

Tự động phân trang

Phân trang tự động cho các phản hồi danh sách với vòng lặp đơn giản

Cấu hình

Biến môi trường

Cấu hình bằng cách sử dụng biến môi trường:
.env
DODO_PAYMENTS_API_KEY=your_api_key_here

Thời gian chờ

Cấu hình thời gian chờ yêu cầu toàn cục hoặc theo yêu cầu:
import httpx
from dodopayments import DodoPayments

# Configure default for all requests (default is 1 minute)
client = DodoPayments(
    timeout=20.0,  # 20 seconds
)

# More granular control
client = DodoPayments(
    timeout=httpx.Timeout(60.0, read=5.0, write=10.0, connect=2.0),
)

# Override per-request
client.with_options(timeout=5.0).checkout_sessions.create(
    product_cart=[
        {
            "product_id": "product_id",
            "quantity": 0,
        }
    ],
)

Thử lại

Cấu hình hành vi thử lại tự động:
from dodopayments import DodoPayments

# Configure default for all requests (default is 2)
client = DodoPayments(
    max_retries=0,  # disable retries
)

# Override per-request
client.with_options(max_retries=5).checkout_sessions.create(
    product_cart=[
        {
            "product_id": "product_id",
            "quantity": 0,
        }
    ],
)

Các hoạt động phổ biến

Tạo phiên thanh toán

Tạo một phiên thanh toán:
session = client.checkout_sessions.create(
    product_cart=[
        {
            "product_id": "prod_123",
            "quantity": 1
        }
    ],
    return_url="https://yourdomain.com/return"
)

print(f"Checkout URL: {session.url}")

Quản lý khách hàng

Tạo và truy xuất thông tin khách hàng:
# Create a customer
customer = client.customers.create(
    email="[email protected]",
    name="John Doe",
    metadata={
        "user_id": "12345"
    }
)

# Retrieve customer
customer = client.customers.retrieve("cus_123")
print(f"Customer: {customer.name} ({customer.email})")

Xử lý đăng ký

Tạo và quản lý các đăng ký định kỳ:
# Create a subscription
subscription = client.subscriptions.create(
    customer_id="cus_123",
    product_id="prod_456",
    price_id="price_789"
)

# Retrieve usage history
usage_history = client.subscriptions.retrieve_usage_history(
    subscription.id,
    start_date="2024-01-01T00:00:00Z"
)

Thanh toán dựa trên mức sử dụng

Nhập sự kiện sử dụng

Theo dõi các sự kiện tùy chỉnh cho thanh toán dựa trên mức sử dụng:
response = client.usage_events.ingest(
    events=[
        {
            "event_id": "api_call_12345",
            "customer_id": "cus_abc123",
            "event_name": "api_request",
            "timestamp": "2024-01-15T10:30:00Z",
            "metadata": {
                "endpoint": "/api/v1/users",
                "method": "GET",
                "tokens_used": "150"
            }
        }
    ]
)

Liệt kê và truy xuất sự kiện

# Get a specific event
event = client.usage_events.retrieve("api_call_12345")

# List events with filtering
events = client.usage_events.list(
    customer_id="cus_abc123",
    event_name="api_request",
    limit=20
)

for event in events.data:
    print(f"Event: {event.event_id} at {event.timestamp}")

Phân trang

Phân trang tự động

Lặp qua tất cả các mục một cách tự động:
from dodopayments import DodoPayments

client = DodoPayments()
all_payments = []

# Automatically fetches more pages as needed
for payment in client.payments.list():
    all_payments.append(payment)
print(all_payments)

Phân trang bất đồng bộ

import asyncio
from dodopayments import AsyncDodoPayments

client = AsyncDodoPayments()

async def main() -> None:
    all_payments = []
    # Iterate through items across all pages
    async for payment in client.payments.list():
        all_payments.append(payment)
    print(all_payments)

asyncio.run(main())

Phân trang thủ công

Để kiểm soát nhiều hơn về phân trang:
# Access items from current page
first_page = client.payments.list()
for payment in first_page.items:
    print(payment.brand_id)

# Check for more pages
if first_page.has_next_page():
    next_page = first_page.get_next_page()
    print(f"Fetched {len(next_page.items)} more items")

Cấu hình HTTP Client

Tùy chỉnh httpx cơ bản:
import httpx
from dodopayments import DodoPayments, DefaultHttpxClient

client = DodoPayments(
    base_url="http://my.test.server.example.com:8083",
    http_client=DefaultHttpxClient(
        proxy="http://my.test.proxy.example.com",
        transport=httpx.HTTPTransport(local_address="0.0.0.0"),
    ),
)

Async với aiohttp

Sử dụng aiohttp để cải thiện hiệu suất bất đồng bộ:
import asyncio
from dodopayments import DefaultAioHttpClient
from dodopayments import AsyncDodoPayments

async def main() -> None:
    async with AsyncDodoPayments(
        bearer_token="My Bearer Token",
        http_client=DefaultAioHttpClient(),
    ) as client:
        checkout_session_response = await client.checkout_sessions.create(
            product_cart=[
                {
                    "product_id": "product_id",
                    "quantity": 0,
                }
            ],
        )
        print(checkout_session_response.session_id)

asyncio.run(main())

Ghi log

Bật ghi log bằng cách thiết lập biến môi trường:
export DODO_PAYMENTS_LOG=info
Hoặc để ghi log ở mức độ gỡ lỗi:
export DODO_PAYMENTS_LOG=debug

Tích hợp Framework

FastAPI

from fastapi import FastAPI, HTTPException
from dodopayments import AsyncDodoPayments
from pydantic import BaseModel
import os

app = FastAPI()
dodo = AsyncDodoPayments(bearer_token=os.getenv("DODO_API_KEY"))

class CheckoutRequest(BaseModel):
    product_id: str
    quantity: int

@app.post("/create-checkout")
async def create_checkout(request: CheckoutRequest):
    try:
        session = await dodo.checkout_sessions.create(
            product_cart=[{
                "product_id": request.product_id,
                "quantity": request.quantity
            }],
            return_url="https://yourdomain.com/return"
        )
        return {"checkout_url": session.url}
    except Exception as e:
        raise HTTPException(status_code=400, detail=str(e))

Django

from django.http import JsonResponse
from dodopayments import DodoPayments
import os

dodo = DodoPayments(bearer_token=os.getenv("DODO_API_KEY"))

def create_payment(request):
    try:
        payment = dodo.payments.create(
            amount=5000,
            currency="USD",
            customer_id=request.user.customer_id
        )
        return JsonResponse({
            "status": "success",
            "payment_id": payment.id
        })
    except Exception as e:
        return JsonResponse({
            "status": "error",
            "message": str(e)
        }, status=400)

Tài nguyên

Hỗ trợ

Cần trợ giúp với SDK Python?

Đóng góp

Chúng tôi hoan nghênh các đóng góp! Kiểm tra hướng dẫn đóng góp để bắt đầu.