Confirmación del pedido

Aplazame utiliza la URL de callback definida en la creación del checkout como notification_url para notificar cambios relevantes en el estado del pedido. El comercio deberá implementar un endpoint en la dirección proporcionada para responder a las notificaciones.

La notificación de confirmación es el último paso que se produce una vez que Aplazame ha aceptado la solicitud de financiación del comprador, y determina si finalmente el pedido será procesado. Una vez que el pedido ha sido confirmado por el comercio, el proceso de solicitud estará completado y se realizará la liquidación al comercio.

Flujo de confirmación

Una vez completada la solicitud de financiación, Aplazame enviará una notificación a la dirección notification_url. Aplazame espera que el comercio responda a todas las notificaciones enviadas en el formato de respuesta adecuado.

Existen tres posibles escenarios como resultado de la solicitud de financiación del comprador:

  • La solicitud de financiación ha sido denegada por parte de Aplazame.
  • La solicitud de financiación está pendiente ya que Aplazame requiere que el comprador complete un reto de validación de identidad. Mientras, el comercio debe reservar el stock del producto al comprador hasta que se determine el estado final del pedido.
  • La solicitud de financiación ha sido aceptada por Aplazame y ahora se requiere la confirmación con el comercio para completar el proceso.

El comercio deberá responder a la notifiación de confirmación informando si finalmente acepta o deniega el pedido (ej: el producto ya no se encuentra en stock).

En función de la respuesta del comercio, Aplazame realizará una última notificación adicional para informar del estado final del pedido. En caso que alguna de las notificaciones enviadas no obtengan respuesta o ésta no tenga el formato esperado, Aplazame realizará una serie de reintentos cuyo límite estará determinado por el tiempo de expiración máxima del pedido.

order-confirmation-ok
order-confirmation-ko

Datos de notificación

Cada notificación de Aplazame incluye la siguiente información relevante para el estado del pedido.

Observa que las notificaciones enviadas por Aplazame incluyen la clave privada del comercio como cabecera de autenticación. Se recomienda implementar un mecanismo para comprobar el contenido de la cabecera en el servidor del comercio y validar que el emisor de las notificaciones es Aplazame.

POST notification_url
Authorization: Bearer api_private_key
Content-Type: application/json

{
  "id": "8606a585a5a56e51856e7f6d84a131b8",
  "status": "pending",
  "status_reason": "confirmation_required",
  "sandbox": false,
  "mid": "nOIpXXVTSGhc",
  "total_amount": 124560,
  "tax_rate": 2100,
  "discount": 0,
  "discount_rate": 0,
  "currency": {
    "name": "Euro",
    "code": "EUR",
    "numeric": "978",
    "symbol": "€"
  },
  "rejected": false,
  "confirmed": null,
  "verified": "2017-09-11T15:47:12.503341Z",
  "expired": null,
  "expires_at": "2017-09-11T17:47:21.603326Z",
  "cancelled": null,
  "created": "2017-09-11T15:47:21.603326Z"
}
Parámetro Tipo Descripción
id string Identificador del pedido de Aplazame (inmutable).
status string Estado del pedido (ok, pending o ko).
status_reason string Código de estado del pedido.
sandbox boolean El pedido fue realizado en el entorno de pruebas.
mid string Identificador del pedido generado por el comercio o autogenerado por Aplazame.
total_amount decimal Cantidad a financiar.
tax_rate decimal Importe de descuento en el precio del pedido.
discount decimal Importe de descuento en el precio del pedido.
discount_rate decimal Tasa de descuento en el precio del pedido.
currency ISO 4217 Divisa del pedido.
rejected boolean El pedido ha sido rechazado.
confirmed ISO 8601 Fecha y hora de confirmacion del pedido.
verified ISO 8601 Fecha y hora de verificación del pedido.
expired ISO 8601 Fecha y hora en que el pedido expiró.
expires_at ISO 8601 Fecha y hora de expiración del pedido.
cancelled ISO 8601 Fecha y hora de cancelación del pedido.
created ISO 8601 Fecha y hora de creación del pedido.

Códigos de estado del pedido

El estado del pedido se notifica en los campos status y status_reason. En función del campo status del pedido, el campo status_reason proporciona información específica para determinar el estado del pedido.

  • Un pedido en estado pending significa que aún no se ha determinado el estado final del pedido, el cuál depende de una acción por parte del comercio, el comprador o Aplazame. Por lo tanto, éste no es un estado final de un pedido.

  • Un pedido en estado ok significa que el pedido ha sido aceptado y confirmado tanto por el comercio como por Aplazame. Éste es un estado final de un pedido.

  • Un pedido en estado ko significa que el pedido ha sido rechazado por Aplazame o cancelado por el comercio. Éste es un estado final de un pedido.

Status Status reason Cause
pending confirmation_required La solicitud de financiación ha sido aceptada por Aplazame y está a la espera de la confirmación final de la tienda.
pending challenge_required Aplazame está a la espera de que el comprador complete un reto de validación de identidad tras finalizar la solicitud de financiación.
ko expired La solicitud de financiación ha expirado.
ko expired_challenge El comprador no ha superado el reto de validación de identidad a tiempo.
ko ko_generic La solucitud de financiación no ha pasado el criterio de admisión de Aplazame.
ko failed_challenge El comprador no ha superado el reto de validación de identidad.
ko confirmation_rejected_by_merchant La tienda ha rechazado el pedido.
ko merchant_failed_to_confirm No se ha podido confirmar con la tienda.
ok La solicitud de financiación ha sido completada y aceptada por la tienda.

Formato de respuesta

Aplazame utiliza un formato simple de respuesta para las peticiones de notificación enviadas al comercio. A excepción de la notificación de confirmación, Aplazame espera que el formato de la respuesta sea siempre un HTTP 200 OK con un estado ok como datos de respuesta. En cualquier otro caso, Aplazame realizará varios reintentos de entrega de la notificación.

HTTP/1.1 200 OK
Content-Type: application/json

{
  "status": "ok"
}

Opcionalmente, sólo en caso de proceder a la confirmación del pedido, la respuesta puede incluir el identificador actualizado del pedido (order_id) generado por la tienda en la transacción de confirmación.

Este identificador será utilizado para reemplazar el identificador provisional asignado al pedido antes de su confirmación (mid). Una vez que Aplazame ha recibido la confirmación del pedido no es posible realizar cambios de identificador.

Algoritmo de confirmación

Ejemplo de confirmación en pseudo-código para el servidor del comercio

IF private_key != request.HEADER['Authorization'] THEN:
  RETURN Response(status_code = 403)
END IF

SET payload to JSON.Decode(request.POST)
IF payload.mid not found THEN:
  RETURN Response(status_code = 404)
END IF

IF payload.status == 'pending' AND
   payload.status_reason == 'confirmation_required' THEN:
  IF order.do_payment_accept() THEN:
    RETURN Response(status_code = 200, body = '{"status": "ok"}')
  ELSE:
    RETURN Response(status_code = 200, body = '{"status": "ko"}')
  END IF
ELSE IF payload.status == 'ko' THEN:
  IF order.do_payment_cancel() THEN:
    RETURN Response(status_code = 200, body = '{"status": "ok"}')
  ELSE:
    RETURN Response(status_code = 200, body = '{"status": "ko"}')
  END IF
ELSE:
  RETURN Response(status_code = 200, body = '{"status": "ok"}')
END IF