Skip to main content
Le SDK Java fournit aux applications Java un accès typé à l’API REST Dodo Payments. Il utilise des types Java partout : Optional pour les champs qui peuvent être absents, Stream pour parcourir les résultats et CompletableFuture pour les appels asynchrones.

Installation

Maven

Ajoutez la dépendance dans votre pom.xml :
pom.xml

Gradle

Ajoutez la dépendance à votre build.gradle.kts :
build.gradle.kts
Les versions du SDK prennent en charge les 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 fonctionne donc également avec Java 11, 17 et 21.

Démarrage rapide

Créez un client, puis créez une session de checkout :
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 du mode test fonctionne uniquement dans le mode test.
Conservez les clés API dans des variables d’environnement, des propriétés système ou un gestionnaire de secrets. Ne les codez jamais en dur dans votre code source.

Fonctionnalités principales

Type Safety

Classes de requête et de réponse typées pour effectuer des vérifications à la compilation.

Shared Client

Créez un client et réutilisez-le pour toutes les requêtes : il conserve les pools de connexions et de threads. Les objets de requête et de réponse sont immuables.

Builder Pattern

Chaque classe de requête possède un builder, et toBuilder() crée une copie modifiée.

Async Support

client.async() renvoie un client dont les méthodes renvoient CompletableFuture.

Configuration

Variables d’environnement

fromEnv() lit ces variables d’environnement ou les propriétés système correspondantes. Les propriétés système sont prioritaires :
.env
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 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. Cette méthode vérifie la signature avec votre clé de webhook et renvoie l’événement analysé, ou lève DodoPaymentsWebhookException. 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 :
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 pour les réponses présentant le statut 408, 409, 429 ou 500 et plus. Pour remplacer le délai d’expiration d’un seul appel, transmettez RequestOptions.builder().timeout(Duration.ofSeconds(30)).build() comme deuxième argument de la méthode. responseValidation(true) vérifie dès le départ que l’intégralité de la réponse correspond aux types attendus. Sans cette option, le SDK lève DodoPaymentsInvalidDataException uniquement lorsque vous lisez une propriété dont le type est inattendu.

Mode test

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

Opérations courantes

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

Créer une session de checkout

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

Gérer les clients

Créez un client avec une adresse e-mail, un nom et des métadonnées, puis récupérez-le par son ID :

Gérer les abonnements

Créez un abonnement avec un lien de paiement, 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 des abonnements via une session de checkout.
productPrice est exprimé dans la plus petite unité monétaire, comme les centimes pour l’USD ou les paise pour l’INR. Pour facturer $25.00, transmettez 2500.
subscriptions().charge(...) est destiné aux abonnements à la demande. Dodo Payments facture automatiquement les autres abonnements selon le calendrier de facturation du produit.

Facturation basée sur l’utilisation

Configurer les compteurs

Créez un compteur qui dénombre les événements, puis répertoriez vos compteurs. autoPager() parcourt chaque compteur et récupère d’autres pages si nécessaire :

Ingérer des événements d’utilisation

Envoyez un événement d’utilisation pour un client. Les valeurs des métadonnées d’événement sont des objets JsonValue :
eventId est la clé d’idempotence ; attribuez donc une valeur unique à chaque événement. Un timestamp datant de plus d’une heure ou situé à plus de 5 minutes dans le futur est rejeté.

Ingérer des événements par lots

Envoyez jusqu’à 1 000 événements dans une seule requête. Cet exemple utilise les imports de l’exemple précédent :

Gestion des erreurs

Le SDK lève des exceptions non vérifiées. En cas de statut d’erreur, il lève une sous-classe de DodoPaymentsServiceException, qui possède statusCode(), headers() et body(). Interceptez les classes spécifiques que vous souhaitez gérer avant la classe de base :
Les statuts qui ne possèdent pas leur propre classe, comme 409, lèvent UnexpectedStatusCodeException. Les défaillances réseau lèvent DodoPaymentsIoException, et les réponses que le SDK ne peut pas interpréter lèvent DodoPaymentsInvalidDataException. Toutes ces exceptions étendent DodoPaymentsException.
Le SDK réessaie en cas d’erreurs de connexion et pour les réponses présentant le statut 408, 409, 429 ou 500 et plus, deux fois par défaut, avec un délai d’attente exponentiel.

Opérations asynchrones

Appelez async() sur le client pour obtenir un client asynchrone. Ses méthodes renvoient un CompletableFuture :
Pour créer directement un client asynchrone, utilisez DodoPaymentsOkHttpClientAsync.fromEnv().

Intégration Spring Boot

Classe de configuration

Enregistrez un client comme bean et choisissez l’environnement à partir d’une propriété :

Couche de service

Injectez le client dans un service :

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

Contribuer

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