Skip to main content
Il package @dodopayments/tanstack fornisce al tuo progetto TanStack Start tre request handler. Checkout restituisce gli URL di checkout, CustomerPortal invia il cliente al Customer Portal e Webhooks verifica gli eventi webhook e li inoltra al tuo codice. Ogni handler accetta un Request standard e restituisce un Response, quindi puoi chiamarlo da una server route handler.

Checkout Handler

Crea URL di checkout con flussi statici, dinamici e di checkout session.

Customer Portal

Consenti ai clienti di gestire i propri abbonamenti e dati.

Webhooks

Ricevi ed elabora gli eventi webhook di Dodo Payments.

Installazione

1

Install the Package

Esegui questo comando nella root del progetto:
Il package richiede inoltre zod 3.25 o versioni successive, indicato come peer dependency.
2

Set Up Environment Variables

Crea un file .env nella root del progetto. Crea la API key in Developer → API Keys. Aggiungi il tuo endpoint webhook in Developer → Webhooks e copia il suo Signing secret in DODO_PAYMENTS_WEBHOOK_KEY:
TanStack Start carica i file .env e le server route leggono i valori da process.env. DODO_PAYMENTS_RETURN_URL è la pagina alla quale vengono reindirizzati i clienti dopo il checkout. Se non passi un environment, gli handler usano live_mode. Una API key di test funziona solo con test_mode.
Non eseguire il commit del file .env o dei secret nel version control.

Esempi di Route Handler

Gli esempi sono server route di TanStack Start in src/routes/api/. Ognuno definisce i propri handler in server.handlers all’interno di createFileRoute. Le versioni precedenti di TanStack Start, come la 1.129, definiscono le server route con createServerFileRoute da @tanstack/react-start/server e una chiamata .methods(). Gli handler di Dodo Payments funzionano allo stesso modo con entrambe le API: passa loro il request.
Usa questo handler per aggiungere il checkout di Dodo Payments alla tua app. L’handler GET gestisce il checkout statico. L’handler POST gestisce le checkout session o il checkout dinamico quando imposti type: "dynamic". L’esempio di checkout dinamico presuppone che type: "dynamic" sia impostato.

Checkout Route Handler

Il checkout handler supporta tutti e tre i modi per accettare pagamenti con Dodo Payments:
  • Static Payment Links: URL condivisibili che raccolgono pagamenti senza codice.
  • Dynamic Payment Links: payment link che generi con dettagli personalizzati. Usano endpoint deprecati.
  • Checkout Sessions: checkout ospitato con carrello prodotti, dati del cliente e opzioni di personalizzazione. Questo è il flusso consigliato.
Checkout accetta queste opzioni: L’handler gestisce il checkout statico per le richieste GET. Per le richieste POST, crea un payment link dinamico quando type è dynamic e, negli altri casi, una checkout session.

Query Parameter supportati

string
obbligatorio
Identificatore del prodotto, ad esempio ?productId=pdt_nZuwz45WAs64n3l07zpQR.
integer
predefinito:"1"
Quantità del prodotto.
string
Nome completo del cliente. Ignorato se viene fornito firstName o lastName.
string
Nome del cliente.
string
Cognome del cliente.
string
Indirizzo email del cliente.
string
Paese del cliente, come codice ISO 3166-1 alpha-2.
string
Indirizzo del cliente.
string
Città del cliente.
string
Stato o provincia del cliente.
string
CAP o codice postale del cliente.
boolean
Imposta su true per disabilitare il campo del nome completo.
boolean
Imposta su true per disabilitare il campo del nome.
boolean
Imposta su true per disabilitare il campo del cognome.
boolean
Imposta su true per disabilitare il campo email.
boolean
Imposta su true per disabilitare il campo del paese.
boolean
Imposta su true per disabilitare il campo della riga dell’indirizzo.
boolean
Imposta su true per disabilitare il campo della città.
boolean
Imposta su true per disabilitare il campo dello stato.
boolean
Imposta su true per disabilitare il campo del CAP.
string
Valuta del pagamento, ad esempio USD.
boolean
predefinito:"true"
Mostra o nascondi il selettore della valuta.
number
Imposta l’importo addebitato, in unità principali della valuta, ad esempio 12.5 per $12.50. Funziona solo con i prodotti Pay What You Want e viene ignorato se è inferiore al prezzo minimo del prodotto.
boolean
predefinito:"true"
Mostra o nascondi la sezione degli sconti.
string
Qualsiasi query parameter che inizia con metadata_ viene passato al checkout come metadata, ad esempio metadata_orderId=123.
Un flag di disabilitazione ha effetto solo quando il campo corrispondente contiene un valore, ad esempio email con disableEmail=true. L’handler aggiunge returnUrl dalla propria configurazione al link come redirect_url.
Se productId è assente, l’handler restituisce una risposta 400. Anche i query parameter non validi o un prodotto che non esiste nel tuo account restituiscono 400.

