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.2
Set Up Server-Side Integration
Crie ou atualize O plugin adiciona um campo
src/lib/auth.ts: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.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
customerque você passar. Sem um usuário autenticado, ele usa o objetocustomer. - Outros campos: o argumento aceita os mesmos campos que o corpo da solicitação do endpoint Create Checkout Session, além de
slugereferenceId.
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 legado requerbilling 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 pluginusage() 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.ingestregistra um evento para o usuário autenticado.authClient.dodopayments.usage.meters.listlista os eventos de uso do cliente autenticado. Ele aceita os parâmetros de consultapage_number,page_size,event_name,meter_id,starteend.
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:{ 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
Plugin Options
Plugin Options
- 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
Userdo 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.
Checkout Plugin Options
Checkout Plugin Options
- 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
Common Issues
Common Issues
- Chave de API inválida: verifique
DODO_PAYMENTS_API_KEYem.enve confirme se o modo da chave corresponde aenvironment. - 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
createCustomerOnSignUpestá definido comotrue. - Solicitações do portal ou de uso retornam 401: o endereço de e-mail do usuário não foi verificado.
Best Practices
Best Practices
- Use variáveis de ambiente para todos os segredos e chaves.
- Faça testes em
test_modeantes de mudar paralive_mode. - Registre eventos de webhook para depuração e auditoria.