Skip to main content
O módulo @dodopayments/nuxt fornece ao seu app Nuxt três handlers de rota do servidor. checkoutHandler retorna URLs de checkout, customerPortalHandler envia um cliente ao Customer Portal e Webhooks verifica eventos de webhook e os encaminha para o seu código.

Checkout API Route

Crie URLs de checkout a partir de uma rota de servidor do Nuxt.

Customer Portal API Route

Permita que os clientes gerenciem suas assinaturas e seus dados a partir de uma rota de servidor do Nuxt.

Webhooks API Route

Receba e verifique eventos de webhook do Dodo Payments no Nuxt.

Visão geral

O módulo registra seus handlers como auto-imports do servidor do Nuxt, portanto suas rotas de servidor chamam checkoutHandler, customerPortalHandler e Webhooks sem instruções de import. Cada rota lê suas credenciais de runtimeConfig. O Nuxt expõe apenas runtimeConfig.public ao navegador, portanto a chave da API e o segredo do webhook permanecem no servidor.

Instalação

1

Install the Nuxt Module

Execute este comando na raiz do seu projeto:
O módulo lista Nuxt 3 (3.13.1 ou posterior) e zod 3.25 ou posterior como dependências peer.
2

Register the Module in nuxt.config.ts

Adicione @dodopayments/nuxt ao seu array modules e mapeie suas credenciais em runtimeConfig:
nuxt.config.ts
Defina estas variáveis de ambiente, por exemplo em um arquivo .env na raiz do seu projeto:Um servidor Nuxt compilado não lê seu arquivo .env. Em runtime, o Nuxt substitui um valor de runtimeConfig apenas pela variável que corresponde ao seu caminho, como NUXT_PRIVATE_RETURN_URL para private.returnUrl; portanto, defina essas variáveis também no ambiente de hospedagem.
Nunca faça commit do arquivo .env nem de segredos no controle de versão.

Exemplos de handlers de rotas da API

Os exemplos criam rotas de servidor no diretório server/routes/api/. O Nuxt define as rotas de cada arquivo pelo nome e pelo sufixo do método, portanto checkout.get.ts processa GET /api/checkout.
Use este handler para adicionar o checkout do Dodo Payments ao seu app Nuxt. Uma rota GET fornece o checkout estático. Uma rota POST fornece sessões de checkout ou checkout dinâmico quando você define type: "dynamic".
Crie uma rota GET para o checkout estático:
checkout.post.ts fornece um fluxo POST. Use o exemplo de checkout dinâmico ou o exemplo de sessão de checkout:
Se productId estiver ausente ou for inválido, o handler retorna uma resposta 400.
Para testar as rotas, envie estas solicitações:

Handler de rota de checkout

O handler de checkout é compatível com as três formas de receber pagamentos com o Dodo Payments:
  • Links de pagamento estáticos: URLs compartilháveis que coletam pagamentos sem código.
  • Links de pagamento dinâmicos: links de pagamento que você gera com detalhes personalizados. Eles usam endpoints deprecated.
  • Sessões de checkout: checkout hospedado com um carrinho de produtos, dados do cliente e opções de personalização. Esse é o fluxo recomendado.
checkoutHandler aceita estas opções:

Parâmetros de query compatíveis

string
obrigatório
Identificador do produto, por exemplo ?productId=pdt_nZuwz45WAs64n3l07zpQR.
integer
padrão:"1"
Quantidade do produto.
string
Nome completo do cliente. Ignorado se firstName ou lastName for fornecido.
string
Primeiro nome do cliente.
string
Sobrenome do cliente.
string
Endereço de e-mail do cliente.
string
País do cliente, como um código ISO 3166-1 alpha-2.
string
Linha de endereço do cliente.
string
Cidade do cliente.
string
Estado ou província do cliente.
string
CEP ou código postal do cliente.
boolean
Defina como true para desabilitar o campo de nome completo.
boolean
Defina como true para desabilitar o campo de primeiro nome.
boolean
Defina como true para desabilitar o campo de sobrenome.
boolean
Defina como true para desabilitar o campo de e-mail.
boolean
Defina como true para desabilitar o campo de país.
boolean
Defina como true para desabilitar o campo de linha de endereço.
boolean
Defina como true para desabilitar o campo de cidade.
boolean
Defina como true para desabilitar o campo de estado.
boolean
Defina como true para desabilitar o campo de CEP.
string
Moeda do pagamento, por exemplo USD.
boolean
padrão:"true"
Mostra ou oculta o seletor de moeda.
number
Fixa o valor cobrado, em unidades principais da moeda, por exemplo 12.5 para $12.50. Funciona apenas com produtos Pay What You Want e é ignorado se estiver abaixo do preço mínimo do produto.
boolean
padrão:"true"
Mostra ou oculta a seção de descontos.
string
Qualquer parâmetro de query que comece com metadata_ é passado como metadata.
O handler adiciona returnUrl da configuração ao link como redirect_url.
Se productId estiver ausente, o handler retorna uma resposta 400. Parâmetros de query inválidos e IDs de produtos que não existem também retornam 400.

