Skip to content
FINORA Academy
SistemaFINORA Checkout

FINORA Checkout · Concepts

Cómo funciona una sesión de cobro

ImplementedDocumented

This content is not available in your language yet.

FINORA Checkout cobra en línea con la misma lógica que una caja del comercio: el cliente elige cómo pagar, FINORA pide los datos que ese medio necesita, autoriza con el banco y devuelve un veredicto. La diferencia es que todo ocurre en un navegador que no controlas. Por eso el diseño reparte la confianza en tres credenciales, cada una con un alcance mínimo.

CredencialQuién la tieneQué puede hacerQué no puede hacer
Clave API del comercioSolo tu servidorCrear, consultar, listar y cancelar sesionesNada desde el navegador: allí no debe existir
Token de clienteEl navegador, para una sesiónVer esa sesión, elegir medio, enviar los datos del pago, consultar el estadoCrear sesiones, cambiar el monto, ver otra sesión. Vence con su sesión
Secreto del webhookSolo tu servidorVerificar que un aviso viene de FINORANada más: no autentica llamadas

La regla que sale de esta tabla es corta: lo que viaja al navegador no sirve para robar. Si alguien copia el token, como mucho puede pagar ese pedido por ese monto.

La sesión es un pedido con fecha de vencimiento

Sección titulada «La sesión es un pedido con fecha de vencimiento»

Una sesión de cobro guarda lo mínimo: el monto, la moneda, la referencia de tu pedido, los medios disponibles y hasta cuándo vale. Por defecto vence a los 15 minutos; puedes fijar entre 1 y 60 minutos con ttlSegundos. El cliente ve la cuenta regresiva todo el tiempo.

Por dentro, cada sesión es una intención de pago del Merchant, la misma pieza que usan las cajas y los terminales. Cada vez que el cliente intenta pagar, se abre un intento dentro de esa intención, y cada intento termina en un veredicto. Si quieres el detalle, está en Intención, intento y veredicto.

flowchart TB
    T[Tu servidor] -- "clave API" --> S[(Sesión de cobro)]
    S -- "sesionId + token" --> N[Navegador del cliente]
    N -- "medio y datos del pago" --> S
    S --> I[Intento de cobro]
    I -- "pago móvil, transferencia, QR" --> B[Banco]
    I -- "tarjeta" --> P[Terminal del comercio]
    B --> V{Veredicto}
    P --> V
    V -- "aviso firmado" --> T

El checkout no tiene ningún campo para el número de tarjeta, la fecha ni el código de seguridad. Cuando el cliente elige tarjeta, FINORA envía la orden de cobro a un terminal físico de tu comercio (el que indicaste con terminalId), y la tarjeta se lee allí, con chip y PIN. A tu página solo vuelve el número enmascarado del recibo, del tipo 4111 11•• •••• 1111.

Las claves de pago móvil siguen el mismo principio: van del navegador del cliente al banco a través de FINORA y no se guardan en ningún sitio.

Esto reduce mucho lo que tu tienda tiene que proteger, pero no reemplaza la evaluación de seguridad que te pida tu adquirente: esa la define él para tu caso.

El navegador cuenta el final de la historia dos veces: con el evento onResultado del componente y con la vuelta a tu returnUrl. Ninguna de las dos es prueba de pago, porque ambas ocurren en una máquina que no controlas.

La prueba es el webhook: un POST que FINORA firma con HMAC-SHA256 usando tu secreto, con la hora del envío dentro de la firma para que un aviso viejo no se pueda reenviar. Tu servidor lo verifica y solo entonces entrega el pedido. Si el aviso no llega, tu servidor puede preguntar con su clave API: GET /api/v1/checkout/sesiones/{id} siempre responde el estado real.

Los medios los decide el comercio, no tu página

Sección titulada «Los medios los decide el comercio, no tu página»

Qué medios aparecen, con qué nombre, qué campos piden y con qué montos mínimos y máximos lo define la configuración de tu comercio en FINORA. El checkout pinta lo que recibe:

  • Un medio que no aplica a este pedido se ve atenuado con su motivo (por ejemplo, «Mínimo Bs 500,00»), en lugar de desaparecer.
  • La tarjeta solo aparece disponible si la sesión tiene un terminal.
  • El efectivo nunca aparece en la web: nadie puede entregar billetes a una página.
  • Un medio nuevo aparece sin que tengas que actualizar tu integración.