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 :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 :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.
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, ajoutezoption.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éfinissezoption.WithMaxRetries sur le client ou sur une seule requête :
Opérations courantes
Les exemples de cette section utilisent également un contexte, par exemplectx := context.Background().
Créer une session de paiement
Créez une session de paiement, puis redirigez le client vers leCheckoutURL renvoyé :
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 packageshared :
Gérer les abonnements
Créez un abonnement, facturez un abonnement à la demande et consultez l’historique d’utilisation d’un abonnement.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 :
*url.Error qui encapsule un *net.OpError. apiErr.DumpRequest(true) renvoie la requête sérialisée.
Middleware
Ajoutez du middleware avecoption.WithMiddleware. Un middleware reçoit chaque requête ainsi qu’une fonction next qui l’envoie :
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 :- Discord : rejoignez le serveur communautaire pour obtenir de l’aide en temps réel.
- E-mail : contactez support@dodopayments.com.
- GitHub : ouvrez un ticket dans le dépôt.