# Parámetros de la petición

Esta referencia enumera las **funciones públicas y los parámetros** que expone la biblioteca Slim Pack, con sus **nombres y firmas exactas**.

Esta guía se aplica a **Slim Pack**.

Las siguientes tablas reflejan el modelo de invocación real utilizado por la biblioteca. Los parámetros se enumeran **exactamente como deben aparecer en el código**, sin alias, traducciones ni campos inferidos.

## Funciones de inicialización y ciclo de vida

Estas son las funciones que se utilizan para inicializar y gestionar el ciclo de vida del TPVPC.

### fnDllIniTpvpcLatente

Inicializa el TPVPC y abre la comunicación con el PIN pad. Esta función **debe llamarse una vez** cuando se inicia la aplicación.

**Firma de la función (C#):**

`int fnDllIniTpvpcLatente(string cComercio, string cTerminal, string cClaveFirma, string cConfPuerto, string cVersion);`

| Parámetro     | Tipo   | Requerido | Descripción                                                                                                 |
| ------------- | ------ | --------- | ----------------------------------------------------------------------------------------------------------- |
| `cComercio`   | String | Sí        | Identificador del comercio (FUC) proporcionado por la entidad.                                   |
| `cTerminal`   | String | Sí        | Identificador del terminal asignado al PIN pad.                                                             |
| `cClaveFirma` | String | Sí        | Clave de firma asociada al comercio y al terminal.                                                      |
| `cConfPuerto` | String | No        | Configuración de puerto. Si está vacío o es nulo, el valor se carga desde la configuración local de TPVPC.  |
| `cVersion`    | String | No        | Versión del protocolo (`"5.1"`, `"6.1"`, `"8.1"`). Si está vacío, se utiliza la configuración por defecto.  |

**Valor de retorno**: `0` si la inicialización es exitosa. Cualquier otro valor indica un error a nivel de biblioteca.

### fnDllParaTpvpcLatente

Detiene la comunicación y libera todos los recursos internos.

**Firma de la función:**

`int fnDllParaTpvpcLatente();`

Esta función **no tiene parámetros de entrada**.

---

## Operaciones de pago y financieras

Todas las operaciones financieras se ejecutan a través de funciones exportadas que reciben **parámetros tipados** y devuelven un **buffer de respuesta XML**. Un valor de retorno de `0` solo indica que la operación fue procesada; la autorización siempre debe validarse a partir del XML.

### fnDllOperPinPad

Ejecuta un **PAGO** o **PREAUTORIZACION** utilizando un PIN pad físico.

**Firma de la función:**

`int fnDllOperPinPad(string cImporte, string cFactura, string cTipoOper, StringBuilder cXMLResp, int iTamMaxResp);`

| Parámetro     | Tipo         | Requerido | Descripción                                                                |
| ------------- | ------------ | --------- | -------------------------------------------------------------------------- |
| `cImporte`    | String       | Sí        | Importe en formato `XXXXXXXXX.XX`.                                         |
| `cFactura`    | String       | Sí        | Referencia de la operación del comercio.                                   |
| `cTipoOper`   | String       | Sí        | Tipo de operación: `"PAGO"` o `"PREAUTORIZACION"`.                         |
| `cXMLResp`    | StringBuffer | Sí        | Buffer de salida que recibe la respuesta XML.                               |
| `iTamMaxResp` | Integer      | Sí        | Tamaño máximo del buffer (recomendado: al menos `8192`).                    |

### fnDllOperManualExt

Ejecuta un **PAGO** o **PREAUTORIZACION** mediante la **introducción manual de los datos de la tarjeta**.

**Firma de la función:**

`int fnDllOperManualExt(string cTarjeta, string cCaducidad, string cCVC2, string cImporte, string cFactura, string cTipoOper, StringBuilder cXMLResp, int iTamMaxResp);`

| Parámetro     | Tipo         | Requerido   | Descripción                                                                                |
| ------------- | ------------ | ----------- | ------------------------------------------------------------------------------------------ |
| `cTarjeta`    | String       | Sí          | Número de la tarjeta (15–19 dígitos).                                                      |
| `cCaducidad`  | String       | Sí          | Fecha de caducidad en formato `AAMM`.                                                      |
| `cCVC2`       | String       | Condicional | Código de seguridad, requerido dependiendo de la configuración del comercio.               |
| `cImporte`    | String       | Sí          | Importe en formato `XXXXXXXXX.XX`.                                                         |
| `cFactura`    | String       | Sí          | Referencia de la operación del comercio.                                                   |
| `cTipoOper`   | String       | Sí          | `"PAGO"` o `"PREAUTORIZACION"`.                                                            |
| `cXMLResp`    | StringBuffer | Sí          | Buffer XML de salida.                                                                       |
| `iTamMaxResp` | Integer      | Sí          | Tamaño máximo del buffer.                                                                   |

---

## Operaciones de confirmación y devolución

Una confirmación captura una preautorización autorizada previamente; una devolución devuelve fondos. Las dos pasan por la misma familia de funciones, y la que debes llamar depende de dónde vengan la tarjeta y la referencia original.

| Función | Cuándo usarla | Parámetros |
| :--- | :--- | :--- |
| `fnDllOperComContable` | Tienes el `pedido` original. Sirve a las dos operaciones mediante `cTipoOper`. | `cNumPedido`, `cRTSOriginal`, `cImporte`, `cFactura`, `cTipoOper`, `cXMLResp`, `iTamMaxResp` |
| `fnDllComContableTrj` | La tarjeta se lee de nuevo en el PIN pad. | `cImporte`, `cFactura`, `cNumPedido`, `cRTSOriginal`, `cXMLResp`, `iTamMaxResp` |
| `fnDllDevSinOrigTrj` | Devolución sin referencia original, con lectura en el PIN pad. | `cImporte`, `cFactura`, `cXMLResp`, `iTamMaxResp` |
| `fnDllOperDevSinOrig` | Devolución sin referencia original, con tarjeta introducida manualmente. | `cTarjeta`, `cCaducidad`, `cImporte`, `cFactura`, `cXMLResp`, `iTamMaxResp` |
| `fnDllOperComContableTerminal` | La operación se hizo en otro terminal. | `cNumTerminal`, `cNumPedido`, `cRTSOriginal`, `cImporte`, `cFactura`, `cTipoOper`, `cXMLResp`, `iTamMaxResp` |

`cTipoOper` solo aparece en las dos funciones `ComContable` que sirven a las dos operaciones, y toma `DEVOLUCION` o `CONFIRMACION`. Las demás llevan la operación en su propio nombre.

| Parámetro | Tipo | Descripción |
| :--- | :--- | :--- |
| `cNumPedido` | String | Número de pedido de la operación original. El campo `pedido` se encuentra en todas las respuestas del TPVPC. Valor obligatorio en modo Transparente. |
| `cRTSOriginal` | String | Identificador RTS de la transacción original, del campo `identificadorRTS`. Valor opcional; en modo Transparente se recomienda su uso. |
| `cImporte` | String | Importe que se quiere devolver o confirmar, en formato `XXXXXXXXX.XX`. |
| `cFactura` | String | Campo suministrado por el comercio para asociar una descripción a la operación. El TPVPC no realiza ninguna validación sobre él. |
| `cTipoOper` | String | `DEVOLUCION` o `CONFIRMACION`. |
| `cTarjeta` / `cCaducidad` | String | Número de tarjeta y caducidad, solo en la devolución con entrada manual. |
| `cNumTerminal` | String | Terminal que ejecutó la operación original, solo en la variante entre terminales. |
| `cXMLResp` | Buffer | Buffer que recibe el resultado XML. |
| `iTamMaxResp` | Integer | Tamaño máximo del buffer de respuesta. |

## Pagos recurrentes

El modo recurrente es un interruptor de sesión, no un parámetro. Dos funciones lo activan y lo desactivan, y ninguna recibe argumentos:

| Función                    | Firma                             | Efecto                                                        |
| :------------------------- | :-------------------------------- | :------------------------------------------------------------ |
| `fnDllActivaRecurrente`    | `void fnDllActivaRecurrente()`    | Todas las operaciones a partir de aquí llevan token recurrente. |
| `fnDllDesActivaRecurrente` | `void fnDllDesActivaRecurrente()` | Las operaciones vuelven a ser pagos normales.                  |

`fnDllIniTpvpcLatente` desactiva el modo recurrente, así que hay que activarlo de nuevo después de cada inicialización.

El token llega en el elemento `<token>` de la respuesta XML del pago.

## Validación de autorización

Todas las operaciones financieras se consideran **AUTORIZADAS** solo si la respuesta XML contiene:

```xml
<estado>F</estado>
<resultado>Autorizada</resultado>
```

Cualquier otra combinación debe tratarse como **DENEGADA**, independientemente de los códigos numéricos o los valores de retorno de la biblioteca.