Sequence pour parcourir les résultats et des fonctions suspend pour les appels asynchrones.
Installation
Gradle (Kotlin DSL)
Ajoutez la dépendance à votrebuild.gradle.kts:
build.gradle.kts
Maven
Ajoutez la dépendance à votrepom.xml:
pom.xml
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.
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 :
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 transmettezRequestOptions à un appel donné :
Opérations courantes
Les exemples de cette section utilisent leclient 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 renvoie422 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.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 suiventeventName 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 fonctionssuspend. Appelez-les depuis une coroutine :
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 deDodoPaymentsServiceException, 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 :
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
UtilisezResult pour la gestion fonctionnelle des erreurs :
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 :- Sur votre serveur, créez la session de checkout avec ce SDK (voir Intégration Ktor) et renvoyez sa
checkout_url. - Dans l’application, récupérez cette
checkout_urldepuis 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èveDodoPaymentsInvalidDataException 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 unjava.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 :- Discord : Rejoignez le serveur de la communauté pour obtenir de l’aide en temps réel.
- Email : Contactez support@dodopayments.com.
- GitHub : Ouvrez une issue dans le repository.