# Pago en un solo paso

Esta guía explica cómo ejecutar un pago en un solo paso con un TPV Integrado. Un pago en un solo paso completa la autorización y la captura en una sola operación mediante la función `Sale`.

## ¿Qué es un pago en un solo paso?

Un pago en un solo paso es una venta que autoriza y captura la transacción en una única solicitud. El sistema de automatización envía una solicitud `Sale` con los parámetros deseados; el TPV ejecuta el flujo de pago y devuelve una respuesta estructurada. El comportamiento es el mismo en USB (`CreateUsb`), red (`CreateHttp`) y nube (`CreateCloud`).

## Antes de comenzar

Antes de realizar un pago, asegúrate de que:

* Se haya creado un Connector con un modelo de conexión compatible
* El terminal se haya validado con `Polling`
* El Modo TPV Integrado esté activo

## Paso 1: Crea y ejecuta la solicitud de venta

Los pagos en un solo paso usan la operación `Sale`. Si no envías un parámetro, el TPV muestra la pantalla de entrada correspondiente.

| Parámetro | Tipo | Obligatorio | Descripción |
| :--- | :--- | :--- | :--- |
| `Amount` | Long | No | Valor en moneda local (por ejemplo, `10000` = 100,00). Si se omite, el TPV solicita el importe. |
| `SaleType` | Enum | No | Tipo de pago: `Card` o `QrCode`. Si se omite, el TPV solicita el tipo de pago. |
| `PrintOnPos` | Bool | No | Si es `true`, el recibo se imprime en el TPV; si es `false`, el contenido del recibo se devuelve en la respuesta. |
| `EmployeeId` | Int | No | Identificación del camarero u operador. |
| `Tip` | Long | No | Importe de la propina sumado al total de la transacción. |
| `Installments` | Int | No | Número de cuotas. |
| `SkipReceipt` | Bool | No | Si es `true`, omite la pantalla de recibo del cliente después de la transacción. |
| `SkipConfirmation` | Bool | No | Si es `true`, omite la pantalla que muestra el importe y los detalles de las cuotas para su confirmación. |
| `PlanId` | String | No | Plan de cuotas (por ejemplo, Argentina). Consulta [Planes de cuotas e identificadores de planes](/es/integrated-pos/reference/installment-plans). |
| `Interest` | Enum | No | Indica si el plan incluye intereses: `OnPosSelection`, `Interest` o `NoInterest`. |
| `OperationMode` | Enum | No | Quién calcula el importe final: `CalculatedGetnet` (lo calcula el terminal) o `CalculatedISV` (tu aplicación lo calcula y envía el importe final). |
| `CallerId` | String | No | ID generado por el sistema de automatización, necesario para consultar después la transacción con Check Status. Sin caracteres especiales ni Unicode. |

Este es un ejemplo de una solicitud de pago en un solo paso:

```csharp
var saleRequest = new SaleRequest
{
    Amount = 10000,
    SaleType = SaleType.Card
};

var saleResult = connector.SaleAsync(saleRequest);
```

Durante la ejecución, el TPV gestiona toda la interacción necesaria con el cliente (lectura de la tarjeta, PIN, confirmación, etc.).

## Paso 2: Gestiona la respuesta

Una respuesta exitosa incluye al menos los campos de abajo. Verifica siempre `Code` (por ejemplo, `0` = éxito) antes de continuar.

| Campo | Tipo | Descripción |
| :--- | :--- | :--- |
| `Code` | Int | Código de respuesta (consulta los anexos). `0` = éxito. |
| `Message` | String | Resultado de la operación (por ejemplo, `"APPROVED"`). |
| `CommerceCode` | String | Código de sucursal aprobado por Getnet. |
| `TerminalId` | String | Código del terminal TPV. |
| `AuthorizationCode` | String | Código de autorización de la transacción. |
| `Amount` | Long | Importe de la transacción en moneda local. |
| `OriginalAmount` | Long | Importe original de la transacción en moneda local. |
| `OperationMode` | Enum | Modo de operación seleccionado. Puede ser `CalculatedGetnet` o `CalculatedISV`. |
| `Last4Digits` | String | Los últimos cuatro dígitos de la tarjeta. |
| `CardBrand` | String | Marca de la tarjeta usada en la transacción (por ejemplo, `"Mastercard"`). |
| `CardType` | String | Tipo de tarjeta (por ejemplo, `"Credit"`). |
| `AccountingDate` | String | Fecha y hora de la transacción (GMT). |
| `RealDate` | Date | Fecha y hora de la transacción (local). |
| `SaleType` | Enum | Tipo de pago (por ejemplo, `"Card"`). |
| `ReceiptContent` | Dict | Líneas del recibo cuando `PrintOnPos` es `false`. |
| `PlanId`, `Interest`, `Installments` | — | Presentes cuando se usaron cuotas. |
| `CallerId` | String | ID generado por el sistema de automatización. |
| `CardBin` | String | Los primeros ocho dígitos de la tarjeta del cliente (máx. 8). |

Este es un ejemplo de una respuesta exitosa:

```json
{
  "Code": 0,
  "Message": "APPROVED",
  "CommerceCode": "0000081561",
  "TerminalId": "AR001P0B",
  "AuthorizationCode": "551437",
  "Amount": 10000,
  "OriginalAmount": 10000,
  "OperationMode": "CalculatedGetnet",
  "Last4Digits": "7167",
  "CardBrand": "master",
  "CardType": null,
  "AccountingDate": "2025-08-25T16:11:23.0000000+00:00",
  "RealDate": "2025-08-25T13:11:50.8570000-03:00",
  "SaleType": "Card",
  "ReceiptContent": null,
  "PlanId": "contado",
  "Interest": null,
  "Installments": 1,
  "CallerId": "123456-789000",
  "CardBin": "84168075"
}
```

## Siguientes pasos

* Para conocer los detalles de las cuotas, PlanId y las opciones de intereses, consulta la guía [Pagos en cuotas](/es/integrated-pos/pos-payment-guides/installment-payment).
* Para aceptar pagos con billeteras digitales, consulta la guía [Pago con código QR](/es/integrated-pos/pos-payment-guides/qr-code-payment).
* Si es tu primer contacto con el TPV Integrado, empieza por la guía [Inicio rápido](/es/integrated-pos/first-steps-pos/quickstart-integrated-pos).
* Para una referencia completa de todos los parámetros de Sale y campos de respuesta, consulta la [Referencia de métodos y parámetros](/es/integrated-pos/reference/methods-parameters).