DodoPayments, und einen asynchronen Client, AsyncDodoPayments, die beide auf httpx basieren. Verschachtelte Anfrageparameter sind typisierte Dictionaries, und Antworten sind Pydantic-Modelle.
Installation
Installieren Sie das SDK mit pip:aiohttp-Extra:
client.webhooks.unwrap() zu überprüfen, installieren Sie zusätzlich das webhooks-Extra: pip install "dodopayments[webhooks]".
Das SDK erfordert Python 3.9 oder höher. Verwenden Sie die neueste stabile Python-Version, um Sicherheitsupdates zu erhalten.
Schnellstart
Synchroner Client
Erstellen Sie einen Client und anschließend eine Checkout-Sitzung:bearer_token weglassen, liest der Client die Umgebungsvariable DODO_PAYMENTS_API_KEY. Wenn Sie environment weglassen, verbindet sich der Client mit dem Live-Modus. Ein API-Schlüssel für den Testmodus funktioniert nur mit environment="test_mode".
Asynchroner Client
AsyncDodoPayments verfügt über dieselben Methoden wie DodoPayments. Warten Sie jeden Aufruf mit await ab:
Kernfunktionen
Pythonic Interface
Schlüsselwortargumente für Parameter,
TypedDict-Typen für verschachtelte Objekte und Pydantic-Modelle für Antworten.Async/Await
AsyncDodoPayments für asyncio mit aiohttp als optionalem HTTP-Backend.Type Hints
Type Hints für jede Methode zur Autovervollständigung im Editor und zur Typprüfung mit mypy.
Auto-Pagination
Listenmethoden geben Iteratoren zurück, die beim Durchlaufen die nächste Seite abrufen.
Konfiguration
Umgebungsvariablen
Speichern Sie Ihren API-Schlüssel in einer Umgebungsvariablen:.env
Wenn
DODO_PAYMENTS_BASE_URL gesetzt ist und Sie außerdem environment übergeben, löst der Konstruktor einen Fehler vom Typ “Ambiguous URL” aus. Um in diesem Fall environment zu verwenden, übergeben Sie base_url=None.
Um einen Webhook zu überprüfen, übergeben Sie den unveränderten Anfrage-Body und die Header an client.webhooks.unwrap(payload, headers=headers). Die Signatur wird mit Ihrem Webhook-Schlüssel überprüft und das geparste Ereignis zurückgegeben. client.webhooks.unsafe_unwrap(payload) parst den Body, ohne ihn zu überprüfen. Verwenden Sie es daher nur für Tests. Siehe Webhooks.
Timeouts
Anfragen laufen standardmäßig nach 1 Minute ab, mit einem Verbindungs-Timeout von 5 Sekunden. Übergeben Sietimeout in Sekunden oder ein httpx.Timeout für separate Lese-, Schreib- und Verbindungslimits:
APITimeoutError aus. Anfragen mit Timeout werden erneut versucht. Daher kann ein Aufruf länger als timeout dauern, bevor er fehlschlägt.
Wiederholungsversuche
Setzen Siemax_retries auf dem Client oder bei einer einzelnen Anfrage mit with_options():
dodopayments.APIError aus:
Die Statusausnahmen erben von
dodopayments.APIStatusError, das über die Attribute status_code und response verfügt. APITimeoutError ist eine Unterklasse von APIConnectionError.
Häufige Vorgänge
Die Beispiele in diesem Abschnitt verwendenclient aus dem Schnellstart.
Checkout-Sitzung erstellen
Erstellen Sie eine Checkout-Sitzung und leiten Sie den Kunden anschließend an die zurückgegebenecheckout_url weiter:
checkout_url funktioniert einmal und läuft nach 24 Stunden ab. Eine Übersicht über alle Sitzungsoptionen finden Sie unter Checkout-Sitzungen.
Kunden verwalten
Erstellen Sie einen Kunden mit einer E-Mail-Adresse und einem Namen und rufen Sie ihn anschließend über seine ID ab:Abonnements verwalten
Erstellen Sie ein Abonnement, belasten Sie ein On-Demand-Abonnement und lesen Sie den Nutzungsverlauf eines Abonnements aus.billing erfordert nur country, einen zweistelligen ISO-Ländercode. customer akzeptiert {"customer_id": ...}, um einen bestehenden Kunden zu verknüpfen, oder {"email": ..., "name": ...}, um einen Kunden zu erstellen. charge ist für On-Demand-Abonnements vorgesehen, und product_price wird in der kleinsten Währungseinheit angegeben. retrieve_usage_history gibt eine paginierte Liste zurück, die Sie wie unter Paginierung gezeigt durchlaufen können.Nutzungsbasierte Abrechnung
Nutzungsereignisse erfassen
Senden Sie Nutzungsereignisse für einen Kunden:event_id ist der Idempotenzschlüssel. Weisen Sie daher jedem Ereignis einen eindeutigen Wert zu. Wenn derselbe event_id zweimal in einer Anfrage vorkommt, wird die gesamte Anfrage abgelehnt. Wenn ein event_id bereits erfasst wurde, wird das neue Ereignis ignoriert. Eine Anfrage akzeptiert bis zu 1.000 Ereignisse. timestamp wird standardmäßig auf die aktuelle Zeit gesetzt und abgelehnt, wenn sie mehr als 1 Stunde in der Vergangenheit oder mehr als 5 Minuten in der Zukunft liegt.Ereignisse auflisten und abrufen
Rufen Sie ein einzelnes Ereignis über seinenevent_id ab oder listen Sie Ereignisse auf, gefiltert nach Kunde und Ereignisnamen:
usage_events.list akzeptiert außerdem die Filter meter_id, start und end.
Paginierung
Automatische Paginierung
Listenmethoden geben einen Iterator zurück, der beim Durchlaufen die nächste Seite abruft:Asynchrone Paginierung
Verwenden Sie mit dem asynchronen Clientasync for für die Schleife:
Manuelle Paginierung
Um jeweils mit einer Seite zu arbeiten, lesen Sieitems und rufen Sie has_next_page() und get_next_page() auf. next_page_info() gibt die Parameter für die nächste Anfrage zurück:
Konfiguration des HTTP-Clients
Um einen Proxy, einen benutzerdefinierten Transport oder anderehttpx-Einstellungen hinzuzufügen, übergeben Sie Ihren eigenen http_client. DefaultHttpxClient übernimmt die standardmäßigen Verbindungslimits, Timeout- und Weiterleitungseinstellungen des SDK:
client.with_options(http_client=...) auf.
Async mit AIOHTTP
Standardmäßig sendet der asynchrone Client Anfragen mithttpx. Für eine bessere Nebenläufigkeit installieren Sie das aiohttp-Extra und übergeben Sie DefaultAioHttpClient() als http_client:
Protokollierung
Das SDK protokolliert über daslogging-Modul der Standardbibliothek. Um die Protokollierung zu aktivieren, setzen Sie DODO_PAYMENTS_LOG auf info:
debug:
Integration in Frameworks
Diese Beispiele erstellen eine Checkout-Sitzung über einen Web-Endpunkt und geben deren URL zurück.FastAPI
Dieser Endpunkt verwendet den asynchronen Client:Django
Diese View verwendet den synchronen Client:Ressourcen
GitHub Repository
Quellcode, Releases und die vollständige Methodenliste.
API Reference
Jeder Endpunkt, Parameter und jede Antwort.
Discord Community
Stellen Sie Fragen und tauschen Sie sich mit anderen Entwicklern aus.
Report Issues
Melden Sie Fehler oder schlagen Sie Funktionen vor.
Support
Hilfe zum Python SDK:- Discord: Treten Sie dem Community-Server bei, um schnelle Hilfe zu erhalten.
- E-Mail: Kontaktieren Sie support@dodopayments.com.
- GitHub: Erstellen Sie ein Issue im Repository.