Um pagamento no PayPal passa por vários eventos
Um checkout com PayPal raramente vai direto de "criado" pra "pago" numa única notificação. Dependendo do método de pagamento (saldo em conta, cartão, boleto internacional), sua integração pode receber PAYMENT.SALE.PENDING primeiro, e só depois PAYMENT.SALE.COMPLETED — ou PAYMENT.SALE.DENIED se o pagamento for recusado no processamento. Testar só o evento de sucesso deixa esse fluxo intermediário sem cobertura.
Modelando o ciclo de vida com Response Sequences
Configure uma Mock Rule com Response Sequences pra que cada chamada ao seu endpoint de recebimento devolva o próximo evento da sequência:
// Mock Rule: POST / → Response Sequences, mode: last
[
{ "status": 200, "body": "{\"id\":\"WH-1\",\"event_type\":\"PAYMENT.SALE.PENDING\",\"resource\":{\"id\":\"8XY123\",\"state\":\"pending\",\"amount\":{\"total\":\"49.90\",\"currency\":\"BRL\"}}}" },
{ "status": 200, "body": "{\"id\":\"WH-2\",\"event_type\":\"PAYMENT.SALE.COMPLETED\",\"resource\":{\"id\":\"8XY123\",\"state\":\"completed\",\"amount\":{\"total\":\"49.90\",\"currency\":\"BRL\"}}}" }
]
Chame o mesmo endpoint 2 vezes seguidas (ou use o botão Replay do dashboard) e sua integração recebe a sequência completa — exatamente como testaria uma máquina de estados de pedido que trata pendência antes da confirmação.
E a verificação de assinatura do webhook?
/v1/notifications/verify-webhook-signature do PayPal com os headers paypal-transmission-id/paypal-transmission-sig/paypal-cert-url recebidos. O motor de templates do httpdrop não reproduz esse fluxo de verificação (não existe helper de assinatura). O que ele testa bem é a lógica que reage a cada event_type — a etapa de verificação continua precisando ser testada isoladamente, com um webhook real ou o Webhooks Simulator do painel do desenvolvedor PayPal.