Integração PayPal (IPN)

Dar acesso automático aos compradores da PayPal (IPN) e retirá-lo em reembolsos.

1. Criar a integração

  1. Painel → app → Vendas → Nova integração → escolha PayPal (IPN).
  2. 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).
  3. 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.

Formato do URL (copie o seu do painel)
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

EventoEfeito
Compra ou renovação aprovadaCria o aluno (se não existir), dá acesso aos produtos associados e envia o email de acesso.
Reembolso, chargeback ou cancelamentoRetira 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 abandonadoCria um lead e dispara as automações de recuperação.
Subscrição com pagamento em atrasoInicia o período de tolerância definido nas Definições; depois retira o acesso.
Mudança de planoTroca 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.