# 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 **Slim Pack**.

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](/es/get-central/slim-pack-payment-guides/process-a-refund).

## 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:

1. **PREAUTORIZACION** – Operación con tarjeta presente que reserva fondos
2. **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#:

```csharp
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:

```xml
<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#:

```csharp
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:

```xml
<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](/es/get-central/slim-pack-payment-guides/process-a-refund).
* Para obtener detalles sobre cómo generar e imprimir recibos, consulta la documentación [Generar e imprimir recibos](/es/get-central/slim-pack-payment-guides/generate-and-print-receipts).