Integração PayPal (IPN)
Dar acesso automático aos compradores da PayPal (IPN) e retirá-lo em reembolsos.
1. Criar a integração
- Painel → app → Vendas → Nova integração → escolha PayPal (IPN).
- Preencha Email da conta PayPal (Obrigatório: só aceita pagamentos para este email), Valor mínimo por pagamento (ex.: 47) (Obrigatório: pagamentos abaixo deste valor nunca dão acesso (o IPN não indica o preço do produto)), Moeda (ex.: EUR) (Opcional: só aceita pagamentos nesta moeda), Sandbox (1 = sim).
- Guarde. O painel mostra o URL de webhook desta integração.
2. Configurar na PayPal (IPN)
PayPal → Account Settings → Notifications → Instant Payment Notifications → URL abaixo. Nos botões, use item_number igual ao ID externo.
https://www.zurianlab.com/api/webhooks/paypal/<token-da-integração>3. Associar produtos
Na integração, associe cada produto da PayPal (IPN) (item_number do botão PayPal) a um ou mais produtos da app. Compras de produtos sem associação aparecem em Vendas com erro para corrigir com um clique.
4. Testar
Faça uma compra de teste (ou use o botão de teste/reenvio da PayPal (IPN)). Em Vendas vê cada evento recebido com o estado (processado, ignorado, falhou) e pode reprocessá-lo.
O que cada evento faz
| Evento | Efeito |
|---|---|
| Compra ou renovação aprovada | Cria o aluno (se não existir), dá acesso aos produtos associados e envia o email de acesso. |
| Reembolso, chargeback ou cancelamento | Retira o acesso dado por essa transação (os acessos dados por outras compras mantêm-se). |
| Pagamento pendente (transferência, voucher ou referência) | Cria um lead para recuperação; nunca dá acesso. |
| Pagamento recusado ou expirado, carrinho abandonado | Cria um lead e dispara as automações de recuperação. |
| Subscrição com pagamento em atraso | Inicia o período de tolerância definido nas Definições; depois retira o acesso. |
| Mudança de plano | Troca os produtos da subscrição. |
Segurança e fiabilidade
- Cada aviso é verificado (assinatura, token ou chave) antes de qualquer alteração; avisos não verificados são rejeitados.
- O processamento é idempotente: o mesmo evento repetido pela plataforma nunca dá acesso duas vezes.
- O acesso só é dado depois de a plataforma confirmar o pagamento — nunca a partir do navegador do comprador.