Skip to main content
Das Kotlin SDK bietet Kotlin-Anwendungen typisierten Zugriff auf die Dodo Payments REST API. Es verwendet durchgehend Kotlin-Typen: nullable values für Felder, die fehlen können, Sequence zum Iterieren über Ergebnisse und suspend-Funktionen für asynchrone Aufrufe.

Installation

Gradle (Kotlin DSL)

Fügen Sie die Abhängigkeit zu Ihrem build.gradle.kts hinzu:
build.gradle.kts

Maven

Fügen Sie die Abhängigkeit zu Ihrem pom.xml hinzu:
pom.xml
SDK-Releases unterstützen Änderungen an der API. Die aktuelle Version finden Sie unter Maven Central.
Das SDK erfordert Java 8 oder höher. Es läuft auf der JVM und auf Android und enthält ProGuard- und R8-Keep-Regeln.

Schnellstart

Erstellen Sie einen Client und anschließend eine Checkout-Sitzung:
fromEnv() verbindet sich mit dem Live-Modus, sofern DODO_PAYMENTS_BASE_URL oder dodopayments.baseUrl nichts anderes angibt. 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 oder einem Secrets Manager auf. Übernehmen Sie sie niemals in die Versionsverwaltung.

Kernfunktionen

Coroutines

Die Methoden des asynchronen Clients sind suspend-Funktionen, die Sie aus einer Coroutine aufrufen.

Null Safety

Felder, die fehlen können, sind nullable types, nicht Optional.

Sequences

Auf dem synchronen Client gibt autoPager() ein Sequence zurück, das beim Iterieren weitere Seiten abruft. Auf dem asynchronen Client gibt es ein Flow zurück.

Immutable Models

Modellklassen sind unveränderlich, und toBuilder() gibt einen Builder für eine geänderte Kopie zurück.

Konfiguration

Aus Umgebungsvariablen

fromEnv() liest Ihre Einstellungen aus Umgebungsvariablen oder Systemeigenschaften. Systemeigenschaften haben Vorrang:
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 Connection Pool und eigene Thread-Pools 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 Signatur wird mit Ihrem Webhook-Schlüssel geprüft und das geparste Ereignis zurückgegeben oder DodoPaymentsWebhookException ausgelöst. Ohne Header verifiziert unwrap die Signatur nicht. client.webhooks().unsafeUnwrap(rawBody) parst den Body, ohne ihn zu verifizieren. Verwenden Sie ihn daher nur für Tests. Siehe Webhooks.

Manuelle Konfiguration

Legen Sie jede Option im Builder fest:

Testmodus

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

Timeouts und Wiederholungsversuche

Standardmäßig wiederholt der Client Anfragen zweimal und bricht sie nach 1 Minute ab. Bei Verbindungsfehlern und Antworten mit dem Status 408, 409, 429 oder 500 und höher werden Anfragen mit exponentiellem Backoff wiederholt. Legen Sie die Standardwerte am Client fest oder übergeben Sie RequestOptions an einen einzelnen Aufruf:

Häufige Vorgänge

Die Beispiele in diesem Abschnitt verwenden client aus dem Schnellstart.

Checkout-Sitzung erstellen

Erstellen Sie eine Checkout-Sitzung und leiten Sie den Kunden anschließend zur zurückgegebenen Checkout-URL weiter:
checkoutUrl() gibt ein nullable String? zurück. Jede Checkout-URL funktioniert einmal und läuft nach 24 Stunden ab. Eine Übersicht über alle Sitzungsoptionen finden Sie unter Checkout-Sitzungen.

Produkt erstellen

Erstellen Sie ein monatliches Abonnementprodukt zum Preis von $29.99:
price wird in der kleinsten Währungseinheit angegeben. discountBps legt den Rabatt in Basispunkten fest und ersetzt das veraltete Feld discount.

Lizenzschlüssel aktivieren

