Cómo integrar y procesar webhooks de PayPal para SaaS. Incluye ejemplo de payload normalizado y código listo para producción.
Cuando PayPal envía un evento de pago, el cuerpo del webhook contiene decenas de campos anidados. Procesar webhook implica extraer solo los datos relevantes y convertirlos a un formato plano que cualquier sistema pueda consumir sin lógica adicional.
El resultado esperado siempre sigue el mismo esquema de 6 campos:
{
"plataforma": "paypal",
"id_transaccion": "pi_3ABC...",
"monto": 49.99,
"moneda": "USD",
"cliente_email": "buyer@ejemplo.com",
"estado_pago": "aprobado"
}
Este es el payload crudo que PayPal envía a tu servidor:
{
"id": "WH-2WR32451HC0233532",
"event_type": "PAYMENT.CAPTURE.COMPLETED",
"resource": {
"id": "5TY05013RG002845M",
"status": "COMPLETED",
"amount": { "value": "49.99", "currency_code": "USD" },
"payer": { "email_address": "buyer@ejemplo.com", ... },
"seller_receivable_breakdown": { ... },
... 30+ campos más
}
}
Como ves, el objeto contiene campos innecesarios para la mayoría de los casos de uso. La API de traducción elimina el ruido y devuelve solo lo esencial.
Envía el webhook tal como llega con un parámetro de plataforma:
POST https://webhook-translator-microapi.vercel.app/?plataforma=paypal Content-Type: application/json [body del webhook de PayPal aquí]✓ Sin lógica adicional ✓ <100ms ✓ 500 llamadas gratis
// ⚠ Requiere mantener esta lógica por cada actualización de PayPal
const monto = event.data.object.amount_received / 100;
const email = event.data.object.customer_email
?? event.data.object.billing_details?.email;
// ... 20 líneas más para cubrir todos los casos edge
✗ Frágil ante cambios de API
Usa la API que normaliza Stripe, Shopify y PayPal en un JSON plano uniforme. 500 llamadas gratis al mes.
Obtener acceso gratuito →