Skip to main content
Das PHP SDK ermöglicht PHP-8.1+-Anwendungen den Zugriff auf die Dodo Payments REST API. Methoden verwenden benannte Parameter, Antworten sind typisierte Objekte und Composer lädt das SDK per PSR-4-Autoloading.

Installation

Installieren Sie das SDK mit Composer:
Das SDK benötigt PHP 8.1.0 oder höher und Composer. Es sendet Anfragen über einen PSR-18-HTTP-Client in Ihrem Projekt, beispielsweise Guzzle, den es mit php-http/discovery findet.

Schnellstart

Erstellen Sie einen Client und anschließend eine Checkout-Sitzung:
Wenn Sie bearerToken nicht angeben, liest der Client die Umgebungsvariable DODO_PAYMENTS_API_KEY. Wenn Sie baseUrl nicht angeben, liest der Client DODO_PAYMENTS_BASE_URL und verbindet sich mit dem Live-Modus (https://live.dodopayments.com), wenn auch diese Variable nicht gesetzt ist. Ein API-Schlüssel für den Testmodus funktioniert nur mit der URL des Testmodus, https://test.dodopayments.com.
Bewahren Sie API-Schlüssel in Umgebungsvariablen oder einem Secrets Manager auf. Legen Sie sie niemals in Ihrer Codebasis offen und committen Sie sie nicht in die Versionsverwaltung.

Kernfunktionen

PSR-4 Compliant

Composer lädt den Namespace Dodopayments per PSR-4-Autoloading.

Modern PHP

Entwickelt für PHP 8.1 oder höher, mit typisierten Parametern und strikten Typen.

Extensive Testing

Das SDK-Repository enthält eine Testsuite für die API-Dienste.

Exception Handling

Eine Exception-Klasse für jeden HTTP-Fehlerstatus sowie Exceptions für Timeouts und Verbindungsfehler.

Value Objects

Methoden verwenden benannte Parameter. Parameter mit einem Standardwert müssen per Namen übergeben werden. Um ein Value Object zu erstellen, verwenden Sie dessen statischen with-Konstruktor mit benannten Parametern:
Jedes Value Object verfügt außerdem über einen Builder:
Methoden akzeptieren auch einfache Arrays mit denselben camelCase-Schlüsseln, beispielsweise ["productID" => "pdt_123", "quantity" => 1]. Eigenschaften von Antworten verwenden ebenfalls camelCase-Namen, zum Beispiel $session->checkoutURL.

Konfiguration

Der Client-Konstruktor akzeptiert bearerToken, webhookKey, baseUrl und requestOptions. Wenn Sie diese nicht angeben, liest er DODO_PAYMENTS_API_KEY, DODO_PAYMENTS_WEBHOOK_KEY (Ihr Webhook-Signaturgeheimnis) und DODO_PAYMENTS_BASE_URL aus der Umgebung. Um einen Webhook zu verifizieren, übergeben Sie den unveränderten Request-Body und die Header an $client->webhooks->unwrap($body, headers: $headers). Die Methode prüft die Signatur mit Ihrem Webhook-Schlüssel, gibt das geparste Ereignis zurück und löst WebhookException aus, wenn die Prüfung fehlschlägt. Wenn Sie headers nicht angeben, verifiziert unwrap die Signatur nicht. $client->webhooks->unsafeUnwrap($body) parst den Body, ohne ihn zu verifizieren. Verwenden Sie diese Methode daher nur zum Testen. Siehe Webhooks.

Konfiguration der Wiederholungsversuche

Das SDK wiederholt bestimmte Fehler standardmäßig zweimal mit einem kurzen exponentiellen Backoff. Diese Fehler lösen einen Wiederholungsversuch aus:
  • Verbindungsfehler (Probleme mit der Netzwerkverbindung)
  • 408 Request Timeout
  • 409 Conflict
  • 429 Rate Limit
  • 500+ interne Fehler
  • Timeouts
Setzen Sie maxRetries in requestOptions – auf dem Client oder bei einer einzelnen Anfrage:
Anfragen laufen standardmäßig nach 60 Sekunden ab. Um das Limit zu ändern, setzen Sie timeout in Sekunden im selben requestOptions-Array.

Häufige Vorgänge

Die Beispiele in diesem Abschnitt verwenden den $client aus dem Schnellstart.

Checkout-Sitzung erstellen

Erstellen Sie eine Checkout-Sitzung und leiten Sie den Kunden anschließend zur zurückgegebenen checkoutURL weiter:
Jede Checkout-URL kann einmal verwendet werden und läuft nach 24 Stunden ab. Eine Übersicht über alle Optionen einer Sitzung finden Sie unter Checkout-Sitzungen.

Kunden verwalten

Erstellen Sie einen Kunden mit E-Mail-Adresse und Namen und rufen Sie ihn anschließend über seine ID ab:

Abonnements verwalten

Erstellen Sie ein Abonnement und belasten Sie es anschließend, wenn es sich um ein On-Demand-Abonnement handelt.
POST /subscriptions (die subscriptions->create-Methode des SDK) ist veraltet. Sie funktioniert weiterhin für bestehende Integrationen. Neue Integrationen sollten Abonnements jedoch über eine Checkout-Sitzung erstellen.
billing benötigt nur country, einen zweibuchstabigen ISO-Ländercode. Übergeben Sie AttachExistingCustomer::with(customerID: '...'), um einen bestehenden Kunden zu verknüpfen, oder NewCustomer::with(email: '...', name: '...'), um einen Kunden zu erstellen. Beide Klassen befinden sich im Namespace Dodopayments\Payments. charge ist für On-Demand-Abonnements vorgesehen, und productPrice wird in der kleinsten Währungseinheit angegeben.

Pagination

Listenmethoden geben ein Seitenobjekt zurück. getItems() gibt die Elemente der aktuellen Seite zurück, während pagingEachItem() jedes Element ab der aktuellen Seite zurückgibt und bei Bedarf weitere Seiten anfordert:
Um jeweils eine Seite weiterzugehen, rufen Sie hasNextPage() und getNextPage() auf.

Fehlerbehandlung

Wenn das SDK keine Verbindung zur API herstellen kann oder die API einen 4xx- oder 5xx-Status zurückgibt, löst das SDK eine Unterklasse von Dodopayments\Core\Exceptions\APIException aus:

Fehlertypen

Die Exception-Klasse hängt von der Ursache ab. Alle Klassen befinden sich im Namespace Dodopayments\Core\Exceptions:
Fangen Sie diese Exceptions rund um API-Aufrufe ab, damit Ihre Anwendung eine verständliche Nachricht anzeigen oder es später erneut versuchen kann. Bei einem wiederholbaren Fehler löst das SDK erst dann eine Exception aus, wenn seine automatischen Wiederholungsversuche fehlgeschlagen sind.

Erweiterte Verwendung

Nicht dokumentierte Endpunkte

Um einen Endpunkt aufzurufen, für den keine SDK-Methode vorhanden ist, verwenden Sie $client->request. Dabei werden dieselbe Authentifizierung und dieselben Wiederholungsversuche wie bei den SDK-Methoden verwendet:

Nicht dokumentierte Parameter

Um Parameter zu senden, die das SDK nicht definiert, übergeben Sie sie in requestOptions:
Ein extra*-Parameter mit demselben Namen wie ein dokumentierter Parameter überschreibt diesen.

Framework-Integration

Laravel

Verpacken Sie den Client in einer Serviceklasse. Dieses Beispiel legt die API-URL aus der konfigurierten Umgebung fest:
Fügen Sie die Einstellungen zu config/services.php hinzu:

Symfony

Erstellen Sie einen Service, der den API-Schlüssel über seinen Konstruktor erhält:
Registrieren Sie den Service in config/services.yaml:

Ressourcen

GitHub Repository

Quellcode, Releases und die vollständige Methodenliste.

API Reference

Jeder Endpunkt, jeder 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 neue Funktionen vor.

Support

Hilfe zum PHP SDK:

Mitwirken

Wenn Sie mitwirken möchten, lesen Sie die Richtlinien für Beiträge.
Zuletzt geändert am 26. September 2026