Eventos
Los eventos son la manera en la que Wompi te informa sobre algo importante que sucedió, sin que lo solicites activamente, usando un webhook. En pocas palabras, haremos una petición HTTP de tipo POST a una URL que especifiques, con un JSON que contiene toda la información relativa al evento que sucedió.
Así, por ejemplo, cada vez que una transacción sea aprobada o rechazada, Wompi te informará sobre esta actividad en la URL de eventos que hayas configurado en tu cuenta, con el fin de que tomes las medidas necesarias del lado de tu negocio. Para configurar dicha URL, lo puedes hacer en nuestro Dashboard de comercios.
Una URL de eventos para cada ambiente
Ten presente que tanto para Sandbox como Producción, debes configurar una URL de eventos diferente para cada ambiente. Esto, con el fin de evitar la mezcla accidental de transacciones de prueba con datos reales.
Manejar un evento
Cada vez que Wompi quiera notificar un evento a tu sistema, usará la URL de eventos, a la cual hará una petición HTTP de tipo POST, que contendrá un objeto como el que se muestra más abajo. A dicha petición HTTP, tu sistema deberá responder con un status HTTP 200 (que es el status de respuesta exitosa por defecto en los frameworks y librerías más populares). El cuerpo de respuesta que envíes no tiene importancia, ya que Wompi no lo utilizará de ninguna manera, así que puedes responder con un cuerpo vacío, un objeto JSON, etc.
Mientras el status HTTP de la respuesta por parte de tu sistema sea diferente a 200, Wompi considerará que el evento no pudo ser notificado correctamente y reintentará notificar nuevamente el evento, máximo 3 veces durante las siguientes 24 horas, hasta obtener un 200 como respuesta. El primer reintento será efectuado 30 minutos después, el segundo a las 3 horas y el último pasadas 24 horas.
Cuerpo de un evento
Cualquier evento que Wompi envíe tendrá siempre la misma estructura:
{
"event": "transaction.updated", // Nombre del tipo de evento
"data": {
// Data específica del evento
},
"environment": "prod", // "test" para Sandbox, "prod" para Producción
"signature": {
"properties": [
// Lista de propiedades con las que se construye la firma
],
"checksum": "..." // Hash calculado con una firma asimétrica SHA256
},
"timestamp": 1530291411, // Timestamp UNIX del evento usado para la firma del mismo
"sent_at": "2018-07-18T08:35:20.000Z" // Fecha current la que se notificó el evento por primera vez
}
Así por ejemplo, en el caso del evento transaction.updated, el cual indica que el estado de una transacción cambió, el cuerpo JSON enviado a la URL de eventos se verá como el siguiente:
{
"event": "transaction.updated",
"data": {
"transaction": {
"id": "1234-1610641025-49201",
"amount_in_cents": 4499,
"reference": "MZQ3X2DE2SMX",
"customer_email": "juan.perez@gmail.com",
"currency": "USD",
"payment_method_type": "CARD",
"redirect_url": "https://mitienda.com.pa/pagos/redireccion",
"status": "APPROVED",
"shipping_address": null,
"payment_link_id": null,
"payment_source_id": null
}
},
"environment": "prod",
"signature": {
"properties": [
"transaction.id",
"transaction.status",
"transaction.amount_in_cents"
],
"checksum": "3476DDA50F64CD7CBD160689640506FEBEA93239BC524FC0469B2C68A3CC8BD0"
},
"timestamp": 1530291411,
"sent_at": "2018-07-20T16:45:05.000Z"
}
Tipos de eventos
A continuación encuentras una lista con los tipos de eventos que Wompi usa. Esta lista puede crecer con el tiempo, así que te sugerimos consultarla periódicamente:
| Tipo | Descripción |
|---|---|
transaction.updated | El estado de una transacción cambió, usualmente a un estado final (APPROVED, VOIDED, DECLINED o ERROR) |
Seguridad
Para validar la integridad de la información notificada a tu URL de eventos y evitar suplantaciones, Wompi utiliza un hash criptográfico asimétrico, cuyo valor se encuentra en dos sitios:
- El Header HTTP
X-Event-Checksum - El campo
checksum, del objetosignature
Los proveemos en ambos sitios por conveniencia, así que eres libre de extraerlo de cualquiera de los dos para hacer la respectiva validación de seguridad.
El algoritmo usado para generar esta firma asimétrica es SHA256. El valor de este checksum se genera concantenando en orden lo siguientes datos:
- Los valores de los campos especificados en el arreglo
properties, que apuntan a campos del objetodata - El campo
timestamp(número entero) que es el Tiempo UNIX del evento - Un Secreto conocido únicamente por el comercio y Wompi, que está disponible en la opción Mi cuenta del Dashboard de Comercios, bajo la sección Secretos para integración técnica. Este secreto debe ser custodiado con la máxima seguridad en tus servidores