Formato da resposta

O checkout estático retorna uma resposta JSON com a URL de checkout. No modo de teste, a URL usa test.checkout.dodopayments.com.
O checkout dinâmico funciona como um proxy para os endpoints deprecated POST /payments e POST /subscriptions. Ele continua funcionando para integrações existentes, mas novas integrações devem usar sessões de checkout.

Formato da resposta

O checkout dinâmico retorna uma resposta JSON com a URL de checkout:
As sessões de checkout criam um checkout hospedado para compras únicas e assinaturas, com controle total sobre a personalização. product_cart é o único campo obrigatório. Se o corpo não tiver return_url, o handler usa returnUrl da configuração.Para obter mais detalhes e ver todos os campos compatíveis, consulte o Guia de integração de sessões de checkout.Uma sessão criada com payment_method_id não retorna uma URL de checkout, portanto o handler responde com 400. Para cobrar um método de pagamento salvo, crie a sessão usando o SDK.

Formato da resposta

As sessões de checkout retornam uma resposta JSON com a URL de checkout:

Handler de rota do Customer Portal

O handler de rota do Customer Portal cria uma sessão do Customer Portal para o cliente informado e redireciona o navegador para ela.
O handler não verifica quem está fazendo a chamada. Qualquer pessoa que o solicite com um ID de cliente terá acesso ao portal desse cliente. Proteja a rota com sua própria autenticação e passe apenas o ID de cliente do usuário conectado.

Parâmetros de query

string
obrigatório
O ID do cliente para a sessão do portal, por exemplo ?customer_id=cus_123.
boolean
Se definido como true, o Dodo Payments também envia o link do portal por e-mail ao cliente.
A partir de @dodopayments/nuxt 0.2.11, o handler retorna HTTP 400 se customer_id estiver ausente e HTTP 500 se a sessão do portal não puder ser criada. As versões anteriores retornam HTTP 200 com o corpo JSON { "status": 400, "body": "Missing customer_id in query parameters" }. Para depender do status HTTP, atualize para a versão 0.2.11 ou posterior.

Handler de rota de webhook

O handler de rota de webhook verifica cada solicitação antes de executar seu código:
  • Método: apenas solicitações POST são compatíveis. Outros métodos retornam 405.
  • Verificação da assinatura: verifica o corpo bruto da solicitação e os cabeçalhos webhook-id, webhook-timestamp e webhook-signature com webhookKey, seguindo a especificação Standard Webhooks. Retorna 401 se a verificação falhar.
  • Validação do payload: valida o payload com Zod. Retorna 400 para um payload inválido.
  • Tratamento de erros:
    • 401: assinatura inválida
    • 400: payload inválido
    • 500: erro interno durante a verificação
  • Roteamento de eventos: chama onPayload para cada evento, depois o handler correspondente ao tipo do evento, e retorna 200.
O adaptador não captura erros lançados nos seus handlers. Eles são propagados para o Nuxt, e a solicitação falha.

Handlers de eventos de webhook compatíveis

Cada handler recebe o payload verificado correspondente ao seu tipo de evento:
Para saber o que cada evento significa, consulte o Guia de eventos de webhook.

Prompt para LLM

Copie este prompt no seu assistente de programação com IA para que ele adicione o módulo 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