Pagamentos & Checkout
ChatGPT / GPT-4o
Checkout de Assinatura Stripe com Webhook Idempotente
Assinaturas Stripe no Node.js/TypeScript com checkout sessions, portal e webhook idempotente.
0cópias
0joinhas
0favoritos
O prompt
Escreva o backend completo em Node.js (TypeScript) para gerenciar assinaturas recorrentes com a Stripe API.
Parâmetros:
- Nome do Plano: {{nome_plano}}
- Preço da Assinatura: {{moeda}} {{valor_mensal}}/mês
Requisitos Críticos:
1. Endpoint POST /api/checkout/session que cria uma Stripe Checkout Session para o plano {{nome_plano}} no valor de {{moeda}} {{valor_mensal}}/mês, com customer_email, metadata e modo 'subscription'.
2. Endpoint POST /api/customer-portal para redirecionar o assinante ao Customer Portal oficial da Stripe (gerenciar cartão e cancelamento).
3. Rota de webhook POST /api/webhooks/stripe com validação rigorosa da assinatura do header (stripe-signature) usando o secret da chave.
4. Tratamento idempotente dos eventos:
- customer.subscription.created
- invoice.payment_succeeded
- customer.subscription.deleted (rebaixando o plano no banco)
5. Proteção contra requisições duplicadas armazenando o event.id processado no banco de dados.
Como usar
- Substitua {{nome_plano}}, {{moeda}} e {{valor_mensal}}.
- Cole no ChatGPT/Cursor; crie antes o produto + preço no dashboard da Stripe e use os IDs reais no código.
- Defina STRIPE_SECRET_KEY e STRIPE_WEBHOOK_SECRET como variáveis de ambiente.
- Teste local: stripe listen --forward-to localhost:3000/api/webhooks/stripe para capturar eventos de teste.
Exemplo de saída
Backend (~200 linhas): POST /api/checkout/session criando Checkout Session de assinatura com metadata, POST /api/customer-portal redirecionando ao portal oficial da Stripe e rota de webhook validando stripe-signature e processando created/payment_succeeded/deleted de forma idempotente — event.id persistido contra duplicatas.