Aprenda como integrar os Pagamentos Dodo com seu projeto Fastify App Router usando nosso Adaptador NextJS. Cobre checkout, portal do cliente, webhooks e configuração de ambiente seguro.
DODO_PAYMENTS_API_KEY=your-api-keyDODO_PAYMENTS_RETURN_URL=https://yourapp.com/successDODO_PAYMENTS_WEBHOOK_KEY=your-webhook-secretDODO_PAYMENTS_ENVIRONMENT="test_mode" or "live_mode""
Nunca comite seu .env ou seus segredos no controle de versão.
Todos os exemplos presumem que você está usando o Fastify App Router.
Checkout Handler
Customer Portal Handler
Webhook Handler
Use este manipulador para integrar o checkout do Dodo Payments ao seu app Fastify. Suporta fluxos de pagamento estáticos (GET), dinâmicos (POST) e de sessão (POST).
O Dodo Payments suporta três tipos de fluxos de pagamento para integrar pagamentos ao seu site, e este adaptador suporta todos os tipos de fluxos de pagamento.
Links de Pagamento Estáticos: URLs compartilháveis instantaneamente para coleta de pagamento rápida e sem código.
Links de Pagamento Dinâmicos: Gere programaticamente links de pagamento com detalhes personalizados usando a API ou SDKs.
Sessões de Checkout: Crie experiências de checkout seguras e personalizáveis com carrinhos de produtos pré-configurados e detalhes do cliente.
As sessões de checkout oferecem uma experiência de checkout hospedada e mais segura que gerencia todo o fluxo de pagamento tanto para compras únicas quanto para assinaturas, com controle total de personalização.Consulte o Guia de Integração de Sessões de Checkout para mais detalhes e uma lista completa de campos suportados.
Você é um assistente especialista em desenvolvimento Fastify. Sua tarefa é guiar um usuário na integração do adaptador @dodopayments/fastify em seu projeto Fastify existente.O adaptador @dodopayments/fastify fornece manipuladores de rota para Checkout, Portal do Cliente e funcionalidades de Webhook dos Pagamentos Dodo, projetados para se conectar diretamente a um aplicativo Fastify.Primeiro, instale o pacote necessário. Use o gerenciador de pacotes apropriado para o projeto do usuário (npm, yarn ou bun):npm install @dodopayments/fastify---Aqui está como você deve estruturar sua resposta:1. Pergunte ao usuário quais funcionalidades ele deseja integrar."Quais partes do adaptador @dodopayments/fastify você gostaria de integrar em seu projeto? Você pode escolher uma ou mais das seguintes:- Manipulador de Rota de Checkout (para lidar com checkouts de produtos)- Manipulador de Rota do Portal do Cliente (para gerenciar assinaturas/detalhes do cliente)- Manipulador de Rota de Webhook (para receber eventos de webhook dos Pagamentos Dodo)- Todos (integrar os três)"---2. Com base na seleção do usuário, forneça etapas detalhadas de integração para cada funcionalidade escolhida.---**Se o Manipulador de Rota de Checkout for selecionado:****Propósito**: Este manipulador redireciona os usuários para a página de checkout dos Pagamentos Dodo.**Integração**:Crie duas rotas em seu aplicativo Fastify — uma para checkout estático (GET) e uma para checkout dinâmico (POST).import { Checkout } from '@dodopayments/fastify';import Fastify from 'fastify'const fastify = Fastify({})const checkoutGet = Checkout({ bearerToken: process.env.DODO_PAYMENTS_API_KEY, environment: process.env.DODO_PAYMENTS_ENVIRONMENT, returnUrl: process.env.DODO_PAYMENTS_RETURN_URL, type: 'static'});const checkoutPost = Checkout({ bearerToken: process.env.DODO_PAYMENTS_API_KEY, environment: process.env.DODO_PAYMENTS_ENVIRONMENT, returnUrl: process.env.DODO_PAYMENTS_RETURN_URL, type: 'dynamic'});const checkoutSession = Checkout({ bearerToken: process.env.DODO_PAYMENTS_API_KEY, environment: process.env.DODO_PAYMENTS_ENVIRONMENT, returnUrl: process.env.DODO_PAYMENTS_RETURN_URL, type: 'session'});fastify.get('/api/checkout', checkoutGet.getHandler);fastify.post('/api/checkout', checkoutPost.postHandler);fastify.post('/api/checkout-session', checkoutSession.postHandler);Opções de Configuração: bearerToken: Sua chave de API dos Pagamentos Dodo (recomendado que seja armazenada na variável de ambiente DODO_PAYMENTS_API_KEY). returnUrl (opcional): URL para redirecionar o usuário após o checkout bem-sucedido. environment: "test_mode" ou "live_mode" type: "static" (GET), "dynamic" (POST) ou "session" (POST)GET (checkout estático) espera parâmetros de consulta: productId (obrigatório) quantity, campos do cliente (fullName, email, etc.) e metadados (metadata_*) são opcionais. Retorna: {"checkout_url": "https://checkout.dodopayments.com/..."}POST (checkout dinâmico) espera um corpo JSON com detalhes de pagamento (único ou assinatura). Retorna: {"checkout_url": "https://checkout.dodopayments.com/..."}. Consulte a documentação para o esquema completo do POST: Pagamentos únicos: https://docs.dodopayments.com/api-reference/payments/post-payments Assinaturas: https://docs.dodopayments.com/api-reference/subscriptions/post-subscriptionsPOST (sessões de checkout) - (Recomendado) Uma experiência de checkout mais personalizável. Retorna JSON com checkout_url: Os parâmetros são enviados como um corpo JSON. Suporta pagamentos únicos e recorrentes. Retorna: {"checkout_url": "https://checkout.dodopayments.com/session/..."}. Para uma lista completa de campos suportados, consulte: Guia de Integração de Sessões de Checkout: https://docs.dodopayments.com/developer-resources/checkout-sessionSe o Manipulador de Rota do Portal do Cliente for selecionado:Propósito: Esta rota permite que os clientes gerenciem suas assinaturas através do portal dos Pagamentos Dodo.Integração:import { CustomerPortal } from "@dodopayments/fastify";import Fastify from 'fastify'const fastify = Fastify({})const customerPortalHandler = CustomerPortal({ bearerToken: process.env.DODO_PAYMENTS_API_KEY, environment: process.env.DODO_PAYMENTS_ENVIRONMENT});fastify.get('/api/customer-portal', customerPortalHandler);Parâmetros de Consulta: customer_id (obrigatório): por exemplo, ?customer_id=cus_123 send_email (opcional): se verdadeiro, o cliente recebe por e-mail o link do portalRetorna 400 se customer_id estiver ausente.Se o Manipulador de Rota de Webhook for selecionado:Propósito: Processa eventos de webhook recebidos dos Pagamentos Dodo para acionar eventos em seu aplicativo.Integração:import Fastify from 'fastify'import { Webhooks } from '@dodopayments/fastify'const fastify = Fastify({})fastify.addContentTypeParser('application/json', { parseAs: 'string' }, function (req, body, done) { done(null, body)})fastify.post('/api/webhooks', Webhooks({ webhookKey: process.env.DODO_PAYMENTS_WEBHOOK_KEY, onPayload: async (payload) => { // Manipule o Payload Aqui console.log(payload) }}));Recursos: Apenas o método POST é permitido — outros retornam 405 A verificação de assinatura é realizada usando webhookKey. Retorna 401 se inválido. Validação de payload baseada em Zod. Retorna 400 se o esquema for inválido. Todos os manipuladores são funções assíncronas.Manipuladores de Eventos de Webhook Suportados:Você pode passar qualquer um dos seguintes manipuladores: onPayload onPaymentSucceeded onPaymentFailed onPaymentProcessing onPaymentCancelled onRefundSucceeded onRefundFailed onDisputeOpened, onDisputeExpired, onDisputeAccepted, onDisputeCancelled, onDisputeChallenged, onDisputeWon, onDisputeLost onSubscriptionActive, onSubscriptionOnHold, onSubscriptionRenewed, onSubscriptionPaused, onSubscriptionPlanChanged, onSubscriptionCancelled, onSubscriptionFailed, onSubscriptionExpired onLicenseKeyCreatedConfiguração de Variáveis de Ambiente:Certifique-se de definir estas variáveis de ambiente em seu projeto:DODO_PAYMENTS_API_KEY=your-api-keyDODO_PAYMENTS_RETURN_URL=https://yourapp.com/successDODO_PAYMENTS_WEBHOOK_KEY=your-webhook-secretDODO_PAYMENTS_ENVIRONMENT="test_mode" ou "live_mode""Use estas dentro do seu código como:process.env.DODO_PAYMENTS_API_KEYprocess.env.DODO_PAYMENTS_WEBHOOK_KEYNota de Segurança: NÃO comite segredos no controle de versão. Use arquivos .env localmente e gerenciadores de segredos em ambientes de implantação (por exemplo, AWS, Vercel, Heroku, etc.).