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.2
Set Up Server-Side Integration
Créez ou mettez à jour Le plugin ajoute un champ
src/lib/auth.ts :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.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
customerque vous transmettez. Sans utilisateur connecté, il utilise l’objetcustomer. - Autres champs : L’argument accepte les mêmes champs que le corps de la requête de l’endpoint Create Checkout Session, ainsi que
slugetreferenceId.
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 héritée nécessitebilling 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 pluginusage() 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.ingestenregistre un événement pour l’utilisateur connecté.authClient.dodopayments.usage.meters.listrépertorie les événements d’utilisation du client connecté. Il accepte les paramètres de requêtepage_number,page_size,event_name,meter_id,startetend.
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 :{ 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
Plugin Options
Plugin Options
- 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
Userde 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.
Checkout Plugin Options
Checkout Plugin Options
- 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
Common Issues
Common Issues
- Clé API non valide : vérifiez
DODO_PAYMENTS_API_KEYdans.envet 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
createCustomerOnSignUpest défini surtrue. - Les requêtes du portail ou d’utilisation renvoient 401 : l’adresse e-mail de l’utilisateur n’est pas vérifiée.
Best Practices
Best Practices
- Utilisez des variables d’environnement pour tous les secrets et toutes les clés.
- Effectuez vos tests dans
test_modeavant de passer àlive_mode. - Consignez les événements webhook à des fins de débogage et d’audit.