Saltar al contenido principal

Webhooks

Verifica la firma de los webhooks que envía Landa Pay y obtén el evento tipado, listo para usar con un switch sobre event.type.

¿Primera vez con este módulo? Sigue la guía Recibir webhooks.

Métodos

WebhookEvent

Así se ve el objeto que devuelven los métodos de este módulo.

CampoTipoDescripción
idstringIdentificador, empieza por evt_. Úsalo para deduplicar
typeWebhookEventTypePor ejemplo payment.approved
data.objectPayment | SubscriptionEl pago en los eventos payment.* y la suscripción en los subscription.*
livemodebooleantrue si el evento es de datos reales
createdAtstringCuándo ocurrió

Verificar y leer un webhook

landapay.webhooks.constructEvent(payload, signature, options?)

Comprueba la firma del header Landa-Signature con tu secreto y que no tenga más de 5 minutos. Si algo falla lanza SignatureVerificationError. Pasa el cuerpo crudo, no el JSON ya parseado.

Parámetros

CampoTipoDescripción
payloadobligatoriostring | Buffer | Uint8ArrayCuerpo crudo de la petición
signatureobligatoriostring | string[] | null | undefinedValor del header Landa-Signature
options.secretstringPor defecto LANDAPAY_WEBHOOK_SECRET
options.tolerancenumberAntigüedad máxima en segundos; 300 por defecto, 0 la desactiva

Devuelve

WebhookEvent

EjemploTypeScript
app.post("/webhooks/landapay", express.raw({ type: "application/json" }), (req, res) => {  const event = landapay.webhooks.constructEvent(req.body, req.get("Landa-Signature"));   switch (event.type) {    case "payment.approved":      console.log(event.data.object.amount); // Payment      break;    case "subscription.canceled":      console.log(event.data.object.externalId); // Subscription      break;  }  res.sendStatus(200);});

Verificar solo la firma

landapay.webhooks.verifySignature(payload, signature, options?)

Igual que constructEvent pero sin parsear el cuerpo. Devuelve true o lanza el error.

Parámetros

CampoTipoDescripción
payloadobligatoriostring | Buffer | Uint8ArrayCuerpo crudo
signatureobligatoriostring | null | undefinedHeader Landa-Signature
options{ secret?; tolerance? }Igual que en constructEvent

Devuelve

true

EjemploTypeScript
landapay.webhooks.verifySignature(rawBody, signatureHeader);

Firmar un webhook de prueba

landapay.webhooks.generateTestHeader(payload, options?)

Genera un header Landa-Signature válido para probar tu endpoint sin esperar un evento real.

Parámetros

CampoTipoDescripción
payloadobligatoriostringCuerpo JSON a firmar
options{ secret?; timestamp? }Secreto y momento de la firma

Devuelve

string

EjemploTypeScript
const payload = JSON.stringify({ id: "evt_TEST", object: "event", type: "payment.approved" });const header = landapay.webhooks.generateTestHeader(payload); await fetch("http://localhost:4000/webhooks/landapay", {  method: "POST",  headers: { "Content-Type": "application/json", "Landa-Signature": header },  body: payload,});