Skip to main content

Vue d’ensemble

L’adaptateur Better Auth, @dodopayments/better-auth, est un plugin Better Auth qui relie vos utilisateurs à Dodo Payments. Il fournit :
  • Création facultative d’un client ou association d’un client par e-mail lors de l’inscription
  • Sessions de paiement, la méthode de paiement recommandée, avec mappage des slugs de produits
  • Un Customer Portal en libre-service
  • Des endpoints d’ingestion et de reporting de l’utilisation pour la facturation basée sur l’utilisation
  • Traitement des événements webhook avec vérification de signature
  • Types TypeScript pour chaque endpoint
Vous avez besoin d’un compte Dodo Payments et de clés API pour utiliser cette intégration.

Prérequis

  • Node.js 16 ou version ultérieure
  • Accès à votre tableau de bord Dodo Payments
  • Un projet existant utilisant Better Auth 1.4 ou une version ultérieure de la branche 1.x

Installation

1

Install Dependencies

Exécutez cette commande à la racine de votre projet :
L’adaptateur, le SDK Dodo Payments, Better Auth et Zod sont installés.

Configuration

1

Configure Environment Variables

Ajoutez ces variables à votre fichier .env. Créez la clé API sous Developer → API Keys dans le tableau de bord. Vous obtenez le secret webhook lorsque vous ajoutez l’endpoint webhook, comme indiqué dans la section Webhooks de cette page. BETTER_AUTH_SECRET est une chaîne aléatoire d’au moins 32 caractères.
Ne validez jamais les clés API ou les secrets dans le contrôle de version.
2

Set Up Server-Side Integration

Créez ou mettez à jour src/lib/auth.ts :
Le plugin ajoute un champ dodoCustomerId à la table user de Better Auth, où il stocke l’ID client Dodo Payments de chaque utilisateur. Après avoir ajouté le plugin, mettez à jour le schéma de votre base de données avec la Better Auth CLI.
Définissez environment sur live_mode pour la production.
3

Set Up Client-Side Integration

Créez ou mettez à jour src/lib/auth-client.ts :

Exemples d’utilisation

Utilisez authClient.dodopayments.checkoutSession pour les nouvelles intégrations. La méthode héritée checkout est obsolète et conservée uniquement pour assurer la compatibilité descendante.

Création d’une session de paiement (recommandé)

Créez une session de paiement à partir d’un slug configuré ou d’un panier de produits, puis redirigez le client vers l’URL renvoyée :
checkoutSession renseigne certains champs pour vous :
  • Adresse de facturation : Elle n’est pas requise au préalable, car le checkout la recueille auprès du client. Pour la préremplir, transmettez billing_address.
  • Client : Pour un utilisateur connecté, le plugin utilise l’e-mail et le nom de sa session Better Auth et ignore tout objet customer que vous transmettez. Sans utilisateur connecté, il utilise l’objet customer.
  • Autres champs : L’argument accepte les mêmes champs que le corps de la requête de l’endpoint Create Checkout Session, ainsi que slug et referenceId.
Si le slug n’est pas configuré ou si vous ne transmettez ni slug ni product_cart, la requête échoue avec une erreur 400.
L’URL de retour provient de successUrl configuré dans le plugin serveur, résolu par rapport à l’URL de votre application. Le plugin ignore tout return_url dans la charge utile du client.

Checkout hérité (obsolète)

La méthode authClient.dodopayments.checkout est obsolète. Utilisez checkoutSession à la place pour les nouvelles implémentations.
La méthode héritée nécessite billing et customer, et crée un lien de paiement via le flux de checkout dynamique obsolète. Les champs que vous définissez dans customer remplacent l’e-mail et le nom de la session.

Accès au Customer Portal

Les endpoints du portail nécessitent un utilisateur connecté dont l’adresse e-mail est vérifiée. Si l’utilisateur n’a pas encore de client Dodo Payments, le plugin en trouve un par e-mail ou en crée un. customer.portal() renvoie l’URL du portail :

