# Introducción
La funcionalidad de Webhooks permite enviar a una URL un objeto con los datos de una suscripción cada vez que ocurra un evento. Nota: Los eventos sólo se dispararán si están configurados los valores Webhooks Url y Webhooks secret
# Seguridad
Todas las solicitudes a Webhooks se realizan mediate peticiones POST. El cuerpo de la solicitud será la versión codificada en JSON del objeto. La solicitud tendrá un encabezado denominado Signature que contendrá una firma encriptada con sha256 que la aplicación receptora puede usar para comprobar, junto con la clave secreta (Webhooks secret), que la petición es auténtica y no ha sido manipulada. Si no se recibe una respuesta con un código 2XX, se volverá a intentar llamar al webhook después de 10 segundos. Si se produce un error en ese segundo intento, se descartará la petición.
# Verificación de la petición
Desde el lado receptor de la petición se debe comparar si coinciden el valor recibido en el header Signature y el valor cifrado con sha256 y la clave secreta (Webhooks secret).
$computedSignature = hash_hmac('sha256', $request->getContent(), $signingSecret);
if ($computedSignature !== $signatureHeader) {
http_response_code(400);
exit;
}else {
//Process request
http_response_code(200);
exit;
}
2
3
4
5
6
7
8
9
10
# Tipos de evento de Suscripcion de Usuarios (propiedad action)
- ACTIVATION: Registro de una nueva suscripción;
- UPDATE: Actualización de algún dato de la suscripción;
- CANCELLATION: Cancelación de una suscripción a través del back-office;
- USER CANCELLATION: Cancelación de la suscripción desde el perfil del usuario;
- AUTOMATIC CANCELLATION: Cancelación automática de la suscripción;
# Modelo del objeto
- action: Tipo de evento
- subscription: Datos de la suscripción
- subscriber: Datos del suscriptor
- site: Datos del sitio
- resource: Datos del paquete suscripto
- credit_card: Datos de la tarjeta asociada a la suscripción
- old_resource: Datos del paquete anterior (se envía sólo si se actualizan)
{
"action": "...",
"subscription": {
"created_at": "YYYY-MM-DDTHH:ii:ss.000000Z",
"promotional_price": nn,
"promotional_months": n,
"failed_payments": "0",
"next_payment": "YYYY-MM-DDTHH:ii:ss.000000Z"
},
"subscriber": {
"first_name": "...",
"last_name": "...",
"email": "...",
"phone": "...",
"identification_type": "...",
"identification_number": "...",
"adresses": [
{
"country": "...",
"state": "...",
"city": "...",
"street": "...",
"number": "...",
"floor": "...",
"apt": "...",
"postal_code": "...",
"details": "...",
"type": "..."
}
],
"created_at": "YYYY-MM-DDTHH:ii:ss.000000Z"
},
"site": {
"name": "...",
"url": "..."
},
"resource": {
"code": "...",
"name": "...",
"price": nnn,
"promotional_price": nn,
"promotional_months": n,
"periodicity": n,
"active_from": "YYYY-MM-DDTHH:ii:ss.000000Z",
"active_to": "YYYY-MM-DDTHH:ii:ss.000000Z"
},
"credit_card": {
"holder": "...",
"identification_type": "...",
"identification_number": "...",
"type": "...",
"number": "...",
"expiration_month": "...",
"expiration_year": "..."
},
"old_resource": { ... },
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# Tipos de evento de Registro de Usuarios(propiedad action)
- ACTIVATION_USER: Registro de un nuevo usuario;
- DELETE_USER: Eliminación de un usuario;
# Modelo del objeto
- action: Tipo de evento
- user: Datos del nuevo usuario
- site: Datos del sitio
{
"action": "...",
"user": {
"id": "...",
"first_name": "...",
"last_name": "...",
"email": "...",
"email_verified_at" : "...",
"provider": "...",
"created_at": "..."
},
"site": {
"name": "...",
"url": "..."
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16