Skip to main content
O adaptador @dodopayments/express fornece ao seu app Express três manipuladores de rota: checkoutHandler retorna URLs de checkout, CustomerPortal envia um cliente ao Customer Portal, e Webhooks verifica solicitações de webhook e chama seus manipuladores de eventos.

Checkout Handler

Crie links de pagamento e sessões de checkout no seu app Express.

Customer Portal

Permita que os clientes gerenciem suas assinaturas e dados.

Webhooks

Verifique e processe eventos de webhook do Dodo Payments.

Instalação

1

Install the Package

Execute o comando a seguir na raiz do seu projeto:
2

Set Up Environment Variables

Crie um arquivo .env na raiz do seu projeto:
Crie a API key em Developer → API Keys. Adicione seu endpoint de webhook em Developer → Webhooks e copie o segredo de assinatura para DODO_PAYMENTS_WEBHOOK_KEY. Durante o desenvolvimento, use uma API key de test mode com DODO_PAYMENTS_ENVIRONMENT=test_mode, pois uma chave de test mode funciona somente com test mode. DODO_PAYMENTS_RETURN_URL é opcional.
Nunca faça commit do seu arquivo .env ou de secrets no controle de versão.

Exemplos de manipuladores de rota

Os exemplos registram rotas em um app Express criado com express(). Os manipuladores de checkout POST e o manipulador de webhook leem req.body; portanto, cada exemplo registra express.json() antes de suas rotas.
Use este manipulador para integrar o checkout do Dodo Payments ao seu app Express. Ele é compatível com fluxos de pagamento estático (GET), dinâmico (POST) e de sessão (POST). Registre cada fluxo POST em seu próprio caminho, pois o primeiro manipulador registrado para um caminho responde a todas as solicitações recebidas nele.

Manipulador de rota de checkout

O adaptador é compatível com os três fluxos de checkout do Dodo Payments. Defina type na configuração do manipulador para escolher o fluxo que uma rota atende. Cada fluxo responde com JSON contendo um checkout_url para o cliente abrir.
  • Links de pagamento estáticos: type: "static", GET. Cria um link de pagamento para um produto a partir de parâmetros de consulta, depois de verificar se o produto existe.
  • Links de pagamento dinâmicos: type: "dynamic", POST. Cria um pagamento único ou uma assinatura com um link de pagamento, dependendo de o produto ser recorrente.
  • Sessões de checkout: type: "session", POST. Cria uma sessão de checkout a partir de um carrinho de produtos e dos dados do cliente. Use este fluxo para novas integrações.
checkoutHandler aceita estas opções: Registre o manipulador para GET quando type for static, e para POST quando type for dynamic ou session. O manipulador retorna 405 para outros métodos.

Parâmetros de consulta 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
Endereço residencial do cliente.
string
Cidade do cliente.
string
Estado ou província do cliente.
string
Código postal ou ZIP 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 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 ZIP.
string
A moeda de pagamento, por exemplo USD.
boolean
padrão:"true"
Mostra ou oculta o seletor de moeda.
number
Define o valor cobrado, em unidades maiores 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 parâmetro de consulta que comece com metadata_ é enviado ao checkout como metadata, por exemplo metadata_orderId=123.
Um sinalizador de desativação só tem efeito quando é true e o campo correspondente tem um valor, por exemplo, email com disableEmail. O manipulador passa esses parâmetros para um link de pagamento estático.
Se productId estiver ausente, o manipulador retorna uma resposta 400. Parâmetros de consulta inválidos ou um produto que não existe na sua conta também resultam em uma resposta 400.

Formato da resposta

O checkout estático retorna uma resposta JSON com a URL de checkout:
  • Envie os parâmetros como um corpo JSON em uma solicitação POST.
  • É compatível com pagamentos únicos e recorrentes. O manipulador recupera o produto e cria uma assinatura se o produto for recorrente; caso contrário, cria um pagamento único.
  • O corpo precisa de billing (com street, city, state, country e zipcode) e customer, além de product_id (com um quantity opcional) ou product_cart. As assinaturas precisam de product_id.
  • O manipulador também encaminha metadata, allowed_payment_method_types, billing_currency, discount_codes (ou o discount_code obsoleto), return_url, show_saved_payment_methods e tax_id. Para assinaturas, também encaminha addons, on_demand e trial_period_days. Os outros campos são ignorados.
  • Para obter detalhes dos campos, consulte:
O checkout dinâmico chama os endpoints obsoletos POST /payments e POST /subscriptions. Use Checkout Sessions para novas integrações.

Formato da resposta

O checkout dinâmico retorna uma resposta JSON com o link de pagamento como URL de checkout:
Envie o payload da sessão de checkout como corpo JSON. O manipulador cria uma sessão de checkout, que gerencia o fluxo completo de pagamento para compras únicas e assinaturas, e retorna seu checkout_url. product_cart é obrigatório e deve conter pelo menos um produto.Cada checkout_url funciona uma vez e expira após 24 horas, ou após 15 minutos quando você passa confirm: true. Uma sessão criada com payment_method_id não retorna checkout_url; portanto, o manipulador responde com 400.Consulte o Guia de integração do Checkout Sessions para obter mais detalhes e a lista completa de campos compatíveis.

Formato da resposta

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

Manipulador de rota do Customer Portal

O manipulador de rota do Customer Portal cria uma sessão do Customer Portal para o cliente em customer_id e redireciona a solicitação para o link do portal. CustomerPortal aceita as opções bearerToken e environment, iguais às de checkoutHandler. Se o Dodo Payments não conseguir criar a sessão, o manipulador retorna 500.

Parâmetros de consulta

string
obrigatório
O ID do cliente para a sessão do portal, por exemplo ?customer_id=cus_123.
boolean
Se definido como true, envia um e-mail ao cliente com o link do portal.
Retorna 400 se customer_id estiver ausente. O manipulador não autentica a solicitação e abre o portal para qualquer customer_id recebido; portanto, coloque a rota atrás da sua própria autenticação e passe somente o ID do cliente que estiver conectado.

Manipulador de rota de webhook

O manipulador de webhook verifica cada solicitação com seu segredo de webhook, passado como webhookKey, e então chama seus manipuladores de eventos.
Registre express.json() antes da rota de webhook. O manipulador verifica a assinatura em relação a req.body; portanto, rejeita todas as solicitações, a menos que o corpo seja um JSON analisado. Não use express.raw() para essa rota.
  • Método: somente solicitações POST são compatíveis. Outros métodos retornam 405.
  • Verificação de assinatura: verifica 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: validado com Zod. Retorna 400 para payloads inválidos.
  • 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 manipulador correspondente ao tipo do evento, e retorna 200 quando eles terminam. O manipulador não captura erros lançados pelos seus manipuladores de eventos.

Manipuladores de eventos de webhook compatíveis

Todos os manipuladores são opcionais e assíncronos. Para consultar o payload de cada evento, veja o Guia de eventos de webhook.

Prompt para LLM

Última modificação em 26 de setembro de 2026