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:Il SDK richiede Go 1.22 o versioni successive.
Avvio Veloce
Crea un client, quindi crea una checkout session: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.
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, aggiungioption.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. Impostaoption.WithMaxRetries sul client o su una singola richiesta:
Operazioni comuni
Anche gli esempi di questa sezione usano un context, ad esempioctx := context.Background().
Creare una Checkout Session
Crea una checkout session, quindi reindirizza il customer all’CheckoutURL restituito:
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 packageshared:
Gestire le subscriptions
Crea una subscription, addebita una subscription on-demand e leggi la cronologia d’uso di una subscription.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:
*url.Error che contiene un *net.OpError. apiErr.DumpRequest(true) restituisce la richiesta serializzata.
Middleware
Aggiungi middleware conoption.WithMiddleware. Un middleware riceve ogni richiesta e una funzione next che la invia:
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:- Discord: Unisciti al server della community per ricevere assistenza in tempo reale.
- Email: Contatta support@dodopayments.com.
- GitHub: Apri un issue nel repository.