Crear Sesión
Sesión es el término que usamos para referirnos al proceso de pago con el que interactuan tus usuarios en Checkout.
Para crear una sesión debes consumir nuestra API según tus necesidades, conoce los detalles del API en API - Crear Sesion.
Autenticación: Para crear una sesión debes autenticarte con nuestra API, conoce los detalles en Autenticación
Localización: Puedes elegir el idioma de la sesión haciendo uso de los parámetros del api, conoce los detalles en Localización
Pago Básico
Una sesión de pago básico es una sesión en la cual esperas recibir un pago único de un usuario.
CreateSessionRequest - Simple
{
...
"payment": {
"reference": "PAY_ABC_1287",
"description": "Pago por Placetopay",
"amount": {
"currency": "USD",
"total": 1000
},
}
...
}
Pagos Parciales
Una sesión de pago parcial es una sesión en la cual un usuario puede hacer varias transacciones de distintos montos o con diferentes medios de pago hasta completar el total solicitado en la misma sesión.
Para usar esta funcionalidad se debe enviar la propiedad payment.allowPartial
como true
.
CreateSessionRequest - Partial Payment
{
...
"payment": {
"reference": "PAY_ABC_1287",
"description": "Pago por Placetopay",
"amount": {
"currency": "USD",
"total": 1000
},
"allowPartial": true
}
...
}
Cuando se hace una sesión de pagos parciales, aparecen nuevo escenarios que se deben controlar:
- La sesión finaliza con el estado
APPROVED_PARTIAL
, ocurre cuando en la sesión se hizo al menos una transacciónAPPROVED
, pero no se completó el total del monto solicitado. - La sesión finaliza con el estado
PARTIAL_EXPIRED
, ocurre cuando en la sesión se hizo al menos una transacciónAPPROVED
, pero no se completó el toal del monto solicitado y la sesión expiró.
Las sesiones parciales también tienen condiciones adicionales como:
- No se aceptan impuestos, pues no se pueden dividir los impuestos en diferentes transacciones.
Pago Recurrente
Una sesión de pago recurrente es una sesión en la cual el usuario completa el proceso con una tarjeta de crédito, y a partir de ese momento periodicamente se le realizan cobros automáticos al medio de pago. Por ejemplo, en el pago de una mensualidad o suscripción a un servicio.
Para usar esta funcionalidad se debe enviar la propiedad payment.recurring
con la estructura Recurrence
.
CreateSessionRequest - Recurring Payment
{
...
"payment": {
"reference": "PAY_ABC_1287",
"description": "Pago por Placetopay",
"amount": {
"currency": "USD",
"total": 1000
},
"recurring": {
"periodicity": "D",
"interval": "1",
"nextPayment": "2024-08-24",
"maxPeriods": 1,
"dueDate ": "2024-09-24",
"notificationUrl ": "https://merchanturl.com/notify"
},
}
...
}
- El atributo
nextPayment
no es obligatorio, en caso de que no se envié, se calcula dependiendo del atributointerval
yperiodicity
, en caso de que se declare debe ser una fecha futura a la fecha actual. - En el caso de fallar un cobro recurrente, éste seguirá reintentado una vez cada día durante 3 días, si luego de esto no se obtiene una transacción aprobada, la recurrencia se le cancela al tarjetahabiente.
- La recurrencia se deja de reintentar si la primera respuesta no tiene sentido reintentar (Tarjeta invalida, robada, etc), es decir se reintenta sólo si es por saldo.
- Las recurrencias sólo pueden ser canceladas en la consola administrativa de PlacetoPay.
Pago con Dispersión
Una sesión de dispersión es una sesión en la cual el monto total del pago será dividido en diferentes destinos.
Para usar este tipo de sesión, debes enviar la propiedad payment.dispersión
que contiene un arreglo de DispersionRequests
CreateSessionRequest - Dispersion Payment
{
...
"payment": {
"reference": "PAY_ABC_1287",
"description": "Pago por Placetopay",
"amount": {
"currency": "USD",
"total": 1000
},
"dispersion": [
{
"amount": {
"total": 700,
"currency": "USD"
},
"agreement": 30,
"agreementType": "AIRLINE"
},
{
"amount": {
"total": 300,
"currency": "USD"
},
"agreementType": "MERCHANT"
}
],
}
...
}
El pago puede ser dividido en diferentes convenios registrados, además permite que cada parte de la transacción sea procesada por diferentes proveedores.
Para hacer uso de esta funcionalidad es importante conocer el identificador del convenio (agreement
) a donde va dirigido el pago. Si no se agrega ningún valor de aggreement, se tomará por defecto el medio de pago configurado en el sitio de la sesión, también es necesario indicar el tipo de convenio (aggrementType
), en este caso MERCHANT o AIRLINE.
- No se permiten pagos parciales cuando se crea una sesión de dispersión.
- No se permiten pagos de preautorización cuando se crea una sesión de dispersión.
- La suma total de las dispersiones deben ser igual al total del pago.
- Todas las monedas de las dispersiones deben ser igual a la moneda del pago
Para el envió de impuestos, es importante que se agreguen en la estructura amount de cada una de las dispersiones
CreateSessionRequest - Dispersion Payment Taxes
{
...
"payment": {
...
"dispersion": [
{
"amount": {
"total": 700,
"currency": "USD",
"taxes": [
{
"kind": "airportTax",
"amount": 16.13
}
],
"details": [
{
"kind": "tip",
"amount": 11
}
]
},
"agreement": 30,
"agreementType": "AIRLINE",
},
],
}
...
}
Pago con Preautorización
La preautorización te permite reservar un monto en la tarjeta del cliente a través de una sesión de Web Checkout. Esto es útil cuando el monto final a cobrar no se conoce con certeza desde el inicio, como sucede en sectores como hospitalidad, movilidad o alquiler de equipos.
El flujo de preautorización incluye tres pasos clave:
- Check-in: Reserva un monto específico en la tarjeta del cliente sin capturarlo de inmediato.
- Reautorización: Ajusta el monto reservado si el valor estimado cambia.
- Checkout: Captura el monto final o libera la reserva.
Para una explicación conceptual, consulta Pagos/Preautorización.
Paso 1: Crear una sesión para el flujo de preautorización (Check-in)
Inicia la preautorización creando una sesión con type
establecido como checkin
. Esto reserva los fondos en la tarjeta del cliente sin cobrarlos.
Envía una RedirectRequest
al API Web Checkout -> Crear sesión:
type
debe sercheckin
- No se permiten pagos mixtos ni dispersos
- La moneda se mantiene fija durante todo el flujo
RedirectRequest - Checkin
{
...,
"type": "checkin",
"payment": {
"reference": "PAY_ABC_1287",
"description": "Payment Preauthorization",
"amount": {
"currency": "USD",
"total": 1000
}
}
...
}
Redirige al usuario al processUrl
para completar este paso. Una vez finalizado, usa API Web Checkout -> Consultar sessión (getRequestInformation) para confirmar el estado:
GetRequestInformation - /api/session/:requestId
{
"auth": ...
}
RedirectInformation.payment
es un arreglo de intentos de pago. SiRedirectInformation.status
esAPPROVED
, identifica el intento exitoso.Guarda
RedirectInformation.payment[n].internalReference
para usar en las operaciones de Reautorización y Checkout.
Paso 2: Ajustar el monto reservado (Reautorización)
Este paso opcional permite actualizar el monto retenido antes de capturarlo.
Esto se hace enviando el TransactionActionRequest
a API Web Checkout -> Acciones sobre transacciones:
action
debe serreauthorization
- Puedes realizar múltiples reautorizaciones
- Debes incluir
internalReference
del último paso. - La moneda deben coincidir con el Check-in
TransactionActionRequest - Reautorización
{
"auth": ...,
"action": "reauthorization",
"internalReference": 35,
"amount": {
"currency": "USD",
"total": 1500
},
...
}
Paso 3: Finalizar la transacción (Checkout)
Este paso captura o libera el monto retenido.
Esto se hace enviando el TransactionActionRequest
a API Web Checkout -> Acciones sobre transacciones:
action
debe sercheckout
- Si
payment.amount.total
es0
, el monto retenido se libera. - Debes incluir
internalReference
del último paso. - La moneda deben coincidir con el Check-in
TransactionActionRequest - Checkout
{
"auth": ...,
"action": "checkout",
"internalReference": 35,
"amount": {
"currency": "USD",
"total": 2000
},
...
}
Este flujo aplica exclusivamente para Web Checkout, donde el paso inicial se realiza mediante una sesión en el navegador y las acciones posteriores se ejecutan vía API.
Asegúrate de almacenar de forma segura el valor de
internalReference
para completar correctamente el flujo.
Suscripción
Una sesión de suscripción es una sesión en la cual el usuario ingresa un medio de pago para tokenizarlo y que luego podrá ser usado para cobrar sobre ese medio de pago.
La suscripción permite almacenar de forma segura (tokenizando) el medio de pago de un usuario, para que luego pueda efectuar cobros relacionados a éste.
Para hacer uso de esta funcionalidad es necesario enviar en el CreateSessionRequest
la estructura subscription
.
CreateSessionRequest - Subscription
{
...
"subscription": {
"reference": "3110",
"description": "Una suscripción de prueba"
},
...
}
Cobrar sobre un medio de pago tokenizado
Cuando se realiza una suscripción se obtiene un token, con este token puedes hacer cobros al cliente.
La estructura de la respuesta contiene toda la información de la petición original y una estructura de suscripción (subscription
) con un instrumento (instrument
) representado en forma de token.
Protección contra doble cobros
Este endpoint cuenta con una medida de seguridad que evita que se realicen cobros duplicados,
la protección se conforma de payment.reference
, payment.amount.total
y payment.amount.currency
.
Si envías la misma información de pago en un período de 24 horas solo se efectuará un cobro.
CollectRequest
{
...
"payment": {
"reference": "1122334455",
"description": "Prueba",
"amount": {
"currency": "USD",
"total": 100
}
},
"instrument": {
"token": {
"token": "e07ca9986cf0ecac8a557fa11c07bf37ea35e9e3e3a4180c49"
}
},
...
}
La información del token debe ser almacenada en su sitio y relacionada al usuario y/o producto. Luego de tener el token, puede generar cobros al medio de pago tokenizado usando el servicio collect.
Pago con suscripción
Puedes permitir que tus usuarios guarden su medio de pago durante un pago normal, activando el flujo de suscripción. Este flujo permite almacenar de forma segura el medio de pago para futuras compras, siempre con el consentimiento explícito del usuario.
Este flujo es útil para:
- Preparar cobros futuros (por ejemplo, para suscripciones o pagos recurrentes).
- Reducir fricción en el checkout repitiendo automáticamente los datos de pago guardados.
- Realizar cobros cuando el usuario no está presente, como en casos de renovaciones automáticas.
1. Crear sesión de pago con opción de suscripción
Para activar la opción de guardar el medio de pago durante el proceso de checkout, debes enviar la propiedad
subscribe: true
dentro de la estructura payment
en la petición CreateSessionRequest
.
CreateSessionRequest
{
...
"payment": {
"reference": "PAY_ABC_1287",
"description": "Pago por Placetopay",
"amount": {
"currency": "USD",
"total": 1000
},
"subscribe": true
}
...
}
Esto habilita la opción para que el usuario autorice el almacenamiento del medio de pago (tokenización) al momento de completar el pago.
2. Guardado del medio de pago por parte del usuario
Durante el flujo de checkout, se mostrará al usuario una opción para autorizar el almacenamiento de su medio de pago.
Esta autorización es necesaria para que el medio sea tokenizado y quede disponible para futuros pagos.
3. Obtener el token del medio de pago guardado
Si el usuario autorizó el guardado del medio de pago durante el proceso de checkout, al finalizar la sesión podrás consultar el token generado (identificador del medio de pago tokenizado).
Para obtenerlo, realiza una solicitud al endpoint Consultar una sesión usando el requestId
correspondiente. El token estará disponible en el campo subscription.instrument
de la respuesta, si el proceso fue exitoso.
Respuesta Query[SessionRequest
{
"requestId": 1,
"status": {...},
"request": {
...
"payment": {
"reference": "12345",
"description": "Prueba de pago",
"amount": {
"currency": "COP",
"total": 2000,
},
"subscribe": true,
},
},
"payment": [
{
"status": {
"status": "APPROVED",
"reason": "00",
"message": "La petición ha sido aprobada exitosamente",
"date": "2022-07-27T14:51:27-05:00"
},
...
}
],
"subscription": {
"status": {
"status": "OK",
"reason": "00",
"message": "La petición ha sido aprobada exitosamente",
"date": "2022-07-27T14:51:27-05:00"
},
"type": "token",
"instrument": [
{
"keyword": "token",
"value": "a3bfc8e2afb9ac5583922eccd6d2061c1b0592b099f04e352a894f37ae51cf1a",
"displayOn": "none"
},
{
"keyword": "subtoken",
"value": "8740257204881111",
"displayOn": "none"
},
...
]
}
}
4. Usar el token para realizar cobros futuros
Una vez se obtiene el token del medio de pago, puedes reutilizarlo para realizar cobros futuros sin requerir una nueva interacción del usuario.
Para más detalles sobre este proceso, consulta la sección:
➡️ Cobrar sobre un medio de pago tokenizado