Stripe no WhatsApp sem VPS: Como Conectamos Alertas de Vendas em Tempo Real a R$ 0/mês
Para quem vende produtos digitais de ticket acessível (como o nosso pacote de R$ 27,00), pagar R$ 97/mês em plataformas de automação no-code ou manter uma VPS ligada 24/7 destrói a margem de lucro. Desenvolvemos uma arquitetura serverless pura, com múltiplos adaptadores e código aberto no GitHub.
O Dilema da Automação de Vendas para Tickets Baixos
Todo vendedor quer a mesma coisa: ouvir o celular tocar no WhatsApp assim que uma venda cai no Stripe. No entanto, o ecossistema tradicional empurra soluções desproporcionais:
- Plataformas No-Code (Make / Zapier): Cobram planos caros em dólar e limitam o número de operações mensais.
- Instâncias n8n em VPS: Exigem um servidor Linux mantido 24 horas por dia (R$ 35 a R$ 60/mês). Se o servidor reiniciar de madrugada, as notificações de compras daquele período morrem.
- APIs não-oficiais travadas: Soluções amarradas a um único bot que, se desconectar, paralisa toda a comunicação.
Nossa resposta foi construir um endpoint serverless na borda da Cloudflare Pages Functions. Custo de servidor: R$ 0,00. Latência de resposta: menos de 150ms.
📦 Repositório Aberto: stripe-whatsapp-cloudflare-serverless
Liberamos a arquitetura completa sob licença MIT para a comunidade de criadores e desenvolvedores. Clone, configure suas variáveis e faça o deploy em 2 minutos.
git clone https://github.com/helpsecs-cmd/stripe-whatsapp-cloudflare-serverless.git
A "Armadilha do Pix" no Stripe (O que quase ninguém conta)
Quando um comprador clica no Stripe Checkout e seleciona a opção Pix, o Stripe emite o evento checkout.session.completed assim que a tela com o QR Code é exibida. Porém, o status vem como payment_status: "unpaid"!
Bots e tutoriais genéricos disparam o alerta imediatamente, fazendo o vendedor comemorar uma venda que o cliente muitas vezes desistiu e fechou a aba.
Nossa implementação implementa a Doutrina do Pix:
- Filtra estritamente se
payment_status === "paid". Se não estiver pago, descarta o alerta falso. - Escuta também o evento assíncrono
checkout.session.async_payment_succeeded— quando o cliente finalmente paga o Pix minutos depois no banco, o webhook recebe o aviso e o WhatsApp apita com dinheiro real confirmado.
O Padrão Multi-Adaptador: Flexibilidade Absoluta
Em vez de amarrar a função a uma única ferramenta, criamos um motor agnóstico que despacha para até 4 provedores conforme as variáveis configuradas:
CallMeBot API (R$ 0 / Zero Servidor)
Ideal para criadores individuais. Você ativa uma chave gratuita no WhatsApp em 30 segundos e a Cloudflare Pages faz um disparo direto para o seu número, sem precisar de nenhum servidor ligado.
Evolution API (Self-Hosted / Docker)
Para quem já opera uma instância própria da Evolution API em VPS. A função faz o POST direto na rota /message/sendText com header autenticado.
Z-API & Webhook Genérico (n8n / Make)
Se você já tem esteiras estruturadas no n8n ou prefere a Z-API, basta preencher a URL do seu webhook e o payload estruturado é entregue em milissegundos.
A Falha Oculta dos Tutoriais: Validação Criptográfica HMAC-SHA256 Anti-Spoofing
Mais de 90% dos tutoriais que você encontra na internet cometem um erro gravíssimo de arquitetura: eles criam a rota do webhook e processam qualquer JSON recebido às cegas. O resultado? Qualquer pessoa na internet pode abrir o Postman ou um terminal curl e enviar um POST forjado com {"type": "checkout.session.completed", "data": {"object": {"payment_status": "paid"}}} e fazer o seu WhatsApp apitar com vendas falsas!
Para selar essa brecha, implementamos a tríplice barreira criptográfica do Stripe usando a Web Crypto API nativa do Cloudflare Edge (sem bibliotecas pesadas de terceiros):
1. Assinatura Digital HMAC-SHA256
Cada evento enviado pelo Stripe inclui o cabeçalho Stripe-Signature. Nossa função calcula o HMAC do corpo bruto utilizando o seu STRIPE_WEBHOOK_SECRET (whsec_...) e compara em tempo constante (evitando timing attacks). Se a assinatura não bater, o invasor é barrado imediatamente com HTTP 400 Bad Request.
2. Proteção Anti-Replay (Janela de 300 Segundos)
Mesmo que um invasor capture um pacote genuíno, a função extrai o timestamp t do cabeçalho e verifica se ele foi emitido há menos de 5 minutos (300s). Tentativas de reenviar eventos antigos são sumariamente descartadas.
3. Idempotência e Trava de Duplicidade
Redes instáveis fazem o Stripe reenviar eventos legítimos. Nosso motor mantém um registro dos IDs processados (event.id). Se o mesmo evento bater duas vezes no intervalo, o servidor confirma com HTTP 200 sem disparar mensagens duplicadas no seu WhatsApp.
O Código da Cloudflare Pages Function (v3.0.0 Selada)
Abaixo está o trecho da função com a validação criptográfica HMAC que roda em functions/api/stripe-webhook.js:
// functions/api/stripe-webhook.js — Validação Criptográfica Pura
export async function onRequestPost(context) {
const { request, env } = context;
const payloadText = await request.text();
const signature = request.headers.get("stripe-signature");
const secret = env.STRIPE_WEBHOOK_SECRET;
// 1. Rejeição imediata de chamadas não assinadas
if (!signature) {
return new Response(JSON.stringify({ error: "Assinatura ausente" }), { status: 400 });
}
// 2. Validação HMAC-SHA256 via Web Crypto API nativa
const valid = await verifyStripeSignature(payloadText, signature, secret);
if (!valid) {
return new Response(JSON.stringify({ error: "Assinatura forjada" }), { status: 400 });
}
const event = JSON.parse(payloadText);
// 3. Doutrina do Pix: apenas vendas efetivamente pagas
if (event.type === "checkout.session.completed" || event.type === "checkout.session.async_payment_succeeded") {
const session = event.data?.object || {};
if (session.payment_status !== "paid") {
return new Response(JSON.stringify({ status: "ignored_unpaid" }), { status: 200 });
}
// 4. Despacha para o WhatsApp via Multi-Adaptador
await despacharNotificacao(session, env);
return new Response(JSON.stringify({ success: true }), { status: 200 });
}
return new Response(JSON.stringify({ received: true }), { status: 200 });
}
⚡ Automatize Sua Fábrica de Conteúdo com IA
Enquanto o webhook avisa quando a venda cai, nossos scripts automatizam a produção de conteúdo: 20 roteiros prontos de alta retenção + prompts visuais cinematográficos + pipeline Python/FFmpeg para escalar canais no TikTok, Reels e Shorts.
Adquirir Pacote Completo (R$ 27,00) 🔒 Pix Instantâneo & Cartão