GitHub Repository
Código-fonte do boilerplate do FastAPI e do Dodo Payments.
Visão Geral
O boilerplate do FastAPI é um backend Python com o Dodo Payments já conectado. Ele tem endpoints que criam sessões de checkout e sessões do Customer Portal, um endpoint de webhook que verifica assinaturas e uma página de preços renderizada a partir de templates Jinja2.Este boilerplate usa FastAPI com os handlers de rota
async, Pydantic para validação e configurações e o SDK Python dodopayments. Os handlers chamam o cliente síncrono DodoPayments. Para evitar o bloqueio do event loop, altere para AsyncDodoPayments e await suas chamadas.Recursos
O boilerplate inclui:- Configuração rápida: passe do clone a um servidor em execução em cerca de cinco minutos.
- Handlers assíncronos: os handlers de rota são funções
async defdo FastAPI. - Sessões de checkout: um endpoint de checkout pré-configurado que usa o SDK Python.
- Processamento de webhooks: um endpoint de webhook que verifica cada assinatura com o método
unwrapdo SDK. - Customer Portal: um endpoint que cria sessões do Customer Portal.
- Segurança de tipos: os modelos Pydantic validam os corpos das solicitações, e o código usa type hints.
- Configuração do ambiente:
pydantic-settingscarrega e valida a configuração de.env.
Pré-requisitos
Antes de começar, você precisa de:- Python 3.9 ou posterior, exigido pelo SDK
dodopayments. Recomenda-se Python 3.11 ou posterior. - pip ou uv para gerenciamento de pacotes.
- Uma conta do Dodo Payments, para criar uma chave de API e um segredo de assinatura de webhook no dashboard.
Início rápido
1
Clone the Repository
2
Create Virtual Environment
Configure um ambiente Python isolado:Ou use uv para um gerenciamento mais rápido de dependências:
3
Install Dependencies
4
Get API Credentials
Cadastre-se no Dodo Payments e obtenha suas credenciais no dashboard:
- Chave de API: crie uma chave em Dashboard → Developer → API Keys.
- Chave de webhook: adicione um endpoint em Dashboard → Developer → Webhooks e copie o segredo de assinatura. A URL do endpoint deve ser pública e usar HTTPS. Para receber eventos na sua máquina, consulte Testando Webhooks localmente.
5
Configure Environment Variables
Copie o arquivo de exemplo para criar um arquivo Defina os valores com suas credenciais do Dodo Payments:As quatro variáveis são obrigatórias.
.env no diretório raiz:.env
app/core/config.py as carrega com pydantic-settings, e o app não inicia se alguma estiver ausente ou vazia. DODO_PAYMENTS_RETURN_URL é o local para onde o checkout envia o cliente após o pagamento.6
Add Your Products
Substitua os produtos de exemplo em
app/lib/products.py pelos seus próprios produtos. Defina cada product_id como o ID de um produto em Products no seu dashboard. A página de preços exibe esses produtos.7
Run the Development Server
O Swagger UI lista os endpoints
/api/checkout/, /api/webhook/ e /api/customer-portal/, prontos para teste.http://localhost:8000, exibe a página de preços.Estrutura do projeto
Endpoints da API
app/main.py monta cada router sob um prefixo /api:
Cada caminho termina com uma barra. O FastAPI responde a uma solicitação para o caminho sem a barra com um redirecionamento
307; portanto, use o caminho exato, especialmente na sua URL de webhook.
Exemplos de código
Estes exemplos foram condensados a partir dos arquivos emapp/api/.
Criando uma sessão de checkout
app/api/checkout.py cria uma sessão de checkout e retorna seu checkout_url. O corpo da solicitação recebe um product_id, um quantity opcional e um objeto customer opcional com name e email:
Processando webhooks
app/api/webhook.py verifica a assinatura com o método unwrap do SDK e, em seguida, toma uma decisão com base no tipo de evento:
Integração com o Customer Portal
app/api/portal.py cria uma sessão do Customer Portal para um ID de cliente e retorna o link do portal como url:
app/templates/index.html envia um ID de cliente definido diretamente no código (cus_001) para este endpoint, e um nome e e-mail definidos diretamente no código para o endpoint de checkout. Substitua-os pelos valores do usuário conectado.
Eventos de webhook
O handler emapp/api/webhook.py toma uma decisão com base nestes eventos:
Para processar outro evento, adicione uma ramificação para o tipo correspondente, como
refund.succeeded para um reembolso processado com sucesso. Para ver todos os tipos de evento, consulte o Guia de eventos de webhook.
Adicione sua lógica de negócio dentro do handler de webhook para:
- Atualizar as permissões dos usuários no seu banco de dados
- Enviar e-mails de confirmação
- Provisionar acesso a produtos digitais
- Rastrear análises e métricas
Testando webhooks localmente
O Dodo Payments não consegue acessarlocalhost. Para desenvolvimento local, use uma ferramenta como o ngrok para expor seu servidor local:
/api/webhook/, como um endpoint no seu Dashboard do Dodo Payments:
DODO_PAYMENTS_WEBHOOK_KEY em .env e reinicie o servidor. O aplicativo lê .env somente na inicialização.
Implantação
Docker
O repositório não inclui umDockerfile. Para executar o aplicativo em um container, adicione este Dockerfile à raiz do repositório:
COPY . . copia todos os arquivos no contexto de build, incluindo .env. Para manter suas chaves fora da imagem, adicione um arquivo .dockerignore que liste .env. Em seguida, crie a imagem e execute-a com seu arquivo de ambiente:
Considerações para produção
Solução de problemas
Import errors or missing modules
Import errors or missing modules
Certifique-se de que seu ambiente virtual esteja ativado e que as dependências estejam instaladas:
Server fails to start with Directory 'app/static' does not exist
Server fails to start with Directory 'app/static' does not exist
app/main.py fornece arquivos estáticos de app/static, mas o repositório não inclui esse diretório. Crie-o com mkdir app/static e inicie o servidor novamente.Checkout session creation fails
Checkout session creation fails
Verifique estas causas comuns:
- O ID do produto não existe no seu dashboard do Dodo Payments.
- A chave de API ou
DODO_PAYMENTS_ENVIRONMENTem.envestá incorreta. Uma chave do modo de teste funciona somente comtest_mode.
400. Verifique os logs do FastAPI para obter mensagens de erro detalhadas.Webhooks not receiving events
Webhooks not receiving events
Para testes locais, use o ngrok para expor seu servidor:No seu dashboard do Dodo, adicione um endpoint com a URL do ngrok seguida de
/api/webhook/, incluindo a barra final. Copie o segredo de assinatura desse endpoint para DODO_PAYMENTS_WEBHOOK_KEY no arquivo .env.Webhook signature verification fails
Webhook signature verification fails
- Certifique-se de que
DODO_PAYMENTS_WEBHOOK_KEYem.envcorresponda ao segredo de assinatura do endpoint. - Verifique a assinatura em relação ao corpo bruto da solicitação antes de analisá-lo como JSON.
- Passe os três headers
webhook-id,webhook-timestampewebhook-signatureparaclient.webhooks.unwrap(). A assinatura do Standard Webhooks abrangeid.timestamp.body, não apenas o corpo.
Saiba mais
Python SDK
Documentação completa do Python SDK com suporte assíncrono
Webhooks Documentation
Saiba mais sobre todos os eventos de webhook e as práticas recomendadas
Checkout Sessions
Aprofunde-se na configuração da sessão 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.
- Relate problemas e acompanhe as atualizações no repositório do GitHub.
- Envie um e-mail para a equipe de suporte.