Skip to main content
Il Go SDK consente alle applicazioni Go di accedere con tipi definiti alla REST API di Dodo Payments. Ogni metodo accetta un context.Context, i parametri delle richieste usano un wrapper Field che distingue i valori zero dai campi omessi e puoi aggiungere middleware a ogni richiesta.

Installazione

Aggiungi il modulo al progetto:
Per fissare una versione specifica:
Il SDK richiede Go 1.22 o versioni successive.

Avvio Veloce

Crea un client, quindi crea una checkout session:
Se ometti option.WithBearerToken, NewClient legge la variabile d’ambiente DODO_PAYMENTS_API_KEY. Se ometti option.WithEnvironmentTestMode(), il client si connette alla modalità live. Una API key della modalità test funziona solo in modalità test.
Conserva le API key nelle variabili d’ambiente o in un secrets manager. Non inserirle mai direttamente nel codice sorgente.

Funzionalità principali

Context Support

Ogni metodo accetta un context.Context per la cancellazione e i timeout.

Strong Typing

Parametri delle richieste e struct delle risposte tipizzati per i controlli in fase di compilazione.

Middleware

Aggiungi middleware con option.WithMiddleware per logging, metriche e logica personalizzata.

Goroutine Safe

Condividi un unico client tra le goroutine.

Configurazione

NewClient legge dall’ambiente DODO_PAYMENTS_API_KEY, DODO_PAYMENTS_WEBHOOK_KEY (il tuo webhook signing secret) e DODO_PAYMENTS_BASE_URL. Le opzioni che passi, come option.WithBearerToken, option.WithWebhookKey e option.WithBaseURL, hanno la precedenza su questi valori. Per verificare un webhook, passa il body grezzo della richiesta e gli header a client.Webhooks.Unwrap(rawBody, r.Header). Il metodo controlla la signature con la tua webhook key e restituisce l’evento analizzato. client.Webhooks.UnsafeUnwrap(rawBody) analizza il body senza verificarlo, quindi usalo solo per i test. Vedi Webhooks. Gli esempi in questa pagina usano client di Quick Start.

Context e timeout

Per impostazione predefinita, le richieste non hanno un timeout. Una deadline del context limita l’intera chiamata, inclusi i retries. Per limitare ogni tentativo, aggiungi option.WithRequestTimeout():

Configurazione dei retries

Il SDK ripete le richieste in caso di errori di connessione e di risposte con status 408, 409, 429 o 500 e superiori. Per impostazione predefinita esegue due retries, con exponential backoff. Imposta option.WithMaxRetries sul client o su una singola richiesta:

Operazioni comuni

Anche gli esempi di questa sezione usano un context, ad esempio ctx := context.Background().

Creare una Checkout Session

Crea una checkout session, quindi reindirizza il customer all’CheckoutURL restituito:
Ogni checkout URL funziona una sola volta e scade dopo 24 ore. Per tutte le opzioni della sessione, vedi Checkout Sessions.

Gestire i customers

Crea un customer con un indirizzo email e un nome, quindi recuperalo tramite ID. I valori dei metadata usano i union types del package shared:

Gestire le subscriptions

Crea una subscription, addebita una subscription on-demand e leggi la cronologia d’uso di una subscription.
POST /subscriptions (il metodo Subscriptions.New del SDK) è deprecato. Continua a funzionare per le integrazioni esistenti, ma le nuove integrazioni devono creare le subscriptions tramite una Checkout Session.
Billing richiede solo Country, un codice paese ISO di due lettere. Customer è un CustomerRequestUnionParam: passa AttachExistingCustomerParam{CustomerID: ...} per un customer esistente oppure NewCustomerParam{Email: ..., Name: ...} per crearne uno. Charge è destinato alle subscriptions on-demand, mentre ProductPrice è espresso nell’unità minima della valuta. GetUsageHistory restituisce una pagina di risultati; GetUsageHistoryAutoPaging scorre tutte le pagine.

Fatturazione basata sull’utilizzo

Acquisire usage events

Invia usage events per un customer:
EventID è la idempotency key, quindi assegna a ogni evento un valore univoco. Se lo stesso EventID compare due volte nella stessa richiesta, l’intera richiesta viene rifiutata. Se un EventID è già stato acquisito, il nuovo evento viene ignorato. Una richiesta accetta fino a 1.000 eventi. Timestamp utilizza per impostazione predefinita l’ora corrente e viene rifiutato se è antecedente di oltre 1 ora o successivo di oltre 5 minuti.

Elencare gli usage events

Elenca gli eventi filtrati per customer e nome dell’evento:
List restituisce una pagina. Per scorrere tutte le pagine, chiama client.UsageEvents.ListAutoPaging(ctx, params) ed esegui un ciclo con iter.Next(), iter.Current() e iter.Err(). Gli altri metodi list hanno la stessa variante AutoPaging e ogni pagina dispone di un metodo GetNextPage().

Gestione degli errori

Quando l’API restituisce uno status code non di successo, il SDK restituisce un errore di tipo *dodopayments.Error. Contiene StatusCode, *http.Request e *http.Response, oltre al JSON del body dell’errore. Usa errors.As per esaminarlo e usa StatusCode per gestire casi specifici:
Gli altri errori vengono restituiti senza wrapper. Ad esempio, se il transport HTTP non riesce, potresti ricevere un *url.Error che contiene un *net.OpError. apiErr.DumpRequest(true) restituisce la richiesta serializzata.

Middleware

Aggiungi middleware con option.WithMiddleware. Un middleware riceve ogni richiesta e una funzione next che la invia:
Più middleware nella stessa chiamata option.WithMiddleware vengono eseguiti da sinistra a destra. Il middleware passato a NewClient viene eseguito prima del middleware passato a una singola richiesta.

Concorrenza

Il client è sicuro per l’uso concorrente, quindi puoi condividere un unico client tra le goroutine:

Risorse

GitHub Repository

Codice sorgente, release ed elenco completo dei metodi.

API Reference

Ogni endpoint, parametro e risposta.

Discord Community

Fai domande e parla con altri sviluppatori.

Report Issues

Segnala bug o richiedi funzionalità.

Supporto

Per assistenza con il Go SDK:

Contribuire

Per contribuire, leggi le linee guida per i contributi.
Ultima modifica il 26 settembre 2026