Skip to main content
Il Java SDK offre alle applicazioni Java un accesso tipizzato alla REST API di Dodo Payments. Utilizza i tipi Java in tutto il codice: Optional per i campi che possono mancare, Stream per iterare sui risultati e CompletableFuture per le chiamate asincrone.

Installazione

Maven

Add the dependency to your pom.xml:
pom.xml

Gradle

Aggiungi la dipendenza al tuo build.gradle.kts:
build.gradle.kts
Le release dell’SDK aggiungono il supporto alle modifiche dell’API. Per trovare la versione più recente, consulta Maven Central.
L’SDK richiede Java 8 o versioni successive, quindi funziona anche con Java 11, 17 e 21.

Inizio Veloce

Crea un client, quindi crea una checkout session:
fromEnv() si connette alla modalità live, a meno che DODO_PAYMENTS_BASE_URL o dodopayments.baseUrl non indichino diversamente. Per usare la modalità test, consulta Test Mode. Una API key della modalità test funziona solo in modalità test.
Conserva le API key nelle variabili d’ambiente, nelle system properties o in un secrets manager. Non inserirle mai direttamente nel codice sorgente.

Funzionalità principali

Type Safety

Classi di request e response tipizzate per i controlli in fase di compilazione.

Shared Client

Crea un client e riutilizzalo per tutte le request: contiene il connection pool e i thread pool. Gli oggetti request e response sono immutabili.

Builder Pattern

Ogni classe request dispone di un builder e toBuilder() crea una copia modificata.

Async Support

client.async() restituisce un client i cui metodi restituiscono CompletableFuture.

Configurazione

Variabili d’ambiente

fromEnv() legge queste variabili d’ambiente o le system properties corrispondenti. Le system properties hanno la precedenza:
.env
La API key proviene da DODO_PAYMENTS_API_KEY o dodopayments.apiKey. Il webhook signing secret proviene da DODO_PAYMENTS_WEBHOOK_KEY o dodopayments.webhookKey, mentre la base URL proviene da DODO_PAYMENTS_BASE_URL o dodopayments.baseUrl. Crea un client e riutilizzalo, perché ogni client dispone di un proprio connection pool e di propri thread pool. Per verificare un webhook, passa il raw request body e gli header a client.webhooks().unwrap(UnwrapWebhookParams.builder().body(rawBody).headers(headers).build()), dove headers è un com.dodopayments.api.core.http.Headers. Il metodo verifica la signature con la tua webhook key e restituisce l’evento analizzato oppure genera DodoPaymentsWebhookException. Senza header, unwrap non verifica la signature. client.webhooks().unsafeUnwrap(rawBody) analizza il body senza verificarlo, quindi usalo solo per i test. Consulta Webhooks.

Configurazione manuale

Imposta ogni opzione sul builder:
Per impostazione predefinita, il client esegue due retry e va in timeout dopo 1 minuto. Ripete le request in caso di errori di connessione e di response con status 408, 409, 429 o 500 e superiori. Per sostituire il timeout di una singola chiamata, passa RequestOptions.builder().timeout(Duration.ofSeconds(30)).build() come secondo argomento del metodo. responseValidation(true) verifica in anticipo che l’intera response corrisponda ai tipi previsti. Senza questa opzione, l’SDK genera DodoPaymentsInvalidDataException solo quando leggi una property con un tipo imprevisto.

Modalità test

Per usare la modalità test (https://test.dodopayments.com), chiama testMode() sul builder:

Operazioni comuni

Gli esempi di questa sezione utilizzano client di Quick Start.

Creare una checkout session

Crea una checkout session, quindi reindirizza il customer all’URL di checkout restituito:
checkoutUrl() restituisce un Optional<String>. Ogni URL di checkout funziona una sola volta e scade dopo 24 ore. Per tutte le opzioni della session, consulta Checkout Sessions.

Gestire i customer

Crea un customer con un indirizzo email, un nome e i metadata, quindi recuperalo tramite ID:

Gestire le subscription

Crea una subscription con un payment link, quindi addebitala se si tratta di una subscription on-demand.
POST /subscriptions (il metodo subscriptions().create() dell’SDK) è deprecato. Continua a funzionare per le integrazioni esistenti, ma per le nuove integrazioni è consigliabile creare le subscription tramite una Checkout Session.
productPrice è espresso nell’unità minima della valuta, ad esempio in centesimi per USD o paise per INR. Per addebitare $25.00, passa 2500.
subscriptions().charge(...) è destinato alle subscription on-demand. Dodo Payments addebita automaticamente le altre subscription secondo la billing schedule del product.

Fatturazione basata sull’utilizzo

Configurare i meter

Crea un meter che conteggi gli eventi, quindi elenca i tuoi meter. autoPager() esegue l’iterazione su ogni meter e recupera altre pagine quando necessario:

Acquisire gli usage event

Invia un usage event per un customer. I valori dei metadata dell’evento sono oggetti JsonValue:
eventId è la idempotency key, quindi assegna a ogni evento un valore univoco. Un timestamp antecedente di oltre 1 ora o successivo di oltre 5 minuti viene rifiutato.

Acquisire eventi in batch

Invia fino a 1.000 eventi in una singola request. Questo esempio utilizza gli import dell’esempio precedente:

Gestione degli errori

L’SDK genera unchecked exception. In caso di error status, genera una sottoclasse di DodoPaymentsServiceException, che dispone di statusCode(), headers() e body(). Intercetta le classi specifiche che vuoi gestire prima della base class:
Gli status senza una propria classe, come 409, generano UnexpectedStatusCodeException. Gli errori di rete generano DodoPaymentsIoException, mentre le response che l’SDK non riesce a interpretare generano DodoPaymentsInvalidDataException. Tutte queste classi estendono DodoPaymentsException.
L’SDK ripete le request in caso di errori di connessione e di response con status 408, 409, 429 o 500 e superiori, due volte per impostazione predefinita, con exponential backoff.

Operazioni asincrone

Chiama async() sul client per ottenere un client asincrono. I suoi metodi restituiscono un CompletableFuture:
Per creare un client asincrono fin dall’inizio, usa DodoPaymentsOkHttpClientAsync.fromEnv().

Integrazione con Spring Boot

Classe di configurazione

Registra un client come bean e scegli l’ambiente tramite una property:

Service layer

Inietta il client in un service:

Risorse

GitHub Repository

Codice sorgente, release ed elenco completo dei metodi.

API Reference

Ogni endpoint, parametro e response.

Discord Community

Fai domande e parla con altri developer.

Report Issues

Segnala bug o richiedi funzionalità.

Supporto

Per ricevere assistenza sul Java SDK:

Contribuire

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