Python SDK erbjuder ett Pythoniskt gränssnitt till Dodo Payments API, som tillhandahåller både synkrona och asynkrona klienter med typdefinitioner för förfrågningar och svar. Det stöder Python 3.7+ och inkluderar omfattande testtäckning.
Installation
Installera SDK:n med pip:
För förbättrad asynkron prestanda med aiohttp:
pip install dodopayments[aiohttp]
SDK:n kräver Python 3.7 eller högre. Vi rekommenderar att du använder den senaste stabila versionen av Python för bästa upplevelse och säkerhetsuppdateringar.
Snabbstart
Synkron Klient
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)
Asynkron Klient
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())
Förvara alltid dina API-nycklar säkert med hjälp av miljövariabler. Kom aldrig ihåg dem i versionskontroll.
Kärnfunktioner
Pythoniskt Gränssnitt Rent, idiomatiskt Python-kod som följer PEP 8-riktlinjer och Python-konventioner
Async/Await Fullt stöd för asynkrona operationer med asyncio och valfri aiohttp-integration
Typhintar Fullständiga typhintar för bättre IDE-stöd och typkontroll med mypy
Auto-Pagination Automatisk paginering för listrespons med enkel iteration
Konfiguration
Miljövariabler
Konfigurera med hjälp av miljövariabler:
DODO_PAYMENTS_API_KEY = your_api_key_here
Tidsgränser
Konfigurera begärningstidsgränser globalt eller per begäran:
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 ,
}
],
)
Återförsök
Konfigurera automatisk återförsöksbeteende:
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 ,
}
],
)
Vanliga Operationer
Skapa en Checkout-session
Generera en checkout-session:
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 } " )
Hantera Kunder
Skapa och hämta kundinformation:
# 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 } )" )
Hantera Prenumerationer
Skapa och hantera återkommande prenumerationer:
# 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"
)
Användningsbaserad Fakturering
Ingest Usage Events
Spåra anpassade händelser för användningsbaserad fakturering:
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"
}
}
]
)
Lista och Hämta Händelser
# 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 } " )
Paginering
Iterera genom alla objekt automatiskt:
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)
Asynkron Paginering
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())
Manuell Paginering
För mer kontroll över paginering:
# 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" )
HTTP Klientkonfiguration
Anpassa den underliggande httpx klienten:
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 med aiohttp
Använd aiohttp för förbättrad asynkron prestanda:
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())
Loggning
Aktivera loggning genom att ställa in miljövariabeln:
export DODO_PAYMENTS_LOG = info
Eller för loggning på debug-nivå:
export DODO_PAYMENTS_LOG = debug
Ramverksintegration
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 )
Resurser
Support
Behöver du hjälp med Python SDK:n?
Bidra
Vi välkomnar bidrag! Kolla in bidragsriktlinjerna för att komma igång.