Un webhook es una forma eficiente de recibir actualizaciones o eventos en tiempo real desde un servidor a una aplicación o servicio externo. Cuando se utiliza un webhook, la aplicación o servicio proporciona una URL al servidor que puede usar para enviar actualizaciones en tiempo real en lugar de esperar a que la aplicación solicite activamente las actualizaciones.
Si quieres recibir notificaciones por webhook, necesitaras proporcionar una URL a la que le llegarán los cambios en el estado de pago. Esta se la puedes dar al equipo en el proceso de onboarding.
El webhook mandará eventos a la URL registrada. Estos tendrán el siguiente formato:
La informacion del estado de pago en Base64
Firma sha256 generada con el hash de data concatenada con la integrity_key
{
"data": "eyJpZCI6IjBjOTVmNjgyLWE0NjAtNGFjOC05YmY4LWIyZjFhNzg4ZDc1ZCIsInN0YXR1cyI6IkFQUFJPVkVEIiwiYW1vdW50X2NlbnRzIjoiMzAwMDAwIn0=",
"signature": "49f3631cd141e78b46a274f180785bb9300f719b89187da7341196bd9e917ca8"
}
La firma se puede verificar de la siguiente manera:
import * as crypto from "crypto";
// Recibir el evento del webhook
const { data, signatureWebhook } = {
data: "eyJpZCI6IjBjOTVmNjgyLWE0NjAtNGFjOC05YmY4LWIyZjFhNzg4ZDc1ZCIsInN0YXR1cyI6IkFQUFJPVkVEIiwiYW1vdW50X2NlbnRzIjoiMzAwMDAwIn0=",
signature: "49f3631cd141e78b46a274f180785bb9300f719b89187da7341196bd9e917ca8",
};
// Esta nunca se debe compartir!
const integrityKey = "integrityKey_dev_5278918e8-530b-4cf1-8eac-df87481c964f";
const signature = crypto
.createHash("sha256")
.update(data + integrityKey)
.digest("hex");
if (signature !== signatureWebhook) {
// Error! Firma no es valida y no se procesa el evento
}
const parsedData = JSON.parse(Buffer.from(data, "base64").toString("utf-8"));
parsedData = {
id: '0c95f682-a460-4ac8-9bf8-b2f1a788d75d',
status: 'APPROVED',
amount_cents: '300000'
}