# TPVPC: Integración Java

Las aplicaciones de Punto de Venta (POS) basadas en Java se integran con Get Central a través de un **wrapper Java nativo (JAR)** que expone las mismas funciones principales que la biblioteca nativa, al tiempo que abstrae los detalles de la comunicación serie de bajo nivel. Esta guía describe el modelo de integración Java soportado, las dependencias requeridas y la forma correcta de inicializar y ejecutar operaciones de pago en un entorno JVM.

Esta guía se aplica a **TpvpcImplantado**.

## Requisitos

Antes de comenzar, asegúrate de tener disponibles los siguientes componentes:

* **TpvpcImplantado.jar** (wrapper Java proporcionado con Get Central)
* Una **biblioteca de comunicación serie** soportada, dependiendo de tu entorno:

  * **jSSC** (recomendado para entornos Java modernos)
  * **RXTX** (opción heredada, requiere binarios nativos)
* Bibliotecas nativas disponibles en el library path de la JVM
* Un sistema operativo soportado con acceso al dispositivo PIN pad

En sistemas basados en Unix, el usuario que ejecuta la JVM debe tener permisos para acceder al dispositivo de puerto serie.

## Proceso de integración Java

La integración Java refleja la API nativa de TpvpcImplantado. Las solicitudes se ejecutan mediante llamadas a métodos fuertemente tipados, y **el XML se devuelve únicamente como respuesta**, nunca se envía como solicitud.

### Paso 1: Inicializar la comunicación

Antes de ejecutar cualquier transacción, el canal de comunicación debe inicializarse exactamente una vez durante el ciclo de vida de la aplicación.

#### Parámetros de inicialización

| Parámetro     | Tipo   | Requerido | Descripción                                                                                   |
| ------------- | ------ | --------- | --------------------------------------------------------------------------------------------- |
| `cComercio`   | String | Sí        | Número de comercio. La entidad facilita este dato.                        |
| `cTerminal`   | String | Sí        | Número de terminal. La entidad facilita este dato.                        |
| `cClaveFirma` | String | Sí        | Clave de firma del comercio. La entidad facilita este dato.              |
| `cConfPuerto` | String | No        | Parámetro opcional que indica la configuración de puerto. Déjalo en blanco para usar la local. |
| `cVersion`    | String | No        | Parámetro opcional que indica la versión de protocolo: `5.1`, `6.1` u `8.1`.        |

```java
import es.sermepa.TpvpcImplantado;

public class PaymentService {
    private TpvpcImplantado tpv;

    public void initialize() {
        tpv = new TpvpcImplantado();
        int result = tpv.fnDllIniTpvpcLatente(
            "99999999",
            "00000001",
            "CLAVE123456",
            "",
            ""
        );

        if (result != 0) {
            throw new IllegalStateException("Initialization failed: " + result);
        }
    }
}
```

Un valor de retorno de `0` indica que el canal de comunicación se ha inicializado correctamente.

### Paso 2: Ejecutar una operación de pago

Una vez inicializada, se puede ejecutar un pago estándar con tarjeta presente o una preautorización utilizando el PIN pad.

#### Parámetros de pago

| Parámetro     | Tipo   | Requerido | Descripción                                                         |
| ------------- | ------ | --------- | ------------------------------------------------------------------- |
| `cImporte`    | String | Sí        | Importe de la transacción en formato `XXXXXXXXX.XX`.                |
| `cFactura`    | String | Sí        | Referencia de compra. Este valor lo puede especificar el comercio.  |
| `cTipoOper`   | String | Sí        | Tipo de operación: `PAGO` o `PREAUTORIZACION`.                      |
| `iTamMaxResp` | int    | Sí        | Tamaño máximo del buffer de respuesta (mínimo 8192).                 |

```java
public String executePayment() {
    int bufferSize = 8192;
    String xmlResponse = tpv.fnDllOperPinPad(
        "1.00",
        "TEST0001",
        "PAGO",
        bufferSize
    );

    return xmlResponse;
}
```

El método devuelve una cadena XML que contiene el resultado de la transacción.

### Paso 3: Validar el resultado de la transacción

El código de retorno entero indica solo si la operación se ejecutó correctamente a nivel técnico. El resultado financiero debe determinarse analizando la respuesta XML.

Una transacción se considera **autorizada** solo si la respuesta contiene:

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

Cualquier otro resultado debe tratarse como una transacción denegada.

### Paso 4: Finalizar la comunicación

Cuando la aplicación ya no necesite realizar operaciones de pago, el canal de comunicación debe cerrarse para liberar los recursos del sistema.

```java
public void shutdown() {
    tpv.fnDllParaTpvpcLatente();
}
```

## Próximos pasos

Después de completar la integración en Java, puedes continuar con implementaciones adicionales:

* Para implementar devoluciones y confirmaciones, consulta la guía [Procesar una Devolución](/es/get-central/tpvpc-payment-guides/process-a-refund).
* Para obtener detalles sobre cómo generar e imprimir recibos conformes desde tu aplicación Java, consulta la documentación [Generar e Imprimir Recibos](/es/get-central/tpvpc-payment-guides/generate-and-print-receipts).
* Para gestionar tokens de tarjeta y modelos de suscripción, consulta la guía [Gestionar Pagos Recurrentes](/es/get-central/tpvpc-payment-guides/handle-recurring-payments).
* Para obtener un catálogo completo de los códigos de error de seguridad y los logs de diagnóstico, consulta la referencia de [Códigos de Resultado y Errores](/es/get-central/tpvpc-reference/result-codes-and-errors) y [Logs y Solución de Problemas](/es/get-central/tpvpc-reference/logs-and-troubleshooting).