Skip to main content
O Java SDK oferece às aplicações Java acesso tipado à REST API do Dodo Payments. Ele usa tipos Java em todo o código: Optional para campos que podem estar ausentes, Stream para iterar sobre resultados e CompletableFuture para chamadas assíncronas.

Instalação

Maven

Adicione a dependência ao seu pom.xml:
pom.xml

Gradle

Adicione a dependência ao seu build.gradle.kts:
build.gradle.kts
As versões do SDK adicionam suporte a alterações na API. Para encontrar a versão mais recente, consulte o Maven Central.
O SDK requer Java 8 ou posterior, portanto também funciona no Java 11, 17 e 21.

Início Rápido

Crie um cliente e, em seguida, crie uma sessão de checkout:
fromEnv() se conecta ao modo live, a menos que DODO_PAYMENTS_BASE_URL ou dodopayments.baseUrl indique o contrário. Para usar o modo de teste, consulte Modo de teste. Uma chave de API do modo de teste funciona somente no modo de teste.
Mantenha as chaves de API em variáveis de ambiente, propriedades do sistema ou em um gerenciador de segredos. Nunca as inclua diretamente no código-fonte.

Recursos principais

Type Safety

Classes tipadas de solicitação e resposta para verificações em tempo de compilação.

Shared Client

Crie um cliente e reutilize-o entre as solicitações: ele mantém a conexão e os pools de threads. Os objetos de solicitação e resposta são imutáveis.

Builder Pattern

Toda classe de solicitação tem um builder, e toBuilder() cria uma cópia modificada.

Async Support

client.async() retorna um cliente cujos métodos retornam CompletableFuture.

Configuração

Variáveis de ambiente

fromEnv() lê estas variáveis de ambiente ou as propriedades do sistema correspondentes. As propriedades do sistema têm precedência:
.env
A chave de API vem de DODO_PAYMENTS_API_KEY ou dodopayments.apiKey. O segredo de assinatura do webhook vem de DODO_PAYMENTS_WEBHOOK_KEY ou dodopayments.webhookKey, e a URL base vem de DODO_PAYMENTS_BASE_URL ou dodopayments.baseUrl. Crie um cliente e reutilize-o, pois cada cliente tem seu próprio pool de conexões e pools de threads. Para verificar um webhook, passe o corpo bruto da solicitação e os cabeçalhos para client.webhooks().unwrap(UnwrapWebhookParams.builder().body(rawBody).headers(headers).build()), onde headers é um com.dodopayments.api.core.http.Headers. Ele verifica a assinatura com sua chave de webhook e retorna o evento analisado ou lança DodoPaymentsWebhookException. Sem cabeçalhos, unwrap não verifica a assinatura. client.webhooks().unsafeUnwrap(rawBody) analisa o corpo sem verificá-lo; portanto, use-o somente para testes. Consulte Webhooks.

Configuração manual

Defina cada opção no builder:
Por padrão, o cliente tenta novamente duas vezes e encerra a operação após 1 minuto. Ele tenta novamente em caso de erros de conexão e de respostas com status 408, 409, 429 ou 500 e superiores. Para substituir o tempo limite de uma chamada, passe RequestOptions.builder().timeout(Duration.ofSeconds(30)).build() como o segundo argumento do método. responseValidation(true) verifica antecipadamente se toda a resposta corresponde aos tipos esperados. Sem essa opção, o SDK lança DodoPaymentsInvalidDataException somente quando você lê uma propriedade com um tipo inesperado.

Modo de teste

Para usar o modo de teste (https://test.dodopayments.com), chame testMode() no builder:

Operações comuns

Os exemplos nesta seção usam o client do Início rápido.

Criar uma sessão de checkout

Crie uma sessão de checkout e redirecione o cliente para a URL de checkout retornada:
checkoutUrl() retorna um Optional<String>. Cada URL de checkout funciona uma vez e expira após 24 horas. Para ver todas as opções de sessão, consulte Sessões de checkout.

Gerenciar clientes

Crie um cliente com endereço de e-mail, nome e metadados e, em seguida, recupere-o pelo ID:

Gerenciar assinaturas

Crie uma assinatura com um link de pagamento e, em seguida, faça a cobrança se for uma assinatura sob demanda.
POST /subscriptions (o método subscriptions().create() do SDK) está obsoleto. Ele continua funcionando para integrações existentes, mas as novas integrações devem criar assinaturas por meio de uma Sessão de checkout.
productPrice está na menor unidade monetária, como centavos para USD ou paise para INR. Para cobrar $25.00, passe 2500.
subscriptions().charge(...) é destinado a assinaturas sob demanda. O Dodo Payments cobra automaticamente as outras assinaturas de acordo com o cronograma de cobrança do produto.

Cobrança baseada em uso

Configurar medidores

Crie um medidor que conte eventos e, em seguida, liste seus medidores. autoPager() itera sobre todos os medidores e busca mais páginas conforme necessário:

Ingerir eventos de uso

Envie um evento de uso para um cliente. Os valores dos metadados do evento são objetos JsonValue:
O eventId é a chave de idempotência; portanto, atribua um valor exclusivo a cada evento. Um timestamp com mais de 1 hora no passado ou mais de 5 minutos no futuro é rejeitado.

Ingerir eventos em lote

Envie até 1.000 eventos em uma única solicitação. Este exemplo usa as importações do exemplo anterior:

Tratamento de erros

O SDK lança exceções não verificadas. Para um status de erro, ele lança uma subclasse de DodoPaymentsServiceException, que contém statusCode(), headers() e body(). Capture as classes específicas que deseja tratar antes da classe base:
Statuses sem uma classe própria, como 409, lançam UnexpectedStatusCodeException. Falhas de rede lançam DodoPaymentsIoException, e respostas que o SDK não consegue interpretar lançam DodoPaymentsInvalidDataException. Todas essas classes estendem DodoPaymentsException.
O SDK tenta novamente em caso de erros de conexão e de respostas com status 408, 409, 429 ou 500 e superiores, duas vezes por padrão, com espera exponencial.

Operações assíncronas

Chame async() no cliente para obter um cliente assíncrono. Seus métodos retornam um CompletableFuture:
Para criar um cliente assíncrono desde o início, use DodoPaymentsOkHttpClientAsync.fromEnv().

Integração com Spring Boot

Classe de configuração

Registre um cliente como um bean e escolha o ambiente a partir de uma propriedade:

Camada de serviço

Injete o cliente em um serviço:

Recursos

GitHub Repository

Código-fonte, versões e a lista completa de métodos.

API Reference

Todos os endpoints, parâmetros e respostas.

Discord Community

Faça perguntas e converse com outros desenvolvedores.

Report Issues

Relate bugs ou solicite recursos.

Suporte

Para obter ajuda com o Java SDK:

Contribuição

Para contribuir, leia as diretrizes de contribuição.
Última modificação em 26 de setembro de 2026