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:O SDK requer Go 1.22 ou posterior.
Início Rápido
Crie um cliente e, em seguida, uma sessão de checkout: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.
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, adicioneoption.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. Definaoption.WithMaxRetries no cliente ou em uma única requisição:
Operações comuns
Os exemplos nesta seção também usam um context, por exemploctx := context.Background().
Criar uma sessão de checkout
Crie uma sessão de checkout e redirecione o cliente para oCheckoutURL retornado:
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 pacoteshared:
Gerenciar assinaturas
Crie uma assinatura, cobre uma assinatura on-demand e leia o histórico de uso de uma assinatura.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:
*url.Error que encapsula um *net.OpError. apiErr.DumpRequest(true) retorna a requisição serializada.
Middleware
Adicione middleware comoption.WithMiddleware. Um middleware recebe cada requisição e uma função next que a envia:
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:- Discord: entre no servidor da comunidade para obter ajuda em tempo real.
- E-mail: entre em contato pelo endereço support@dodopayments.com.
- GitHub: abra uma issue no repositório.