Panoramica
L’adattatore Better Auth,@dodopayments/better-auth, è un plugin Better Auth che collega i tuoi utenti a Dodo Payments. Offre:
- Creazione opzionale dei clienti o collegamento dei clienti tramite email durante la registrazione
- Sessioni di checkout, il metodo di checkout preferito, con mappatura degli slug dei prodotti
- Un Customer Portal self-service
- Endpoint di acquisizione e report dell’utilizzo per la fatturazione basata sull’utilizzo
- Elaborazione degli eventi webhook con verifica della firma
- Tipi TypeScript per ogni endpoint
È necessario un account Dodo Payments e chiavi API per usare questa integrazione.
Requisiti
- Node.js 16 o versione successiva
- Accesso alla dashboard di Dodo Payments
- Un progetto esistente che utilizza Better Auth 1.4 o una versione successiva della release 1.x
Installazione
1
Install Dependencies
Esegui questo comando nella root del progetto:
L’adattatore, l’SDK Dodo Payments, Better Auth e Zod sono installati.
Configurazione
1
Configure Environment Variables
Aggiungi queste variabili al file
.env. Crea la API key in Developer → API Keys nella dashboard. Il webhook secret viene fornito quando aggiungi l’endpoint webhook, come descritto nella sezione Webhooks di questa pagina. BETTER_AUTH_SECRET è una stringa casuale di almeno 32 caratteri.2
Set Up Server-Side Integration
Crea o aggiorna Il plugin aggiunge un campo
src/lib/auth.ts:dodoCustomerId alla tabella user di Better Auth, dove memorizza il Dodo Payments customer ID di ogni utente. Dopo aver aggiunto il plugin, aggiorna lo schema del database con la Better Auth CLI.3
Set Up Client-Side Integration
Crea o aggiorna
src/lib/auth-client.ts:Esempi di utilizzo
Usa
authClient.dodopayments.checkoutSession per le nuove integrazioni. Il metodo
legacy checkout è deprecato e viene mantenuto solo per la
compatibilità con le versioni precedenti.Creazione di una sessione di checkout (preferita)
Crea una sessione di checkout da uno slug configurato o da un carrello di prodotti, quindi reindirizza il cliente all’URL restituito:checkoutSession compila automaticamente alcuni campi:
- Indirizzo di fatturazione: non è richiesto inizialmente, perché il checkout lo raccoglie dal cliente. Per precompilarlo, passa
billing_address. - Cliente: per un utente autenticato, il plugin utilizza l’email e il nome della sessione Better Auth e ignora qualsiasi oggetto
customerpassato. In assenza di un utente autenticato, utilizza l’oggettocustomer. - Altri campi: l’argomento accetta gli stessi campi del request body dell’endpoint Create Checkout Session, oltre a
slugereferenceId.
slug né product_cart, la richiesta restituisce un errore 400.
L’URL di ritorno proviene da
successUrl configurato nel plugin server,
risolto rispetto all’URL della tua app. Il plugin ignora qualsiasi return_url nel
payload client.Checkout legacy (deprecato)
Il metodo legacy richiedebilling e customer e crea un payment link tramite il flusso di checkout dinamico deprecato. I campi impostati in customer sostituiscono l’email e il nome della sessione.
Accesso al Customer Portal
Gli endpoint del portale richiedono un utente autenticato con un indirizzo email verificato. Se l’utente non ha ancora un cliente Dodo Payments, il plugin ne trova uno tramite email o ne crea uno.customer.portal() restituisce l’URL del portale:
Elenco dei dati del cliente
Elenca le subscription e i pagamenti del cliente autenticato.page inizia da 1 e status filtra i risultati:
Monitoraggio dell’utilizzo a consumo
Abilita il pluginusage() sul server per registrare gli eventi di utilizzo per la fatturazione basata sull’utilizzo e consentire ai clienti di visualizzare il proprio utilizzo. Entrambi i metodi richiedono un utente autenticato con un indirizzo email verificato.
authClient.dodopayments.usage.ingestregistra un evento per l’utente autenticato.authClient.dodopayments.usage.meters.listelenca gli eventi di utilizzo del cliente autenticato. Accetta i query parameterpage_number,page_size,event_name,meter_id,starteend.
meter_id, l’elenco include tutti gli eventi di utilizzo del cliente. Con meter_id, include solo gli eventi corrispondenti a quel meter.
Webhook
Il plugin webhook verifica la firma di ogni evento Dodo Payments e
richiama i tuoi handler. L’endpoint predefinito è
/api/auth/dodopayments/webhooks.1
Generate and Set Webhook Secret
Nella dashboard, vai a Developer → Webhooks e aggiungi l’URL del tuo endpoint, ad esempio
https://<your-domain>/api/auth/dodopayments/webhooks. Copia il signing secret dell’endpoint nel file .env:2
Handle Webhook Events
Passa un handler per ogni evento che vuoi elaborare.
onPayload viene eseguito per ogni evento:{ received: true }.
Handler degli eventi webhook supportati
Ogni handler riceve il payload verificato per il relativo tipo di evento:Riferimento della configurazione
Plugin Options
Plugin Options
- client (obbligatorio): istanza del client DodoPayments
- createCustomerOnSignUp (opzionale): crea un cliente Dodo Payments quando un utente si registra o collega un cliente esistente con la stessa email. Il plugin aggiorna inoltre il cliente quando cambiano i dati dell’utente.
- use (obbligatorio): array di plugin da abilitare (checkout, portale, utilizzo, webhook)
- getCustomerParams (opzionale): funzione che riceve
Userdi Better Auth e restituisce campi aggiuntivi da associare al cliente Dodo Payments durante la creazione e l’aggiornamento (ad es.metadata,phone_number). Può essere async.
Checkout Plugin Options
Checkout Plugin Options
- products: array di oggetti
{ productId, slug }o funzione async che ne restituisce uno - successUrl: URL a cui reindirizzare dopo il pagamento riuscito
- authenticatedUsersOnly: richiede l’autenticazione dell’utente (valore predefinito:
false)
Risoluzione dei problemi e suggerimenti
Common Issues
Common Issues
- API key non valida: controlla
DODO_PAYMENTS_API_KEYnel file.enve verifica che la modalità della key corrisponda aenvironment. - Mancata corrispondenza della firma del webhook: verifica che il webhook secret corrisponda a quello impostato nella dashboard di Dodo Payments.
- Cliente non creato: verifica che
createCustomerOnSignUpsia impostato sutrue. - Le richieste al portale o all’utilizzo restituiscono 401: l’indirizzo email dell’utente non è verificato.
Best Practices
Best Practices
- Utilizza variabili d’ambiente per tutti i secret e le key.
- Esegui i test in
test_modeprima di passare alive_mode. - Registra gli eventi webhook per il debugging e l’audit.