Aktivieren Sie einen Lizenzschlüssel für ein Gerät oder eine Installation. Wenn der Schlüssel sein Aktivierungslimit erreicht hat, gibt die API 422 zurück und das SDK löst UnprocessableEntityException aus. Ein inaktiver Schlüssel gibt 403 (PermissionDeniedException) zurück, ein unbekannter Schlüssel 404 (NotFoundException):

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 erfordert nur country, einen zweistelligen ISO-Ländercode. Verwenden Sie AttachExistingCustomer, um einen bestehenden Kunden zu verknüpfen, oder NewCustomer, um einen Kunden zu erstellen. charge gilt für On-Demand-Abonnements, und productPrice wird in der kleinsten Währungseinheit angegeben.

Nutzungsbasierte Abrechnung

Nutzungsereignisse erfassen

Senden Sie ein Nutzungsereignis für einen Kunden. Meter, die eventName des Ereignisses erfassen, aggregieren es:
eventId ist der Idempotency Key. Geben Sie daher jedem Ereignis einen eindeutigen Wert. Eine Anfrage akzeptiert bis zu 1.000 Ereignisse.

Asynchrone Vorgänge

Asynchroner Client

Der asynchrone Client verfügt über dieselben Methoden wie der synchrone Client, die meisten davon sind jedoch suspend-Funktionen. Rufen Sie sie aus einer Coroutine auf:
Sie können auch client.async() auf einem synchronen Client aufrufen, um dessen asynchrone Version zu erhalten.

Fehlerbehandlung

Bei einem Fehlerstatus löst das SDK eine Unterklasse von DodoPaymentsServiceException aus. Diese verfügt über statusCode(), headers() und body(). Die Unterklassen sind BadRequestException (400), UnauthorizedException (401), PermissionDeniedException (403), NotFoundException (404), UnprocessableEntityException (422), RateLimitException (429), InternalServerException (5xx) und UnexpectedStatusCodeException für andere Statuscodes wie 409:
Bei Netzwerkfehlern wird DodoPaymentsIoException ausgelöst. Antworten, die das SDK nicht interpretieren kann, lösen DodoPaymentsInvalidDataException aus. Alle SDK-Ausnahmen erweitern DodoPaymentsException.

Funktionale Fehlerbehandlung

Verwenden Sie Result für die funktionale Fehlerbehandlung:
runCatching fängt jede Ausnahme ab, einschließlich SDK-Ausnahmen, und gibt sie als fehlgeschlagenes Result zurück.

Android-Integration

Das Kotlin SDK ist ein serverseitiges SDK. Es authentifiziert sich mit Ihrem geheimen API-Schlüssel. Jeder, der Ihre APK besitzt, kann einen darin kompilierten Schlüssel extrahieren. Verwenden Sie es daher niemals innerhalb einer Android-App. So nehmen Sie Zahlungen in einer Android-App entgegen:
  1. Erstellen Sie auf Ihrem Server mit diesem SDK die Checkout-Session (siehe Ktor-Integration) und geben Sie deren checkout_url zurück.
  2. Rufen Sie in der App dieses checkout_url von Ihrem Server ab und öffnen Sie es mit dem Android SDK, das keinen API-Schlüssel enthält.

Response-Validierung

Standardmäßig löst das SDK DodoPaymentsInvalidDataException nur aus, wenn Sie eine Eigenschaft mit einem unerwarteten Typ lesen. Um die gesamte Response vorab zu prüfen, aktivieren Sie die Validierung für einen Request oder rufen Sie validate() für eine Response auf:

Erweiterte Funktionen

Proxy-Konfiguration

Um Requests über einen Proxy zu senden, übergeben Sie dem Builder ein java.net.Proxy:

Temporäre Konfiguration

withOptions gibt einen Client mit geänderten Einstellungen zurück, der die Verbindungs- und Thread-Pools des ursprünglichen Clients gemeinsam nutzt. Der ursprüngliche Client wird nicht geändert:

Ktor-Integration

Erstellen Sie den Client einmal und rufen Sie ihn von einer Route aus auf:

Ressourcen

GitHub Repository

Quellcode, Releases und die vollständige Methodenliste.

API Reference

Jeder Endpunkt, Parameter und jede Response.

Discord Community

Stellen Sie Fragen und tauschen Sie sich mit anderen Entwicklern aus.

Report Issues

Melden Sie Bugs oder schlagen Sie Funktionen vor.

Support

Hilfe zum Kotlin SDK:

Mitwirken

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