# Crear un pago

Esta guía explica cómo procesar una transacción estándar de **PAGO** (venta) utilizando **Get Central**. El pago realiza la autorización y la captura en una sola operación y representa el flujo más común para entornos de Punto de Venta (POS) atendidos.

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

TpvpcImplantado expone la misma biblioteca nativa a través de **C# (DLL)**, **Java (JAR)** y **JavaScript (Servicio Local)**. Las diferencias entre plataformas afectan solo a *cómo se invoca la función*, no a los parámetros, la lógica de negocio ni la validación de la respuesta.

## Requisitos

Antes de comenzar, asegúrate de cumplir con los siguientes requisitos previos:

* **Get Central** (TPVPC) instalado y disponible

  * Biblioteca nativa (DLL / JAR), o
  * Servicio Local (para integraciones JavaScript)
* **Credenciales del comercio** proporcionadas por la entidad:

  * `cComercio` (número de comercio)
  * `cTerminal` (número de terminal)
  * `cClaveFirma` (clave de firma)
* **PIN pad físico** conectado a la misma máquina que el TPVPC
* **Inicialización** exitosa a través de `fnDllIniTpvpcLatente`

> El PIN pad y el TPVPC **deben ejecutarse en la misma máquina**. No se soportan escenarios distribuidos ni remotos.

## Proceso de pago

El pago consta de los siguientes pasos lógicos:

1. Inicializar la comunicación con Get Central (una vez por ciclo de vida de la aplicación)
2. Ejecutar una operación **PAGO** utilizando el PIN pad
3. Analizar la respuesta XML para determinar si la transacción fue autorizada

Solo la **respuesta XML** determina el resultado financiero de la transacción.

## Paso 1: Ejecutar una operación PAGO

Para realizar una venta con lectura de tarjeta, invoca la función:

* `fnDllOperPinPad`

Esta función maneja la lectura de la tarjeta, la interacción con el cliente y la comunicación con el host.

Se requieren los siguientes parámetros:

| Parámetro     | Tipo    | Requerido | Descripción                                                                                 |
| ------------- | ------- | --------- | ------------------------------------------------------------------------------------------- |
| `cImporte`    | String  | Sí        | Importe de la transacción en formato `XXXXXXXXX.XX` (por ejemplo, `25.90`).                 |
| `cFactura`    | String  | Sí        | Referencia de compra. Este valor lo puede especificar el comercio para identificar la transacción.        |
| `cTipoOper`   | String  | Sí        | Tipo de operación. Debe establecerse en `PAGO`.                                             |
| `cXMLResp`    | Buffer  | Sí        | Buffer de salida que recibirá la respuesta XML.                                              |
| `iTamMaxResp` | Integer | Sí        | Tamaño máximo del buffer de respuesta. Valor mínimo recomendado: `8192`.                     |

Ejemplo en C#:

```csharp
StringBuilder xmlResponse = new StringBuilder(8192);

int result = fnDllOperPinPad(
    "25.90",       // cImporte
    "ORD-2023-001",// cFactura
    "PAGO",        // cTipoOper
    xmlResponse,
    xmlResponse.Capacity
);
```

Cuando se llama a la función:

* El PIN pad solicita la interacción al titular de la tarjeta
* La transacción se procesa
* La respuesta XML se escribe en `cXMLResp`

Un valor de retorno de `0` solo confirma que el **proceso se completó correctamente**.

## Paso 2: Validar la respuesta XML

Tras la ejecución, el TPVPC devuelve un documento XML que describe el resultado de la transacción. **Este XML es la única fuente autorizada** para determinar si el pago fue aprobado.

Una transacción debe considerarse **AUTORIZADA** **solo si** la respuesta XML contiene **ambos elementos**:

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

Si falta alguno de los elementos o contiene un valor diferente, la transacción debe tratarse como **DENEGADA**, incluso si la función devolvió `0`.

Este es un ejemplo de una respuesta autorizada:

```xml
<resultadoOperacion>
  <tipoPago>PAGO</tipoPago>
  <importe>25.90</importe>
  <moneda>978</moneda>
  <pedido>ORD-2023-001</pedido>
  <estado>F</estado>
  <resultado>Autorizada</resultado>
  <codigoRespuesta>0000</codigoRespuesta>
</resultadoOperacion>
```

## Próximos pasos

Después de completar una operación PAGO exitosa, puedes continuar con implementaciones adicionales:

* Para aprender a realizar una devolución o autorizar preautorizaciones, consulta las guías [Procesar una Devolución](/es/get-central/tpvpc-payment-guides/process-a-refund) y [Procesar una Preautorización](/es/get-central/tpvpc-payment-guides/process-a-pre-authorization).
* Para obtener detalles sobre cómo generar e imprimir recibos para tus clientes, consulta la documentación [Generar e Imprimir Recibos](/es/get-central/tpvpc-payment-guides/generate-and-print-receipts).