Hoppa till huvudinnehåll
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.9+ och inkluderar omfattande testtäckning.

Installation

Installera SDK:n med pip:
pip install dodopayments
För förbättrad asynkron prestanda med aiohttp:
pip install dodopayments[aiohttp]
SDK:n kräver Python 3.9 eller högre. Vi rekommenderar att använda 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:
.env
DODO_PAYMENTS_API_KEY=your_api_key_here

Tidsgränser

Konfigurera begärningstidsgränser globalt eller per begäran: TODO: KOD_PLACERINGSHÄMTA_9abf2b90689fdbeba7066523f30a85e5

Återförsök

Konfigurera automatisk återförsöksbeteende: TODO: KOD_PLACERINGSHÄMTA_756b4fbd1bc978e1469b7e14e5b3224d

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="customer@example.com",
    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

Auto-Pagination

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: TODO: KOD_PLACERINGSHÄMTA_cadb6979db1a61bc98dafee77d3e1c4c

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

TODO: KOD_PLACERINGSHÄMTA_bda064b9709a59a0808f70b518b6ba48

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.