Liste des données client

Répertoriez les abonnements et les paiements du client connecté. page commence à 1 et status filtre les résultats :

Suivi de l’utilisation mesurée

Activez le plugin usage() sur le serveur pour enregistrer les événements d’utilisation destinés à la facturation basée sur l’utilisation et permettre aux clients de consulter leur utilisation. Les deux méthodes nécessitent un utilisateur connecté dont l’adresse e-mail est vérifiée.
  • authClient.dodopayments.usage.ingest enregistre un événement pour l’utilisateur connecté.
  • authClient.dodopayments.usage.meters.list répertorie les événements d’utilisation du client connecté. Il accepte les paramètres de requête page_number, page_size, event_name, meter_id, start et end.
Dodo Payments rejette les événements dont les horodatages datent de plus d’une heure ou sont de plus de cinq minutes dans le futur.
Si vous omettez meter_id, la liste inclut tous les événements d’utilisation du client. Avec meter_id, elle inclut uniquement les événements correspondant à ce meter.

Webhooks

Le plugin de webhooks vérifie la signature de chaque événement Dodo Payments et appelle vos gestionnaires. L’endpoint par défaut est /api/auth/dodopayments/webhooks.
1

Generate and Set Webhook Secret

Dans le tableau de bord, accédez à Developer → Webhooks et ajoutez l’URL de votre endpoint, par exemple https://<your-domain>/api/auth/dodopayments/webhooks. Copiez le secret de signature de l’endpoint dans votre fichier .env :
2

Handle Webhook Events

Transmettez un gestionnaire pour chaque événement que vous souhaitez traiter. onPayload s’exécute pour chaque événement :
Si la vérification de signature échoue ou si un gestionnaire génère une erreur, l’endpoint répond avec 400. Une fois vos gestionnaires terminés, il renvoie { received: true }.

Gestionnaires d’événements Webhook pris en charge

Chaque gestionnaire reçoit la charge utile vérifiée correspondant à son type d’événement :

Référence de configuration

  • client (requis) : instance du client DodoPayments
  • createCustomerOnSignUp (facultatif) : crée un client Dodo Payments lorsqu’un utilisateur s’inscrit ou associe un client existant ayant la même adresse e-mail. Le plugin met également à jour le client lorsque les informations de l’utilisateur changent.
  • use (requis) : tableau des plugins à activer (checkout, portail, utilisation, webhooks)
  • getCustomerParams (facultatif) : fonction qui reçoit le User de Better Auth et renvoie des champs supplémentaires à associer au client Dodo Payments lors de sa création et de sa mise à jour (par exemple, metadata, phone_number). Elle peut être async.
  • products : tableau d’objets { productId, slug } ou fonction async qui en renvoie un
  • successUrl : URL vers laquelle rediriger après un paiement réussi
  • authenticatedUsersOnly : exige l’authentification de l’utilisateur (par défaut : false)

Dépannage et conseils

  • Clé API non valide : vérifiez DODO_PAYMENTS_API_KEY dans .env et assurez-vous que le mode de la clé correspond à environment.
  • Discordance de signature du webhook : vérifiez que le secret webhook correspond à celui défini dans le tableau de bord Dodo Payments.
  • Client non créé : vérifiez que createCustomerOnSignUp est défini sur true.
  • Les requêtes du portail ou d’utilisation renvoient 401 : l’adresse e-mail de l’utilisateur n’est pas vérifiée.
  • Utilisez des variables d’environnement pour tous les secrets et toutes les clés.
  • Effectuez vos tests dans test_mode avant de passer à live_mode.
  • Consignez les événements webhook à des fins de débogage et d’audit.

Prompt pour les LLM

Copiez ce prompt dans votre assistant de programmation basé sur l’IA pour lui faire ajouter l’adaptateur à votre projet. Pour fournir également à votre agent la documentation et les compétences Dodo Payments, installez le Agent Plugin.
Dernière modification le 26 septembre 2026