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.
Métodos
WebhookEvent
Así se ve el objeto que devuelven los métodos de este módulo.
| Campo | Tipo | Descripción |
|---|---|---|
id | string | Identificador, empieza por evt_. Úsalo para deduplicar |
type | WebhookEventType | Por ejemplo payment.approved |
data.object | Payment | Subscription | El pago en los eventos payment.* y la suscripción en los subscription.* |
livemode | boolean | true si el evento es de datos reales |
createdAt | string | Cuá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
| Campo | Tipo | Descripción |
|---|---|---|
payloadobligatorio | string | Buffer | Uint8Array | Cuerpo crudo de la petición |
signatureobligatorio | string | string[] | null | undefined | Valor del header Landa-Signature |
options.secret | string | Por defecto LANDAPAY_WEBHOOK_SECRET |
options.tolerance | number | Antigüedad máxima en segundos; 300 por defecto, 0 la desactiva |
Devuelve
WebhookEvent
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
| Campo | Tipo | Descripción |
|---|---|---|
payloadobligatorio | string | Buffer | Uint8Array | Cuerpo crudo |
signatureobligatorio | string | null | undefined | Header Landa-Signature |
options | { secret?; tolerance? } | Igual que en constructEvent |
Devuelve
true
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
| Campo | Tipo | Descripción |
|---|---|---|
payloadobligatorio | string | Cuerpo JSON a firmar |
options | { secret?; timestamp? } | Secreto y momento de la firma |
Devuelve
string
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,});