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:
Để 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:
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.