Das Java SDK bietet bequemen und ergonomischen Zugriff auf die Dodo Payments REST API für in Java geschriebene Anwendungen. Es nutzt Java-spezifische Funktionen wie Optional, Stream und CompletableFuture für die moderne Java-Entwicklung.
Installation
Maven
Fügen Sie die Abhängigkeit zu Ihrer pom.xml hinzu:
< dependency >
< groupId > com.dodopayments.api </ groupId >
< artifactId > dodo-payments-java </ artifactId >
< version > 1.86.3 </ version >
</ dependency >
Gradle
Fügen Sie die Abhängigkeit zu Ihrer build.gradle hinzu:
implementation ( "com.dodopayments.api:dodo-payments-java:1.86.3" )
Verwenden Sie immer die neueste SDK-Version, um auf die neuesten Dodo Payments-Funktionen zuzugreifen. Prüfen Sie Maven Central auf die aktuelle Version.
Das SDK unterstützt Java 8 und alle späteren Versionen, einschließlich Java 11, 17 und 21.
Schnellstart
Initialisieren Sie den Client und erstellen Sie eine Checkout-Sitzung:
import com.dodopayments.api.client.DodoPaymentsClient;
import com.dodopayments.api.client.okhttp.DodoPaymentsOkHttpClient;
import com.dodopayments.api.models.checkoutsessions.CheckoutSessionCreateParams;
import com.dodopayments.api.models.checkoutsessions.CheckoutSessionRequest;
import com.dodopayments.api.models.checkoutsessions.ProductItemReq;
// Configure using environment variables (DODO_PAYMENTS_API_KEY, DODO_PAYMENTS_BASE_URL)
// Or system properties (dodopayments.apiKey, dodopayments.baseUrl)
DodoPaymentsClient client = DodoPaymentsOkHttpClient . fromEnv ();
CheckoutSessionRequest params = CheckoutSessionRequest . builder ()
. addProductCart ( ProductItemReq . builder ()
. productId ( "product_id" )
. quantity ( 1 )
. build ())
. build ();
CheckoutSessionResponse checkoutSessionResponse = client . checkoutSessions (). create (params);
System . out . println ( checkoutSessionResponse . sessionId ());
Speichern Sie Ihre API-Schlüssel stets sicher mittels Umgebungsvariablen, Systemeigenschaften oder eines sicheren Konfigurationsverwaltungssystems. Hardcodieren Sie sie niemals im Quellcode.
Kernfunktionen
Type Safety Stark typisierte API mit Compile-Time-Sicherheit
Thread-Safe Sicher für gleichzeitige Verwendung in Multi-Thread-Anwendungen
Builder Pattern Intuitives Builder-Pattern zur Erstellung von Requests
Async Support Unterstützung für CompletableFuture für asynchrone Operationen
Konfiguration
Umgebungsvariablen
Konfigurieren Sie mit Umgebungsvariablen oder Systemeigenschaften:
DODO_PAYMENTS_API_KEY = your_api_key_here
DODO_PAYMENTS_BASE_URL = https://live.dodopayments.com
// Automatically reads from environment variables
DodoPaymentsClient client = DodoPaymentsOkHttpClient . fromEnv ();
Manuelle Konfiguration
Konfigurieren Sie manuell mit allen Optionen:
import java.time.Duration;
DodoPaymentsClient client = DodoPaymentsOkHttpClient . builder ()
. bearerToken ( "your_api_key_here" )
. baseUrl ( "https://live.dodopayments.com" )
. maxRetries ( 4 )
. timeout ( Duration . ofSeconds ( 30 ))
. responseValidation ( true )
. build ();
Testmodus
Konfigurieren Sie für die Test-/Sandbox-Umgebung:
DodoPaymentsClient testClient = DodoPaymentsOkHttpClient . builder ()
. fromEnv ()
. testMode ()
. build ();
Häufige Operationen
Erstellen einer Checkout-Sitzung
Generieren Sie eine Checkout-Sitzung:
CheckoutSessionRequest params = CheckoutSessionRequest . builder ()
. addProductCart ( ProductItemReq . builder ()
. productId ( "prod_123" )
. quantity ( 1 )
. build ())
. returnUrl ( "https://yourdomain.com/return" )
. build ();
CheckoutSessionResponse session = client . checkoutSessions (). create (params);
System . out . println ( "Checkout URL: " + session . url ());
Kunden verwalten
Erstellen und Abrufen von Kundeninformationen:
import com.dodopayments.api.models.customers.Customer;
import com.dodopayments.api.models.customers.CustomerCreateParams;
// Create a customer
CustomerCreateParams createParams = CustomerCreateParams . builder ()
. email ( "customer@example.com" )
. name ( "John Doe" )
. putMetadata ( "user_id" , "12345" )
. build ();
Customer customer = client . customers (). create (createParams);
// Retrieve customer
Customer retrieved = client . customers (). retrieve ( "cus_123" );
System . out . println ( "Customer: " + retrieved . name () + " (" + retrieved . email () + ")" );
Abonnements verwalten
Erstellen und verwalten Sie wiederkehrende Abonnements:
import com.dodopayments.api.models.subscriptions. * ;
// Create a subscription
SubscriptionNewParams subscriptionParams = SubscriptionNewParams . builder ()
. customerId ( "cus_123" )
. productId ( "prod_456" )
. priceId ( "price_789" )
. build ();
Subscription subscription = client . subscriptions (). create (subscriptionParams);
// Charge subscription
SubscriptionChargeParams chargeParams = SubscriptionChargeParams . builder ()
. amount ( 1000 )
. build ();
SubscriptionChargeResponse chargeResponse = client . subscriptions ()
. charge ( subscription . id (), chargeParams);
Nutzungsbasierte Abrechnung
Zähler konfigurieren
Erstellen und verwalten Sie Zähler zur Verfolgung der Nutzung:
import com.dodopayments.api.models.meters. * ;
// Create API calls meter
MeterCreateParams apiMeterParams = MeterCreateParams . builder ()
. name ( "API Requests" )
. eventName ( "api_request" )
. aggregation ( "count" )
. putMetadata ( "category" , "api_usage" )
. build ();
Meter apiMeter = client . meters (). create (apiMeterParams);
System . out . println ( "Meter created: " + apiMeter . meterId ());
// List all meters
client . meters (). list ()
. autoPager ()
. forEach (m -> System . out . println ( "Meter: " + m . name () + " - " + m . aggregation ()));
Nutzungsereignisse erfassen
Verfolgen Sie benutzerdefinierte Ereignisse:
import com.dodopayments.api.models.usageevents. * ;
import java.time.OffsetDateTime;
// Ingest single event
UsageEventIngestParams singleEventParams = UsageEventIngestParams . builder ()
. addEvent ( UsageEventIngestParams . Event . builder ()
. eventId ( "api_call_" + System . currentTimeMillis ())
. customerId ( "cus_abc123" )
. eventName ( "api_request" )
. timestamp ( OffsetDateTime . now ())
. putMetadata ( "endpoint" , "/api/v1/users" )
. putMetadata ( "method" , "GET" )
. putMetadata ( "tokens_used" , "150" )
. build ())
. build ();
UsageEventIngestResponse response = client . usageEvents (). ingest (singleEventParams);
System . out . println ( "Processed: " + response . processedEvents ());
Batch-Ereignisse erfassen
Erfassen Sie mehrere Ereignisse effizient (max. 1000 pro Anfrage):
UsageEventIngestParams . Builder batchBuilder = UsageEventIngestParams . builder ();
for ( int i = 0 ; i < 100 ; i ++ ) {
batchBuilder . addEvent ( UsageEventIngestParams . Event . builder ()
. eventId ( "batch_event_" + i + "_" + System . currentTimeMillis ())
. customerId ( "cus_abc123" )
. eventName ( "video_transcode" )
. timestamp ( OffsetDateTime . now (). minusMinutes (i))
. putMetadata ( "video_id" , "video_" + i)
. putMetadata ( "duration_seconds" , String . valueOf ( 120 + i))
. build ());
}
UsageEventIngestResponse batchResponse = client . usageEvents (). ingest ( batchBuilder . build ());
System . out . println ( "Batch processed: " + batchResponse . processedEvents () + " events" );
Fehlerbehandlung
Umfassende Fehlerbehandlung für verschiedene Szenarien:
import com.dodopayments.api.errors. * ;
try {
Payment payment = client . payments (). retrieve ( "pay_invalid" );
} catch ( NotFoundException e ) {
System . err . println ( "Payment not found: " + e . getMessage ());
} catch ( UnauthorizedException e ) {
System . err . println ( "Authentication failed: " + e . getMessage ());
} catch ( PermissionDeniedException e ) {
System . err . println ( "Permission denied: " + e . getMessage ());
} catch ( BadRequestException e ) {
System . err . println ( "Invalid request: " + e . getMessage ());
} catch ( UnprocessableEntityException e ) {
System . err . println ( "Validation error: " + e . getMessage ());
} catch ( RateLimitException e ) {
System . err . println ( "Rate limit exceeded: " + e . getMessage ());
// SDK automatically retries with backoff
} catch ( InternalServerException e ) {
System . err . println ( "Server error: " + e . getMessage ());
} catch ( DodoPaymentsServiceException e ) {
System . err . println ( "API error: " + e . statusCode () + " - " + e . getMessage ());
}
Das SDK wiederholt Anfragen automatisch bei Verbindungsfehlern, 408, 409, 429 und 5xx-Fehlern mit exponentiellem Backoff.
Asynchrone Operationen
Verwenden Sie CompletableFuture für asynchrone Operationen:
import java.util.concurrent.CompletableFuture;
CompletableFuture < CheckoutSessionResponse > future = client . async ()
. checkoutSessions ()
. create (params);
// Handle response asynchronously
future . thenAccept (response -> {
System . out . println ( "Session created: " + response . sessionId ());
}). exceptionally (ex -> {
System . err . println ( "Error: " + ex . getMessage ());
return null ;
});
Spring Boot Integration
Konfigurationsklasse
import com.dodopayments.api.client.DodoPaymentsClient;
import com.dodopayments.api.client.okhttp.DodoPaymentsOkHttpClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@ Configuration
public class DodoPaymentsConfig {
@ Value ( "${dodo.api.key}" )
private String apiKey ;
@ Value ( "${dodo.environment:sandbox}" )
private String environment ;
@ Bean
public DodoPaymentsClient dodoPayments () {
return DodoPaymentsOkHttpClient . builder ()
. bearerToken (apiKey)
. baseUrl ( environment . equals ( "live" )
? "https://live.dodopayments.com"
: "https://sandbox.dodopayments.com" )
. build ();
}
}
Diensteschicht
import com.dodopayments.api.client.DodoPaymentsClient;
import com.dodopayments.api.models.checkoutsessions. * ;
import org.springframework.stereotype.Service;
@ Service
public class PaymentService {
private final DodoPaymentsClient client ;
public PaymentService ( DodoPaymentsClient client ) {
this . client = client;
}
public CheckoutSessionResponse createCheckout ( List < ProductItemReq > items ) {
CheckoutSessionRequest params = CheckoutSessionRequest . builder ()
. productCart (items)
. returnUrl ( "https://yourdomain.com/return" )
. build ();
return client . checkoutSessions (). create (params);
}
}
Ressourcen
GitHub Repository Quellcode anzeigen und beitragen
API Reference Vollständige API-Dokumentation
Discord Community Hilfe erhalten und sich mit Entwicklern verbinden
Report Issues Fehler melden oder Funktionen anfragen
Unterstützung
Brauchen Sie Hilfe mit dem Java SDK?
Mitwirken
Wir freuen uns über Beiträge! Überprüfen Sie die Mitwirkungsrichtlinien , um loszulegen.