Skip to main content
O SDK Go oferece às aplicações Go acesso tipado à API REST do Dodo Payments. Cada método recebe um context.Context, os parâmetros de requisição usam um wrapper Field que separa valores zero de campos omitidos, e você pode adicionar middleware a cada requisição.

Instalação

Adicione o módulo ao seu projeto:
Para fixar uma versão específica:
O SDK requer Go 1.22 ou posterior.

Início Rápido

Crie um cliente e, em seguida, uma sessão de checkout:
Se você omitir option.WithBearerToken, NewClient lê a variável de ambiente DODO_PAYMENTS_API_KEY. Se você omitir option.WithEnvironmentTestMode(), o cliente se conecta ao modo live. Uma chave de API do modo de teste funciona somente no modo de teste.
Mantenha as chaves de API em variáveis de ambiente ou em um gerenciador de secrets. Nunca as inclua diretamente no código-fonte.

Recursos principais

Context Support

Cada método recebe um context.Context para cancelamento e timeouts.

Strong Typing

Parâmetros de requisição e structs de resposta tipados para verificações em tempo de compilação.

Middleware

Adicione middleware com option.WithMiddleware para logging, métricas e lógica personalizada.

Goroutine Safe

Compartilhe um cliente entre goroutines.

Configuração

NewClient lê DODO_PAYMENTS_API_KEY, DODO_PAYMENTS_WEBHOOK_KEY (seu secret de assinatura de webhook) e DODO_PAYMENTS_BASE_URL do ambiente. As opções que você fornece, como option.WithBearerToken, option.WithWebhookKey e option.WithBaseURL, substituem esses valores. Para verificar um webhook, passe o corpo bruto da requisição e os headers para client.Webhooks.Unwrap(rawBody, r.Header). Ele verifica a assinatura usando sua chave de webhook e retorna o evento analisado. client.Webhooks.UnsafeUnwrap(rawBody) analisa o corpo sem verificá-lo; portanto, use-o somente para testes. Consulte Webhooks. Os exemplos nesta página usam o client de Início rápido.

Context e timeouts

As requisições não têm timeout por padrão. Um deadline de context limita toda a chamada, incluindo os retries. Para limitar cada tentativa, adicione option.WithRequestTimeout():

Configuração de retries

O SDK faz retry de erros de conexão e de respostas com status 408, 409, 429 ou 500 e superiores. Por padrão, ele faz retry duas vezes, com backoff exponencial. Defina option.WithMaxRetries no cliente ou em uma única requisição:

Operações comuns

Os exemplos nesta seção também usam um context, por exemplo ctx := context.Background().

Criar uma sessão de checkout

Crie uma sessão de checkout e redirecione o cliente para o CheckoutURL retornado:
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 um endereço de e-mail e um nome e, em seguida, recupere-o pelo ID. Os valores de metadata usam os tipos de união do pacote shared:

Gerenciar assinaturas

Crie uma assinatura, cobre uma assinatura on-demand e leia o histórico de uso de uma assinatura.
POST /subscriptions (o método Subscriptions.New do SDK) está deprecated. Ele ainda funciona para integrações existentes, mas novas integrações devem criar assinaturas por meio de uma Sessão de checkout.
Billing requer apenas Country, um código de país ISO de duas letras. Customer é um CustomerRequestUnionParam: passe AttachExistingCustomerParam{CustomerID: ...} para um cliente existente ou NewCustomerParam{Email: ..., Name: ...} para criar um. Charge é destinado a assinaturas on-demand, e ProductPrice está na menor unidade da moeda. GetUsageHistory retorna uma página de resultados; GetUsageHistoryAutoPaging itera por todas as páginas.

Cobrança baseada em uso

Ingerir eventos de uso

Envie eventos de uso para um cliente:
O EventID é a chave de idempotência; portanto, atribua um valor exclusivo a cada evento. Se o mesmo EventID aparecer duas vezes em uma requisição, toda a requisição será rejeitada. Se um EventID já tiver sido ingerido, o novo evento será ignorado. Uma requisição aceita até 1.000 eventos. Timestamp usa como padrão o horário atual e é rejeitado se estiver mais de 1 hora no passado ou mais de 5 minutos no futuro.

Listar eventos de uso

Liste eventos filtrados por cliente e nome do evento:
List retorna uma página. Para iterar por todas as páginas, chame client.UsageEvents.ListAutoPaging(ctx, params) e faça um loop com iter.Next(), iter.Current() e iter.Err(). Outros métodos de listagem têm a mesma variante AutoPaging, e cada página tem um método GetNextPage().

Tratamento de erros

Quando a API retorna um status code de erro, o SDK retorna um erro do tipo *dodopayments.Error. Ele contém StatusCode, *http.Request e *http.Response, além do JSON do corpo do erro. Use errors.As para inspecioná-lo e use StatusCode em condições para tratar casos específicos:
Outros erros são retornados sem wrapper. Por exemplo, se o transporte HTTP falhar, você poderá receber um *url.Error que encapsula um *net.OpError. apiErr.DumpRequest(true) retorna a requisição serializada.

Middleware

Adicione middleware com option.WithMiddleware. Um middleware recebe cada requisição e uma função next que a envia:
Vários middlewares em uma única chamada option.WithMiddleware são executados da esquerda para a direita. O middleware passado para NewClient é executado antes do middleware passado para uma única requisição.

Concorrência

O cliente é seguro para uso concorrente, portanto você pode compartilhá-lo entre goroutines:

Recursos

GitHub Repository

Código-fonte, releases e a lista completa de métodos.

API Reference

Cada endpoint, parâmetro e resposta.

Discord Community

Faça perguntas e converse com outros desenvolvedores.

Report Issues

Relate bugs ou solicite recursos.

Suporte

Para obter ajuda com o SDK Go:

Contribuição

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