@dodopayments/nextjs fornece três handlers de rotas ao seu projeto Next.js App Router. Checkout retorna URLs de checkout, CustomerPortal envia o cliente ao Customer Portal e Webhooks verifica eventos de webhook e os encaminha ao seu código. O pacote é compatível com Next.js 14, 15 e 16.
Checkout Handler
Crie URLs de checkout com fluxos de checkout estático, dinâmico e de sessão de checkout.
Customer Portal
Permita que os clientes gerenciem suas assinaturas e dados.
Webhooks
Receba e processe eventos de webhook do Dodo Payments.
Instalação
1
Install the Package
Execute este comando na raiz do seu projeto:O pacote também exige Zod 3.25 ou Zod 4 como peer dependency.
2
Set Up Environment Variables
Crie um arquivo
.env na raiz do seu projeto. Crie a API key em Developer → API Keys e o segredo do webhook em Developer → Webhooks no dashboard:DODO_PAYMENTS_RETURN_URL é o destino dos clientes após o checkout. Se você não passar um ambiente, os handlers usarão live_mode.Exemplos de Handlers de Rotas
Todos os exemplos pressupõem que você usa o Next.js App Router.
- Checkout Handler
- Customer Portal Handler
- Webhook Handler
Use este handler para adicionar o checkout do Dodo Payments ao seu app. Um handler
GET disponibiliza o checkout estático. Um handler POST disponibiliza sessões de checkout ou o checkout dinâmico quando você define type: "dynamic".Handler de Rota de Checkout
O handler de checkout é compatível com as três formas de aceitar 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 gerados por você com dados personalizados. Eles usam endpoints obsoletos.
- Sessões de Checkout: checkout hospedado com carrinho de produtos, dados do cliente e opções de personalização. Este é o fluxo recomendado.
Static Checkout (GET)
Static Checkout (GET)
Query Parameters compatíveis
string
obrigatório
Identificador do produto, por exemplo
?productId=pdt_123.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 desativar o campo de nome completo.boolean
Defina como
true para desativar o campo de primeiro nome.boolean
Defina como
true para desativar o campo de sobrenome.boolean
Defina como
true para desativar o campo de e-mail.boolean
Defina como
true para desativar o campo de país.boolean
Defina como
true para desativar o campo de linha de endereço.boolean
Defina como
true para desativar o campo de cidade.boolean
Defina como
true para desativar o campo de estado.boolean
Defina como
true para desativar 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 somente 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 query parameter que comece com
metadata_ é passado como metadata.returnUrl da configuração ao link como redirect_url.Formato da Resposta
O checkout estático retorna uma resposta JSON com a URL de checkout. No modo de teste, a URL usatest.checkout.dodopayments.com.Dynamic Checkout (POST)
Dynamic Checkout (POST)
- Envie os parâmetros como um corpo JSON em uma solicitação POST.
- Compatível com pagamentos únicos e recorrentes.
billingecustomersão obrigatórios.- Para ver todos os campos de corpo compatíveis, consulte:
Formato da Resposta
O checkout dinâmico retorna uma resposta JSON com a URL de checkout:Checkout Sessions (POST)
Checkout Sessions (POST)
As sessões de checkout criam um checkout hospedado para compras únicas e assinaturas, com controle total da personalização.
product_cart é o único campo obrigatório. Se o corpo não tiver return_url, o handler usará 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 com 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.Query Parameters
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 ao cliente por e-mail.customer_id estiver ausente e 500 se a sessão do portal não puder ser criada.
Handler de Rota de Webhook
O handler de rota de webhook verifica cada solicitação antes de executar seu código:- Método: Somente solicitações POST são compatíveis. Outros métodos retornam 405.
- Verificação da Assinatura: Verifica o corpo bruto da solicitação em relação aos headers
webhook-id,webhook-timestampewebhook-signaturecomwebhookKey. Retorna 401 se a verificação falhar. - Validação do Payload: Analisa o corpo verificado como JSON e o valida com Zod. Retorna 400 quando um payload analisado não corresponde ao schema do webhook.
- Tratamento de Erros:
- 401: Assinatura inválida
- 400: Payload inválido
- 500: Erros inesperados de verificação, JSON malformado ou erros lançados pelos seus callbacks
- Roteamento de Eventos: Chama
onPayloadpara cada evento, depois o handler correspondente ao tipo do evento, e retorna 200.