Notificaciones

A cada operación realizada, recibirás una notificación vía una petición POST a las URLs que nos hayas indicado en la sección Tu cuenta > Datos de la tienda de tu panel de control.

Esta notificación incluye en el cuerpo de la misma toda la información de la operación en formato JSON con la siguiente estructura:

Campo Descripción
event Tipo de evento de la notificación
api_version Versión de la api usada para mandar la notificación
account_id La clave pública con la que se ha procesado la operación
signature Signatura de la operación
data Objecto json con todos los detalles de la operación

ejemplo de notificación

     {
      "event": "charge.created",
      "api_version": "1.0",      
      "account_id": "tk_1234567890",
      "signature": "c806afaf93b3b8b647ba6df11764195c86c1cc71",
      "data": {
        la información concreta de la operación
      }
    }

Operaciones que se notificarán

Evento ¿Qué?
charge.created El pago financiado se ha completado con éxito. En caso de ampliación de pedido, el pago ha sido procesado correctamente
charge.failed La solicitud de financiación ha sido denegada. En caso de ampliación de pedido, el cargo no se ha procesado
refund.created Se ha realizado una devolución
refund.failed Ha fallado una devolución
settlement.created Se ha realizado una liquidación de las operaciones
test Notificación de prueba solicitada por ti mismo :)

Estructura de objetos

La estructura de los objetos que recibirás en esas notificaciones la puedes consultar en el detalle de nuestro API JSON, pues se enviará el mismo modelo de datos:

Los recursos anidados (por ejemplo, los cargos que pertenecen a una suscripción) se incluyen hasta un máximo de 10. Por API no existe esa restricción, se pueden obtener todos.

Firma

La firma de la notificación se genera con un SHA1 de los siguientes campos concatenados:

secret_key + public_key + api_version + evento + id_del_objeto_principal

Es decir, en una notificación de un cargo con los siguientes datos:

  • secret_key: 1234567890
  • public_key: tk_9876543210
  • versión 1
  • evento: charge.created
  • id: cha_11111111

Concatenamos esos valores obteniendo la cadena:

1234567890tk_98765432101charge.createdcha_11111111

Aplicamos la función SHA1 sobre ella obteniendo el valor de la firma:

fb12920a666a3cb77a2ad13867400c8f68e8bb06

Un comentario sobre seguridad

Si para tu negocio es muy importante validar la información contenida en dicha notificación, la manera recomendada de hacerlo es leer únicamente la referencia enviada por Paga+Tarde y por medio del API, solicitar los detalles de la operación a nuestro servidor que te los devolverá de forma síncrona.

Ejemplo de recepción y lectura de una notifiación

Aquí tenéis un ejemplo en PHP que puede ser usado como template de como se puede estructurar el código para recibir una notificación de Paga+Tarde con una capa de seguridad.

#recepción de la notificación
$json = file_get_contents('php://input');

#conversión JSON a arrray
$notification = json_decode($json, true);

#comprobación de veracidad de la signatura
$secret_key = 'TU CLAVE SECRETA';
$signature_check = sha1( $secret_key
                        .$notification['account_id']
                        .$notification['api_version'].
                        .$notification['event']
                        .$notification['data']['id']);

if ($signature_check != $notification['signature']){
  #abortar si la signatura es incorrecta
  die( 'SIGNATURA INCORRECTA' );
  exit;
} else {
    #dependiendo del tipo de evento, realizar la operación pertinente
    switch($notification['event']){
      case "charge.created":
          #process new order
          break;
      case "charge.failed":
          #process charge failed notification
          break;
      case "refund.created":
          #process refund created notification
          break;
      case "refund.failed":
          #process refund failed notification
          break;
      case "settlement.created":
          #process refund failed notification
          break;
      case "test":
          #process test notification
          break;
  }
}