Skip to main content

Visão Geral

O adaptador do Better Auth, @dodopayments/better-auth, é um plugin do Better Auth que conecta seus usuários ao Dodo Payments. Ele oferece:
  • Criação opcional de clientes ou vinculação de clientes por e-mail durante o cadastro
  • Sessões de checkout, o método de checkout recomendado, com mapeamento de slug de produto
  • Um Customer Portal de autoatendimento
  • Endpoints de ingestão e consulta de uso para cobrança baseada em uso
  • Processamento de eventos de webhook com verificação de assinatura
  • Tipos TypeScript para cada endpoint
Você precisa de uma conta Dodo Payments e chaves de API para usar esta integração.

Pré-requisitos

  • Node.js 16 ou posterior
  • Acesso ao seu dashboard do Dodo Payments
  • Um projeto existente que usa Better Auth 1.4 ou uma versão posterior da série 1.x

Instalação

1

Install Dependencies

Execute este comando na raiz do seu projeto:
O adaptador, o SDK do Dodo Payments, o Better Auth e o Zod estão instalados.

Configuração

1

Configure Environment Variables

Adicione estas variáveis ao seu arquivo .env. Crie a chave de API em Developer → API Keys no dashboard. Você obterá o segredo do webhook ao adicionar o endpoint do webhook, conforme descrito em Webhooks nesta página. BETTER_AUTH_SECRET é uma string aleatória com pelo menos 32 caracteres.
Nunca envie chaves de API ou segredos ao controle de versão.
2

Set Up Server-Side Integration

Crie ou atualize src/lib/auth.ts:
O plugin adiciona um campo dodoCustomerId à tabela user do Better Auth, onde armazena o ID de cliente do Dodo Payments de cada usuário. Depois de adicionar o plugin, atualize o schema do banco de dados com a CLI do Better Auth.
Defina environment como live_mode para produção.
3

Set Up Client-Side Integration

Crie ou atualize src/lib/auth-client.ts:

Exemplos de uso

Use authClient.dodopayments.checkoutSession para novas integrações. O método legado checkout está obsoleto e é mantido apenas para compatibilidade com versões anteriores.

Criando uma sessão de checkout (recomendado)

Crie uma sessão de checkout a partir de um slug configurado ou de um carrinho de produtos e redirecione o cliente para a URL retornada:
checkoutSession preenche alguns campos para você:
  • Endereço de cobrança: não é necessário informá-lo antecipadamente, pois o checkout o coleta do cliente. Para preenchê-lo previamente, passe billing_address.
  • Cliente: para um usuário autenticado, o plugin usa o e-mail e o nome da sessão do Better Auth e ignora qualquer objeto customer que você passar. Sem um usuário autenticado, ele usa o objeto customer.
  • Outros campos: o argumento aceita os mesmos campos que o corpo da solicitação do endpoint Create Checkout Session, além de slug e referenceId.
Se o slug não estiver configurado ou se você não passar slug nem product_cart, a solicitação falhará com um erro 400.
A URL de retorno vem do successUrl configurado no plugin do servidor, resolvido em relação à URL do seu app. O plugin ignora qualquer return_url no payload do cliente.

Checkout legado (obsoleto)

O método authClient.dodopayments.checkout está obsoleto. Use checkoutSession em vez dele em novas implementações.
O método legado requer billing e customer e cria um link de pagamento por meio do fluxo de checkout dinâmico obsoleto. Os campos definidos em customer substituem o e-mail e o nome da sessão.

Acessando o Customer Portal

Os endpoints do portal exigem um usuário autenticado com um endereço de e-mail verificado. Se o usuário ainda não tiver um cliente no Dodo Payments, o plugin encontrará um pelo e-mail ou criará um. customer.portal() retorna a URL do portal:

Listando dados do cliente

Liste as assinaturas e os pagamentos do cliente autenticado. page começa em 1, e status filtra os resultados:

Rastreando o uso medido

Ative o plugin usage() no servidor para registrar eventos de uso para cobrança baseada em uso e permitir que os clientes consultem seu uso. Ambos os métodos exigem um usuário autenticado com um endereço de e-mail verificado.
  • authClient.dodopayments.usage.ingest registra um evento para o usuário autenticado.
  • authClient.dodopayments.usage.meters.list lista os eventos de uso do cliente autenticado. Ele aceita os parâmetros de consulta page_number, page_size, event_name, meter_id, start e end.
O Dodo Payments rejeita eventos com timestamps de mais de uma hora no passado ou de mais de cinco minutos no futuro.
Se você omitir meter_id, a lista incluirá todos os eventos de uso do cliente. Com meter_id, ela incluirá apenas os eventos que correspondem a esse medidor.

Webhooks

O plugin de webhooks verifica a assinatura de cada evento do Dodo Payments e chama seus handlers. O endpoint padrão é /api/auth/dodopayments/webhooks.
1

Generate and Set Webhook Secret

No dashboard, acesse Developer → Webhooks e adicione a URL do seu endpoint, por exemplo, https://<your-domain>/api/auth/dodopayments/webhooks. Copie o segredo de assinatura do endpoint para o seu arquivo .env:
2

Handle Webhook Events

Passe um handler para cada evento que deseja processar. onPayload é executado para todos os eventos:
Se a verificação da assinatura falhar ou um handler lançar um erro, o endpoint responderá com 400. Depois que seus handlers terminarem, ele retornará { received: true }.

Handlers de eventos de webhook compatíveis

Cada handler recebe o payload verificado para seu tipo de evento:

Referência de configuração

  • client (obrigatório): instância do cliente DodoPayments
  • createCustomerOnSignUp (opcional): cria um cliente do Dodo Payments quando um usuário se cadastra ou vincula um cliente existente com o mesmo e-mail. O plugin também atualiza o cliente quando os dados do usuário são alterados.
  • use (obrigatório): array de plugins a serem ativados (checkout, portal, usage, webhooks)
  • getCustomerParams (opcional): função que recebe o User do Better Auth e retorna campos adicionais para anexar ao cliente do Dodo Payments durante a criação e a atualização (por exemplo, metadata, phone_number). Ela pode ser assíncrona.
  • products: array de objetos { productId, slug } ou uma função assíncrona que retorna um deles
  • successUrl: URL para redirecionamento após um pagamento bem-sucedido
  • authenticatedUsersOnly: exige autenticação do usuário (padrão: false)

Solução de problemas e dicas

  • Chave de API inválida: verifique DODO_PAYMENTS_API_KEY em .env e confirme se o modo da chave corresponde a environment.
  • Incompatibilidade da assinatura do webhook: confirme se o segredo do webhook corresponde ao definido no dashboard do Dodo Payments.
  • Cliente não criado: confirme se createCustomerOnSignUp está definido como true.
  • Solicitações do portal ou de uso retornam 401: o endereço de e-mail do usuário não foi verificado.
  • Use variáveis de ambiente para todos os segredos e chaves.
  • Faça testes em test_mode antes de mudar para live_mode.
  • Registre eventos de webhook para depuração e auditoria.

Prompt para LLMs

Copie este prompt no seu assistente de programação com IA para que ele adicione o adaptador ao seu projeto. Para também fornecer ao seu agente a documentação e as skills do Dodo Payments, instale o Agent Plugin.
Última modificação em 26 de setembro de 2026