Skip to main content
Le SDK Kotlin permet aux applications Kotlin d’accéder à l’API REST de Dodo Payments avec des types. Il utilise partout les types Kotlin : des valeurs nullable pour les champs susceptibles d’être absents, Sequence pour parcourir les résultats et des fonctions suspend pour les appels asynchrones.

Installation

Gradle (Kotlin DSL)

Ajoutez la dépendance à votre build.gradle.kts:
build.gradle.kts

Maven

Ajoutez la dépendance à votre pom.xml:
pom.xml
Les versions du SDK ajoutent la prise en charge des modifications de l’API. Pour trouver la version la plus récente, consultez Maven Central.
Le SDK nécessite Java 8 ou une version ultérieure. Il s’exécute sur la JVM et Android, et inclut des règles de conservation pour ProGuard et R8.

Démarrage rapide

Créez un client, puis créez une session de paiement :
fromEnv() se connecte au mode live, sauf si DODO_PAYMENTS_BASE_URL ou dodopayments.baseUrl indique le contraire. Pour utiliser le mode test, consultez Mode test. Une clé API de test fonctionne uniquement en mode test.
Conservez les clés API dans des variables d’environnement ou un gestionnaire de secrets. Ne les validez jamais dans le contrôle de version.

Fonctionnalités principales

Coroutines

Les méthodes du client asynchrone sont des fonctions suspend que vous appelez depuis une coroutine.

Null Safety

Les champs susceptibles d’être absents sont des types nullable, et non Optional.

Sequences

Sur le client synchrone, autoPager() renvoie un Sequence qui récupère davantage de pages au fil de l’itération. Sur le client asynchrone, il renvoie un Flow.

Immutable Models

Les classes de modèle sont immuables, et toBuilder() renvoie un builder pour une copie modifiée.

Configuration

Depuis des variables d’environnement

fromEnv() lit vos paramètres depuis les variables d’environnement ou les propriétés système. Les propriétés système sont prioritaires :
La clé API provient de DODO_PAYMENTS_API_KEY ou dodopayments.apiKey. Le secret de signature du webhook provient de DODO_PAYMENTS_WEBHOOK_KEY ou dodopayments.webhookKey, et l’URL de base de DODO_PAYMENTS_BASE_URL ou dodopayments.baseUrl. Créez un seul client et réutilisez-le, car chaque client possède son propre pool de connexions et ses propres pools de threads. Pour vérifier un webhook, transmettez le corps brut de la requête et les en-têtes à client.webhooks().unwrap(UnwrapWebhookParams.builder().body(rawBody).headers(headers).build()), où headers est un com.dodopayments.api.core.http.Headers. La signature est vérifiée avec votre clé webhook, puis l’événement analysé est renvoyé ; sinon, DodoPaymentsWebhookException est levée. Sans en-têtes, unwrap ne vérifie pas la signature. client.webhooks().unsafeUnwrap(rawBody) analyse le corps sans le vérifier ; utilisez-le donc uniquement pour les tests. Consultez Webhooks.

Configuration manuelle

Définissez chaque option sur le builder :

Mode test

