Skip to main content

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.
Non inviare mai chiavi API o segreti al controllo versione.
2

Set Up Server-Side Integration

Crea o aggiorna src/lib/auth.ts:
Il plugin aggiunge un campo 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.
Imposta environment su live_mode per la produzione.
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 customer passato. In assenza di un utente autenticato, utilizza l’oggetto customer.
  • Altri campi: l’argomento accetta gli stessi campi del request body dell’endpoint Create Checkout Session, oltre a slug e referenceId.
Se lo slug non è configurato o non passi né 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 authClient.dodopayments.checkout è deprecato. Usa checkoutSession per le nuove implementazioni.
Il metodo legacy richiede billing 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 plugin usage() 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.ingest registra un evento per l’utente autenticato.
  • authClient.dodopayments.usage.meters.list elenca gli eventi di utilizzo del cliente autenticato. Accetta i query parameter page_number, page_size, event_name, meter_id, start e end.
Dodo Payments rifiuta gli eventi con timestamp antecedenti di più di un’ora o successivi di più di cinque minuti.
Se ometti 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:
Se la verifica della firma non riesce o un handler genera un errore, l’endpoint risponde con 400. Al termine dell’esecuzione degli handler, restituisce { received: true }.

Handler degli eventi webhook supportati

Ogni handler riceve il payload verificato per il relativo tipo di evento:

Riferimento della configurazione

  • 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 User di 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.
  • 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

  • API key non valida: controlla DODO_PAYMENTS_API_KEY nel file .env e verifica che la modalità della key corrisponda a environment.
  • 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 createCustomerOnSignUp sia impostato su true.
  • Le richieste al portale o all’utilizzo restituiscono 401: l’indirizzo email dell’utente non è verificato.
  • Utilizza variabili d’ambiente per tutti i secret e le key.
  • Esegui i test in test_mode prima di passare a live_mode.
  • Registra gli eventi webhook per il debugging e l’audit.

Prompt per gli LLM

Copia questo prompt nel tuo assistente di AI coding per chiedergli di aggiungere l’adattatore al progetto. Per fornire al tuo agent anche la documentazione e le skill di Dodo Payments, installa l’Agent Plugin.
Ultima modifica il 26 settembre 2026