Crear un pago preautorizado
Las operaciones de preautorización (PREAUTORIZACION) permiten a los comercios reservar fondos en la tarjeta de un cliente sin capturarlos inmediatamente. Este modelo de dos fases se utiliza cuando el importe final solo se conoce tras la finalización del servicio (por ejemplo, hoteles, alquiler de coches o gasolineras).
Esta guía se aplica a TpvpcImplantado.
Una preautorización nunca captura fondos por sí sola. Debe ir seguida de una confirmación (CONFIRMACION), que captura todo o parte del importe reservado. Si no la confirmas, los fondos reservados se liberan automáticamente al vencer el período de caducidad, o puedes liberarlos antes mediante una devolución — consulta la guía Devolver un pago.
Requisitos
Antes de comenzar, asegúrate de cumplir con los siguientes requisitos previos:
- Get Central (TPVPC) instalado e inicializado con éxito a través de
fnDllIniTpvpcLatente - Capacidad de preautorización habilitada para tu comercio por la entidad
- PIN pad físico conectado y disponible para el paso inicial con tarjeta presente
Las preautorizaciones están sujetas a un período de caducidad definido por la marca de la tarjeta y el emisor. Si no se confirman dentro de este período, los fondos reservados se liberan automáticamente.
Visión general del proceso de preautorización
El flujo completo consta de dos operaciones obligatorias:
- PREAUTORIZACION – Operación con tarjeta presente que reserva fondos
- CONFIRMACION – Operación posterior que captura el importe reservado
Paso 1: Ejecutar una preautorización
La preautorización es una operación con tarjeta presente. El TPVPC activa el PIN pad, guía la interacción del titular de la tarjeta y solicita una reserva de fondos.
Para iniciar la reserva, invoca la operación estándar del PIN pad con el tipo de operación establecido en PREAUTORIZACION. Se requieren los siguientes parámetros:
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
cImporte | String | Sí | Importe a reservar, formato XXXXXXXXX.XX (por ejemplo, 100.00). |
cFactura | String | Sí | Referencia del comercio que identifica la preautorización. |
cTipoOper | String | Sí | Debe establecerse en PREAUTORIZACION. |
cXMLResp | Buffer | Sí | Buffer de salida que recibirá la respuesta XML. |
iTamMaxResp | Integer | Sí | Tamaño máximo del buffer de respuesta (mínimo recomendado: 8192). |
A continuación se muestra un ejemplo en C#:
StringBuilder xmlResponse = new StringBuilder(8192);
int result = fnDllOperPinPad(
"100.00", // cImporte
"STAY-2023-001", // cFactura
"PREAUTORIZACION", // cTipoOper
xmlResponse,
xmlResponse.Capacity
);Paso 2: Validar el resultado de la preautorización
Tras la ejecución, el TPVPC devuelve un documento XML que describe el resultado de la reserva.
La preautorización debe considerarse AUTORIZADA solo si el XML contiene ambos elementos:
<estado>F</estado>
<resultado>Autorizada</resultado>Si falta alguno de los elementos o tiene un valor diferente, la preautorización debe tratarse como DENEGADA, y no debe intentarse ninguna confirmación.
Conserva la referencia del comercio (cFactura) y los datos de respuesta relevantes, ya que son obligatorios para el paso de confirmación.
Paso 3: Capturar la preautorización
Una vez que se conoce el importe final, los fondos reservados deben capturarse ejecutando una operación CONFIRMACION. Esta operación no requiere que la tarjeta física esté presente.
La confirmación se ejecuta con fnDllOperComContable, la misma función que la devolución referenciada, cambiando cTipoOper. Debes referenciar la preautorización original por su pedido:
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
cNumPedido | String | Sí | Número de pedido de la preautorización original, del campo pedido de su respuesta. |
cRTSOriginal | String | No | Identificador RTS de la preautorización original. Se recomienda su uso. |
cImporte | String | Sí | Importe final a capturar, formato XXXXXXXXX.XX. |
cFactura | String | Sí | Referencia de compra para esta confirmación. El TPVPC no la valida. |
cTipoOper | String | Sí | Debe establecerse en CONFIRMACION. |
cXMLResp | Buffer | Sí | Buffer de salida que recibirá la respuesta XML. |
iTamMaxResp | Integer | Sí | Tamaño máximo del buffer de respuesta (mínimo recomendado: 8192). |
A continuación se muestra un ejemplo en C#:
StringBuilder xmlResponse = new StringBuilder(8192);
int result = fnDllOperComContable(
"916548", // cNumPedido — the pre-authorization's pedido
"", // cRTSOriginal
"85.00", // cImporte
"STAY-2023-001-FIN", // cFactura
"CONFIRMACION", // cTipoOper
xmlResponse,
xmlResponse.Capacity
);
if (result != 0)
{
// Technical execution error
}Paso 4: Validar el resultado de la confirmación
La confirmación es exitosa solo si la respuesta XML contiene:
<estado>F</estado>
<resultado>Autorizada</resultado>Solo después de esta validación la transacción debe considerarse totalmente capturada y finalizada.
Próximos pasos
Después de completar un ciclo de preautorización y confirmación, puedes continuar con tareas operativas adicionales:
- Para revertir una transacción confirmada o liberar fondos reservados, consulta la guía Devolver un pago.
- Para obtener detalles sobre cómo generar e imprimir recibos, consulta la documentación Generar e imprimir recibos.