Sequence zum Iterieren über Ergebnisse und suspend-Funktionen für asynchrone Aufrufe.
Installation
Gradle (Kotlin DSL)
Fügen Sie die Abhängigkeit zu Ihrembuild.gradle.kts hinzu:
build.gradle.kts
Maven
Fügen Sie die Abhängigkeit zu Ihrempom.xml hinzu:
pom.xml
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.
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:
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 SieRequestOptions an einen einzelnen Aufruf:
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 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 API422 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.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, dieeventName 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 jedochsuspend-Funktionen. Rufen Sie sie aus einer Coroutine auf:
client.async() auf einem synchronen Client aufrufen, um dessen asynchrone Version zu erhalten.
Fehlerbehandlung
Bei einem Fehlerstatus löst das SDK eine Unterklasse vonDodoPaymentsServiceException 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:
DodoPaymentsIoException ausgelöst. Antworten, die das SDK nicht interpretieren kann, lösen DodoPaymentsInvalidDataException aus. Alle SDK-Ausnahmen erweitern DodoPaymentsException.
Funktionale Fehlerbehandlung
Verwenden SieResult für die funktionale Fehlerbehandlung:
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:- Erstellen Sie auf Ihrem Server mit diesem SDK die Checkout-Session (siehe Ktor-Integration) und geben Sie deren
checkout_urlzurück. - Rufen Sie in der App dieses
checkout_urlvon 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 SDKDodoPaymentsInvalidDataException 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 einjava.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:- Discord: Treten Sie dem Community-Server bei, um Hilfe in Echtzeit zu erhalten.
- E-Mail: Wenden Sie sich an support@dodopayments.com.
- GitHub: Erstellen Sie ein Issue im Repository.