Skip to main content
Das Java SDK ermöglicht Java-Anwendungen typisierten Zugriff auf die REST API von Dodo Payments. Es verwendet durchgehend Java-Typen: Optional für Felder, die fehlen können, Stream zum Durchlaufen von Ergebnissen und CompletableFuture für asynchrone Aufrufe.

Installation

Maven

Fügen Sie die Abhängigkeit zu Ihrer pom.xml hinzu:
pom.xml

Gradle

Fügen Sie die Abhängigkeit zu Ihrem build.gradle.kts hinzu:
build.gradle.kts
SDK-Releases fügen Unterstützung für API-Änderungen hinzu. Um die neueste Version zu finden, prüfen Sie Maven Central.
Das SDK erfordert Java 8 oder höher und läuft daher auch unter Java 11, 17 und 21.

Schnellstart

Erstellen Sie einen Client und anschließend eine Checkout-Sitzung:
fromEnv() stellt die Verbindung standardmäßig mit dem Live-Modus her, sofern DODO_PAYMENTS_BASE_URL oder dodopayments.baseUrl nichts anderes festlegt. Informationen zur Verwendung des Testmodus finden Sie unter Testmodus. Ein API-Schlüssel für den Testmodus funktioniert nur im Testmodus.
Bewahren Sie API-Schlüssel in Umgebungsvariablen, Systemeigenschaften oder einem Secrets Manager auf. Hardcodieren Sie sie niemals in Ihrem Quellcode.

Kernfunktionen

Type Safety

Typisierte Request- und Response-Klassen für Prüfungen zur Compile-Zeit.

Shared Client

Erstellen Sie einen Client und verwenden Sie ihn für mehrere Requests wieder: Er verwaltet die Verbindung sowie die Thread-Pools. Request- und Response-Objekte sind unveränderlich.

Builder Pattern

Jede Request-Klasse verfügt über einen Builder, und toBuilder() erstellt eine modifizierte Kopie.

Async Support

client.async() gibt einen Client zurück, dessen Methoden CompletableFuture zurückgeben.

Konfiguration

Umgebungsvariablen

fromEnv() liest diese Umgebungsvariablen oder die entsprechenden Systemeigenschaften. Systemeigenschaften haben Vorrang:
.env
Der API-Schlüssel stammt aus DODO_PAYMENTS_API_KEY oder dodopayments.apiKey. Das Webhook-Signaturgeheimnis stammt aus DODO_PAYMENTS_WEBHOOK_KEY oder dodopayments.webhookKey und die Basis-URL aus DODO_PAYMENTS_BASE_URL oder dodopayments.baseUrl. Erstellen Sie einen Client und verwenden Sie ihn wieder, da jeder Client über einen eigenen Verbindungs- und Thread-Pool verfügt. Um einen Webhook zu verifizieren, übergeben Sie den unveränderten Request-Body und die Header an client.webhooks().unwrap(UnwrapWebhookParams.builder().body(rawBody).headers(headers).build()), wobei headers ein com.dodopayments.api.core.http.Headers ist. Die Methode prüft die Signatur mit Ihrem Webhook-Schlüssel und gibt das geparste Event zurück oder löst DodoPaymentsWebhookException aus. Ohne Header verifiziert unwrap die Signatur nicht. client.webhooks().unsafeUnwrap(rawBody) parst den Body, ohne ihn zu verifizieren; verwenden Sie die Methode daher nur zum Testen. Siehe Webhooks.

Manuelle Konfiguration

Legen Sie jede Option im Builder fest:
Standardmäßig führt der Client zwei Wiederholungsversuche durch und bricht nach 1 Minute mit einem Timeout ab. Er wiederholt Requests bei Verbindungsfehlern und bei Responses mit dem Status 408, 409, 429 oder 500 und höher. Um das Timeout für einen einzelnen Aufruf zu überschreiben, übergeben Sie RequestOptions.builder().timeout(Duration.ofSeconds(30)).build() als zweites Argument der Methode. responseValidation(true) prüft vorab, ob die gesamte Response den erwarteten Typen entspricht. Ohne diese Option löst das SDK DodoPaymentsInvalidDataException erst aus, wenn Sie eine Eigenschaft mit einem unerwarteten Typ lesen.

Testmodus

Um den Testmodus (https://test.dodopayments.com) zu verwenden, rufen Sie testMode() im Builder auf:

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 an die zurückgegebene Checkout-URL weiter:
checkoutUrl() gibt ein Optional<String> zurück. Jede Checkout-URL kann einmal verwendet werden und läuft nach 24 Stunden ab. Eine Übersicht über alle Sitzungsoptionen finden Sie unter Checkout-Sitzungen.

Kunden verwalten

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

Abonnements verwalten

Erstellen Sie ein Abonnement mit einem Zahlungslink 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.
productPrice wird in der kleinsten Währungseinheit angegeben, etwa Cent für USD oder Paise für INR. Um 25,00 $ zu berechnen, übergeben Sie 2500.
subscriptions().charge(...) ist für On-Demand-Abonnements vorgesehen. Dodo Payments stellt andere Abonnements automatisch nach dem Abrechnungszeitplan des Produkts in Rechnung.

Nutzungsbasierte Abrechnung

Meters konfigurieren

Erstellen Sie einen Meter, der Events zählt, und listen Sie anschließend Ihre Meters auf. autoPager() durchläuft jeden Meter und ruft bei Bedarf weitere Seiten ab:

Nutzungsereignisse aufnehmen

Senden Sie ein Nutzungsereignis für einen Kunden. Die Werte der Event-Metadaten sind JsonValue-Objekte:
eventId ist der Idempotency-Key. Verwenden Sie daher für jedes Event einen eindeutigen Wert. Ein timestamp, das mehr als 1 Stunde in der Vergangenheit oder mehr als 5 Minuten in der Zukunft liegt, wird abgelehnt.

Events stapelweise aufnehmen

Senden Sie bis zu 1.000 Events in einem Request. Dieses Beispiel verwendet die Imports aus dem vorherigen Beispiel:

Fehlerbehandlung

Das SDK löst ungeprüfte Exceptions aus. Bei einem Fehlerstatus löst es eine Unterklasse von DodoPaymentsServiceException aus, die über statusCode(), headers() und body() verfügt. Fangen Sie die spezifischen Klassen, die Sie behandeln möchten, vor der Basisklasse ab:
Statuscodes ohne eigene Klasse, etwa 409, lösen UnexpectedStatusCodeException aus. Netzwerkfehler lösen DodoPaymentsIoException aus, und Responses, die das SDK nicht interpretieren kann, lösen DodoPaymentsInvalidDataException aus. Alle diese Klassen erweitern DodoPaymentsException.
Das SDK wiederholt Requests bei Verbindungsfehlern und bei Responses mit dem Status 408, 409, 429 oder 500 und höher standardmäßig zweimal mit exponentiellem Backoff.

Asynchrone Vorgänge

Rufen Sie async() auf dem Client auf, um einen asynchronen Client abzurufen. Seine Methoden geben ein CompletableFuture zurück:
Um von Anfang an einen asynchronen Client zu erstellen, verwenden Sie DodoPaymentsOkHttpClientAsync.fromEnv().

Spring-Boot-Integration

Konfigurationsklasse

Registrieren Sie einen Client als Bean und wählen Sie die Umgebung über eine Property aus:

Service-Schicht

Injizieren Sie den Client in einen Service:

Ressourcen

GitHub Repository

Quellcode, Releases und die vollständige Methodenliste.

API Reference

Jeder Endpoint, Parameter und jede Response.

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 Java SDK:

Mitwirken

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