GitHub Repository
Boilerplate mínimo Go + Dodo Payments
Visão Geral
O boilerplate Go é um servidor Go minimalista que vende seus produtos do Dodo Payments a partir de uma página de preços. Ele cria sessões de checkout, verifica e processa webhooks e abre o Customer Portal. Clone-o como ponto de partida para seu próprio backend Go.O boilerplate requer Go 1.24.4 ou posterior, a versão definida em seu
go.mod. Ele usa um layout cmd, internal e templates, renderiza a página de preços com templates HTML do Go e chama a API do Dodo Payments por meio do SDK dodopayments-go.Recursos
- Configuração rápida: clone o repositório, adicione suas chaves de API a
.enve inicie o servidor commake run. - Integração de pagamentos: um fluxo de checkout que cria sessões de checkout com o SDK
dodopayments-go. - UI moderna: uma página de preços com tema escuro, criada com templates HTML do Go e Tailwind CSS.
- Processamento de webhooks: verifica a assinatura de cada webhook antes de processar o evento.
- Customer Portal: gerenciamento de assinaturas self-service por meio do Customer Portal.
- Boas práticas de Go: um layout de projeto organizado com
cmd,internaletemplates. - Checkout pré-preenchido: envia o nome e o email do cliente para o checkout, para que ele não precise digitá-los novamente.
Pré-requisitos
Antes de começar, você precisa de:- Go 1.24.4 ou posterior. Verifique sua versão com
go version. - Uma conta do Dodo Payments, para criar uma chave de API e uma chave de assinatura de webhook no dashboard.
- Pelo menos um produto, criado em Products no dashboard.
Início Rápido
1
Clone the Repository
2
Install Dependencies
make install executa go mod download e depois go mod tidy. Para baixar os módulos sem make, execute:3
Get API Credentials
Cadastre-se no Dodo Payments e copie as duas chaves do dashboard:
- Chave de API: Developer → API Keys
- Chave de webhook: Developer → Webhooks. Cada endpoint de webhook tem sua própria chave de assinatura. Para criar um endpoint que alcance seu servidor local, consulte Testando Webhooks Localmente.
4
Configure Environment Variables
Crie um arquivo Defina estes valores em O servidor lê estas variáveis na inicialização:
.env na raiz do projeto usando o template:.env:.env
O servidor é encerrado na inicialização se alguma das chaves obrigatórias estiver ausente.
.env.example define PORT e DODO_PAYMENTS_RETURN_URL como a porta 8080. Esta página usa a porta 8000, portanto defina ambas como 8000, conforme mostrado, ou substitua 8000 por 8080 nos comandos desta página.5
Add Your Products
Substitua o produto de exemplo em
internal/lib/products.go pelos seus produtos. Copie o ID de cada produto em Products no dashboard:Price define apenas o preço exibido pela página de preços, na menor unidade da moeda: 9999 é exibido como $99.99. O checkout cobra o preço do produto no Dodo Payments.6
Run the Development Server
make run compila o servidor em bin/server e o inicia. Para executar o servidor sem compilar um binário primeiro, execute:Você verá uma página de preços com tema escuro que lista seus produtos, pronta para compras.
Estrutura do projeto
O repositório tem este layout:Endpoints da API
O boilerplate inclui os seguintes endpoints pré-configurados:Personalização
Atualizar informações do produto
Editeinternal/lib/products.go para alterar:
- IDs dos produtos (em Products no dashboard do Dodo Payments)
- Nomes
- Preços exibidos na página de preços
- Recursos
- Descrições
/mo a cada preço e exibe Custom em vez de um preço quando Price é igual ou maior que 100000. Para alterar isso, edite templates/index.html.
Pré-preencher dados do cliente
Em.env, a função handleCheckout envia dados de cliente definidos no código para /api/checkout. Substitua-os pelos dados do usuário conectado:
handlePortal reutiliza esses dados do cliente e usa como alternativa o mesmo nome e email de exemplo. Em um app de produção, injete esses valores do seu sistema de autenticação em ambas as funções.
Eventos de webhook
internal/api/webhook.go verifica cada solicitação com client.Webhooks.Unwrap e a chave em DODO_PAYMENTS_WEBHOOK_KEY e depois encaminha o evento de acordo com seu type. Esses eventos têm um handler, e cada handler registra os dados do evento:
O handler também aceita
subscription.on_hold, subscription.failed, subscription.expired e subscription.plan_changed sem executar nenhuma ação e registra todos os outros tipos de evento como não processados. Ele responde com 200 a todos os eventos verificados. Para conhecer todos os tipos de evento, consulte o Guia de eventos de webhook.
Adicione sua lógica de negócio às funções do handler para:
- Atualizar permissões de usuários no banco de dados
- Enviar emails de confirmação
- Provisionar acesso a produtos digitais
- Acompanhar análises e métricas
Testando webhooks localmente
O Dodo Payments não consegue alcançarlocalhost. Para receber webhooks durante o desenvolvimento, exponha seu servidor local com um tunnel, como o ngrok:
/api/webhook:
DODO_PAYMENTS_WEBHOOK_KEY e reinicie o servidor.
Implantação
Compilar para produção
make build compila o servidor em bin/server:
make, execute:
Implantar na Vercel
[.env às configurações do projeto na Vercel, pois .env não está no repositório. Em seguida, defina o endpoint de webhook no dashboard como https://yourdomain.com/api/webhook.
Docker
Crie umDockerfile na raiz do projeto. O estágio de compilação deve usar Go 1.24.4 ou posterior para corresponder a go.mod:
templates/ para o mesmo diretório do binário, pois o servidor carrega os templates a partir do diretório de trabalho. Compile e execute a imagem:
PORT definido em .env, portanto mantenha PORT=8000 para corresponder ao mapeamento de portas.
Considerações para produção
Solução de problemas
Build errors or missing dependencies
Build errors or missing dependencies
Verifique se
go version informa Go 1.24.4 ou posterior e baixe os módulos novamente:Checkout session creation fails
Checkout session creation fails
Causas comuns:
- O ID do produto é inválido. Verifique se ele existe em Products no mesmo modo da sua chave de API.
- A chave de API ou
DODO_PAYMENTS_ENVIRONMENTem.envestá incorreta. Uma chave do modo de teste precisa detest_mode. - Para ver o erro exato, consulte os logs do servidor. O handler registra cada solicitação com falha antes de retornar
500.
Webhooks not receiving events
Webhooks not receiving events
Para testes locais, exponha seu servidor com o ngrok:Defina a URL do webhook no seu dashboard do Dodo Payments como a URL do ngrok. Em seguida, defina
DODO_PAYMENTS_WEBHOOK_KEY em .env como a chave de assinatura desse endpoint. Se o servidor registrar webhook verification failed, a chave não corresponde ao endpoint.Templates not loading
Templates not loading
O servidor carrega
templates/base.html e templates/index.html a partir do diretório de trabalho. Inicie o servidor na raiz do projeto ou altere os caminhos dos templates em cmd/server/main.go.Saiba mais
Go SDK
Documentação completa do SDK Go
Webhooks Documentation
Saiba mais sobre todos os eventos de webhook e as boas práticas
Checkout Sessions
Aprofunde-se na configuração de sessões de checkout
API Reference
Documentação completa da API do Dodo Payments
Suporte
Para obter ajuda com o boilerplate:- Faça perguntas na comunidade do Discord.
- Consulte o repositório no GitHub para ver problemas e atualizações.
- Entre em contato com a equipe de suporte.