Pour utiliser le mode test (https://test.dodopayments.com), appelez testMode() sur le builder :

Délais d’expiration et nouvelles tentatives

Par défaut, le client effectue deux nouvelles tentatives et expire après 1 minute. Il réessaie en cas d’erreurs de connexion et de réponses avec le statut 408, 409, 429 ou 500 et supérieur, avec un backoff exponentiel. Définissez les valeurs par défaut sur le client ou transmettez RequestOptions à un appel donné :

Opérations courantes

Les exemples de cette section utilisent le client de Démarrage rapide.

Créer une session de paiement

Créez une session de paiement, puis redirigez le client vers l’URL de paiement renvoyée :
checkoutUrl() renvoie un String? nullable. Chaque URL de paiement est utilisable une seule fois et expire après 24 heures. Pour connaître toutes les options de session, consultez Sessions de paiement.

Créer un produit

Créez un produit d’abonnement mensuel au prix de $29.99 :
price est exprimé dans l’unité monétaire minimale. discountBps définit la remise en points de base et remplace le champ obsolète discount.

Activer une clé de licence

Activez une clé de licence pour un appareil ou une installation. Si la clé a atteint sa limite d’activations, l’API renvoie 422 et le SDK lève UnprocessableEntityException. Une clé inactive renvoie 403 (PermissionDeniedException), tandis qu’une clé inconnue renvoie 404 (NotFoundException) :

Gérer les abonnements

Créez un abonnement, puis facturez-le s’il s’agit d’un abonnement à la demande.
POST /subscriptions (la méthode subscriptions().create() du SDK) est obsolète. Elle fonctionne toujours pour les intégrations existantes, mais les nouvelles intégrations doivent créer les abonnements via une session de paiement.
billing nécessite uniquement country, un code pays ISO à deux lettres. Utilisez AttachExistingCustomer pour associer un client existant ou NewCustomer pour en créer un. charge est destiné aux abonnements à la demande, et productPrice est exprimé dans l’unité monétaire minimale.

Facturation à l’usage

Enregistrer des événements d’utilisation

Envoyez un événement d’utilisation pour un client. Les compteurs qui suivent eventName l’agrègent :
eventId est la clé d’idempotence ; attribuez donc une valeur unique à chaque événement. Une requête accepte jusqu’à 1 000 événements.

Opérations asynchrones

Client asynchrone

Le client asynchrone possède les mêmes méthodes que le client synchrone, mais la plupart sont des fonctions suspend. Appelez-les depuis une coroutine :
Vous pouvez également appeler client.async() sur un client synchrone pour obtenir sa version asynchrone.

Gestion des erreurs

Pour un statut d’erreur, le SDK lève une sous-classe de DodoPaymentsServiceException, qui possède statusCode(), headers() et body(). Les sous-classes sont BadRequestException (400), UnauthorizedException (401), PermissionDeniedException (403), NotFoundException (404), UnprocessableEntityException (422), RateLimitException (429), InternalServerException (5xx) et UnexpectedStatusCodeException pour les autres statuts, comme 409 :
Les défaillances réseau lèvent DodoPaymentsIoException, et les réponses que le SDK ne peut pas interpréter lèvent DodoPaymentsInvalidDataException. Toutes les exceptions du SDK étendent DodoPaymentsException.

Gestion fonctionnelle des erreurs

Utilisez Result pour la gestion fonctionnelle des erreurs :
runCatching intercepte toutes les exceptions, y compris celles du SDK, et les renvoie sous la forme d’un Result en échec.

Intégration Android

Le Kotlin SDK est un SDK serveur. Il s’authentifie avec votre clé API secrète, et toute personne possédant votre APK peut extraire une clé qui y est compilée ; ne l’utilisez donc jamais dans une application Android. Pour accepter des paiements dans une application Android :
  1. Sur votre serveur, créez la session de checkout avec ce SDK (voir Intégration Ktor) et renvoyez sa checkout_url.
  2. Dans l’application, récupérez cette checkout_url depuis votre serveur et ouvrez-la avec l’Android SDK, qui ne contient aucune clé API.

Validation de la réponse

Par défaut, le SDK lève DodoPaymentsInvalidDataException uniquement lorsque vous lisez une propriété dont le type est inattendu. Pour vérifier l’intégralité de la réponse au préalable, activez la validation pour une requête ou appelez validate() sur une réponse :

Fonctionnalités avancées

Configuration du proxy

Pour envoyer des requêtes via un proxy, transmettez un java.net.Proxy au builder :

Configuration temporaire

withOptions renvoie un client avec des paramètres modifiés qui partage les pools de connexions et de threads du client d’origine. Le client d’origine reste inchangé :

Intégration Ktor

Créez le client une seule fois et appelez-le depuis une route :

Ressources

GitHub Repository

Code source, versions et liste complète des méthodes.

API Reference

Chaque endpoint, paramètre et réponse.

Discord Community

Posez vos questions et échangez avec d’autres développeurs.

Report Issues

Signalez des bugs ou demandez des fonctionnalités.

Assistance

Pour obtenir de l’aide concernant le Kotlin SDK :

Contribuer

Pour contribuer, consultez les directives de contribution.
Dernière modification le 28 septembre 2026