Skip to main content
Le SDK Go permet aux applications Go d’accéder de manière typée à l’API REST de Dodo Payments. Chaque méthode accepte un context.Context, les paramètres de requête utilisent un wrapper Field qui sépare les valeurs nulles des champs omis, et vous pouvez ajouter du middleware à chaque requête.

Installation

Ajoutez le module à votre projet :
Pour verrouiller une version spécifique :
Le SDK nécessite Go 1.22 ou une version ultérieure.

Démarrage rapide

Créez un client, puis créez une session de paiement :
Si vous omettez option.WithBearerToken, NewClient lit la variable d’environnement DODO_PAYMENTS_API_KEY. Si vous omettez option.WithEnvironmentTestMode(), le client se connecte au mode live. 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 codez jamais en dur dans votre code source.

Fonctionnalités principales

Context Support

Chaque méthode accepte un context.Context pour l’annulation et les délais d’expiration.

Strong Typing

Paramètres de requête et structures de réponse typés pour effectuer des vérifications à la compilation.

Middleware

Ajoutez du middleware avec option.WithMiddleware pour la journalisation, les métriques et la logique personnalisée.

Goroutine Safe

Partagez un même client entre plusieurs goroutines.

Configuration

NewClient lit DODO_PAYMENTS_API_KEY, DODO_PAYMENTS_WEBHOOK_KEY (votre secret de signature des webhooks) et DODO_PAYMENTS_BASE_URL depuis l’environnement. Les options que vous transmettez, telles que option.WithBearerToken, option.WithWebhookKey et option.WithBaseURL, les remplacent. Pour vérifier un webhook, transmettez le corps brut de la requête et les en-têtes à client.Webhooks.Unwrap(rawBody, r.Header). Cette fonction vérifie la signature avec votre clé de webhook et renvoie l’événement analysé. client.Webhooks.UnsafeUnwrap(rawBody) analyse le corps sans le vérifier ; utilisez-la donc uniquement pour les tests. Consultez Webhooks. Les exemples de cette page utilisent le client de Démarrage rapide.

Contextes et délais d’expiration

Les requêtes n’expirent pas par défaut. Une échéance de contexte limite l’appel complet, y compris les nouvelles tentatives. Pour limiter chaque tentative, ajoutez option.WithRequestTimeout() :

Configuration des nouvelles tentatives

Le SDK réessaie les erreurs de connexion et les réponses dont le statut est 408, 409, 429 ou 500 et supérieur. Par défaut, il effectue deux nouvelles tentatives avec un backoff exponentiel. Définissez option.WithMaxRetries sur le client ou sur une seule requête :

Opérations courantes

Les exemples de cette section utilisent également un contexte, par exemple ctx := context.Background().

Créer une session de paiement

Créez une session de paiement, puis redirigez le client vers le CheckoutURL renvoyé :
Chaque URL de paiement ne fonctionne qu’une seule fois et expire après 24 heures. Pour connaître toutes les options de session, consultez Sessions de paiement.

Gérer les clients

Créez un client avec une adresse e-mail et un nom, puis récupérez-le par son ID. Les valeurs de métadonnées utilisent les types union du package shared :

Gérer les abonnements

Créez un abonnement, facturez un abonnement à la demande et consultez l’historique d’utilisation d’un abonnement.
POST /subscriptions (la méthode Subscriptions.New 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 paiement.
Billing nécessite uniquement Country, un code pays ISO à deux lettres. Customer est un CustomerRequestUnionParam : transmettez AttachExistingCustomerParam{CustomerID: ...} pour un client existant ou NewCustomerParam{Email: ..., Name: ...} pour en créer un. Charge est destiné aux abonnements à la demande, et ProductPrice est exprimé dans la plus petite unité monétaire. GetUsageHistory renvoie une page de résultats ; GetUsageHistoryAutoPaging parcourt toutes les pages.

Facturation basée sur l’utilisation

Ingérer des événements d’utilisation

Envoyez des événements d’utilisation pour un client :
Le EventID est la clé d’idempotence ; attribuez donc une valeur unique à chaque événement. Si le même EventID apparaît deux fois dans une même requête, l’ensemble de la requête est rejeté. Si un EventID a déjà été ingéré, le nouvel événement est ignoré. Une requête accepte jusqu’à 1 000 événements. Timestamp prend par défaut l’heure actuelle et est rejeté s’il date de plus d’une heure ou s’il est situé à plus de 5 minutes dans le futur.

Répertorier les événements d’utilisation

Répertoriez les événements filtrés par client et par nom d’événement :
List renvoie une page. Pour parcourir toutes les pages, appelez client.UsageEvents.ListAutoPaging(ctx, params) et effectuez une boucle avec iter.Next(), iter.Current() et iter.Err(). Les autres méthodes de liste disposent de la même variante AutoPaging, et chaque page possède une méthode GetNextPage().

Gestion des erreurs

Lorsque l’API renvoie un code d’état de non-réussite, le SDK renvoie une erreur de type *dodopayments.Error. Elle contient StatusCode, *http.Request et *http.Response, ainsi que le JSON du corps de l’erreur. Utilisez errors.As pour l’inspecter, et utilisez StatusCode dans une condition pour gérer des cas spécifiques :
Les autres erreurs sont renvoyées sans wrapper. Par exemple, si le transport HTTP échoue, vous pouvez recevoir un *url.Error qui encapsule un *net.OpError. apiErr.DumpRequest(true) renvoie la requête sérialisée.

Middleware

Ajoutez du middleware avec option.WithMiddleware. Un middleware reçoit chaque requête ainsi qu’une fonction next qui l’envoie :
Plusieurs middlewares dans un même appel option.WithMiddleware s’exécutent de gauche à droite. Les middlewares transmis à NewClient s’exécutent avant ceux transmis à une requête donnée.

Concurrence

Le client peut être utilisé simultanément en toute sécurité ; vous pouvez donc partager un même client entre plusieurs goroutines :

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 avec le SDK Go :

Contribuer

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