@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 Crie a API key em Developer → API Keys. Adicione seu endpoint de webhook em Developer → Webhooks e copie o segredo de assinatura para
.env na raiz do seu projeto: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.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.- Checkout Handler
- Customer Portal Handler
- Webhook Handler
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.
Static Checkout (GET)
Static Checkout (GET)
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.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.Formato da resposta
O checkout estático retorna uma resposta JSON com a URL de checkout: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. 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(comstreet,city,state,countryezipcode) ecustomer, além deproduct_id(com umquantityopcional) ouproduct_cart. As assinaturas precisam deproduct_id. - O manipulador também encaminha
metadata,allowed_payment_method_types,billing_currency,discount_codes(ou odiscount_codeobsoleto),return_url,show_saved_payment_methodsetax_id. Para assinaturas, também encaminhaaddons,on_demandetrial_period_days. Os outros campos são ignorados. - Para obter detalhes dos campos, consulte:
Formato da resposta
O checkout dinâmico retorna uma resposta JSON com o link de pagamento como URL de checkout:Checkout Sessions (POST)
Checkout Sessions (POST)
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 emcustomer_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.Manipulador de rota de webhook
O manipulador de webhook verifica cada solicitação com seu segredo de webhook, passado comowebhookKey, e então chama seus manipuladores de eventos.
- 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-timestampewebhook-signaturecomwebhookKey, 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
onPayloadpara 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.