Formato della risposta

Il checkout statico restituisce una risposta JSON con l’URL di checkout. In test mode, l’URL usa test.checkout.dodopayments.com:
  • Invia i parametri come JSON body in una richiesta POST.
  • Supporta sia pagamenti una tantum sia ricorrenti. L’handler recupera il prodotto, quindi crea un abbonamento se il prodotto è ricorrente e un pagamento una tantum negli altri casi.
  • Il body richiede billing (con street, city, state, country e zipcode) e customer, oltre a product_id o product_cart. Gli abbonamenti richiedono product_id.
  • Per tutti i body field supportati, consulta:
Il checkout dinamico funge da proxy per gli endpoint deprecati POST /payments e POST /subscriptions. Continua a funzionare per le integrazioni esistenti, ma per le nuove integrazioni dovresti usare le checkout session.

Formato della risposta

Il checkout dinamico restituisce una risposta JSON con il payment link come URL di checkout:
Le checkout session creano un checkout ospitato per acquisti una tantum e abbonamenti, con pieno controllo sulla personalizzazione. product_cart è l’unico campo obbligatorio e richiede almeno un prodotto. Se il body non contiene return_url, l’handler usa returnUrl dalla propria configurazione.Ogni checkout_url funziona una sola volta e scade dopo 24 ore, oppure dopo 15 minuti quando passi confirm: true. Una session creata con payment_method_id non restituisce checkout_url, quindi l’handler risponde con 400.Per ulteriori dettagli e per tutti i field supportati, consulta la Checkout Sessions Integration Guide.

Formato della risposta

Le checkout session restituiscono una risposta JSON con l’URL di checkout:

Customer Portal Route Handler

Il Customer Portal route handler crea una session Customer Portal per il cliente specificato e reindirizza il browser a tale session. CustomerPortal accetta le stesse opzioni bearerToken e environment di Checkout.
L’handler non verifica chi lo sta chiamando. Chiunque lo richieda con un customer ID ottiene il portale di quel cliente. Proteggi la route con la tua autenticazione e passa solo il customer ID dell’utente autenticato.

Query Parameter

string
obbligatorio
Il customer ID per la session del portale, ad esempio ?customer_id=cus_123.
boolean
Se impostato su true, Dodo Payments invia anche via email il link del portale al cliente.
L’handler restituisce 400 se customer_id è assente e 500 se non è possibile creare la session del portale.

Webhook Route Handler

Il webhook route handler verifica ogni richiesta con il webhook secret, passato come webhookKey, prima di eseguire il tuo codice:
  • Method: Sono supportate solo le richieste POST. Gli altri method restituiscono 405.
  • Signature Verification: Verifica gli header webhook-id, webhook-timestamp e webhook-signature con webhookKey, seguendo la specifica Standard Webhooks. Restituisce 401 se la verifica non riesce.
  • Payload Validation: Valida il payload con Zod. Restituisce 400 per un payload non valido.
  • Error Handling:
    • 401: Signature non valida
    • 400: Payload non valido
    • 500: Errore interno durante la verifica
  • Event Routing: Chiama onPayload per ogni evento, quindi l’handler per il tipo dell’evento e restituisce 200.
L’adapter non intercetta gli errori generati dai tuoi handler. Gli errori vengono propagati a TanStack Start e la richiesta fallisce.

Webhook Event Handler supportati

Ogni handler è facoltativo e asincrono e riceve il payload verificato per il relativo tipo di evento:
Per sapere cosa significa ciascun evento, consulta la Webhook Event Guide.

Prompt per LLM

Copia questo prompt nel tuo assistente di coding AI per aggiungere l’adapter al tuo 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