# Procesar un pago

Esta guía detalla cómo implementar el flujo de pago estándar (Venta). En este flujo, envía una única petición a la API, y el terminal gestiona la interacción con el titular de la tarjeta.

Debido a que las interacciones con el terminal físico requieren tiempo, este proceso es **asíncrono**. Iniciarás el pago mediante una llamada directa a la API y recibirás el resultado final a través de una notificación de webhook.

## El ciclo de vida de la transacción

1. **Petición:** Tu servidor envía una petición `POST` al endpoint `/pago`.  
2. **Acuse de recibo:** La API devuelve un `200 OK` síncrono indicando que el terminal ha recibido el comando.  
3. **Interacción:** El terminal solicita al cliente que inserte su tarjeta y que introduzca su PIN.  
4. **Notificación:** Una vez que la transacción concluye (Aprobada, Denegada o Cancelada), la API envía un payload JSON a tu `urlNotificacion`.

## Paso 1: Enviar la petición de pago

Para iniciar una venta, envía una petición POST al endpoint `/pago`.

* **Endpoint de Test:** `https://tpvpc-i.redsys.es:27443/TPV_PC/services/rest/tpvpcwss/v1/pago`  
* **Endpoint de Producción:** `https://tpvpc.redsys.es/TPV_PC/services/rest/tpvpcwss/v1/pago`

### Payload de la petición

El payload debe incluir el importe, tu referencia interna de factura y la URL de notificación donde quieres recibir el resultado final.

```json
{
  "info": {
    "comercio": "777888991",
    "terminal": 1,
    "timestamp": "20250428 111217",
    "notificacion": {
      "urlNotificacion": "https://your-server.com/api/webhooks/payment-results",
      "correoNotificacion": "backup-email@merchant.com"
    },
    "datosOperacion": {
      "importe": "25.50",
      "factura": "ORD-2025-001"
    }
  },
  "signature": "YOUR_CALCULATED_SIGNATURE"
}
```

<Callout type="tip">

Asegúrate de que el `importe` esté formateado como `XXXXXXXXX.XX` (p. ej., `25.50` o `0.01`). No utilices comas.

</Callout>

## Paso 2: Gestionar la respuesta síncrona

Inmediatamente después de enviar la petición, la API devolverá una respuesta.

**Respuesta esperada:**

```json
{
  "info": {
    "resultado": {
      "codigo": "0"
    }
  },
  "signature": "SERVER_SIGNATURE"
}
```

* **`codigo: "0"`**: Éxito. El terminal está ahora procesando el pago.  
* **Cualquier otro código**: La petición ha fallado (p. ej., error de validación, terminal desconectado). Consulta la referencia del [Catálogo de códigos de error y denegación](/es/get-smart/get-smart-api-cloud/reference/error-and-denial-code-catalog).

<Callout type="warning">

NO entregues los bienes o servicios todavía. Un código de `0` aquí solo significa "Petición aceptada". **No** significa que el pago haya sido pagado o autorizado.

</Callout>

## Paso 3: Recibir la notificación asíncrona

Cuando el cliente finaliza (o cancela) la transacción, API Cloud envía una petición `POST` a tu `urlNotificacion`.

### Ejemplo de notificación de éxito

```json
{
  "info": {
    "comercio": "777888991",
    "terminal": 1,
    "timestamp": "20250428 111500",
    "datosRespuesta": {
      "tipoPago": "PAGO",
      "importe": "25.50",
      "moneda": "978",
      "factura": "ORD-2025-001",
      "resultado": "Autorizada",
      "codigoRespuesta": "998877",
      "estado": "F",
      "tarjetaClienteRecibo": "************1234",
      "marcaTarjeta": "1"
    }
  },
  "signature": "SERVER_SIGNATURE"
}
```

### Campos clave a validar

Debes inspeccionar campos específicos en `datosRespuesta` para confirmar el estado del pago:

| Campo | Valor para éxito | Descripción |
| :---- | :---- | :---- |
| `resultado` | `Autorizada` | Indica explícitamente que la transacción fue aprobada. |
| `estado` | `F` | Indica que la operación está "Finalizada" (Finalized). |
| `codigoRespuesta` | *(Código de autorización)* | El código de autorización del banco. Si la transacción fue denegada, contendrá un código de denegación (p. ej., `101`, `117`). |
| `importe` | *(Su importe)* | Verifica que el importe autorizado coincide con el importe que solicitaste. |

### Gestión de denegaciones y errores

Si el pago falla, la notificación reflejará el fallo:

* `resultado`: `Denegada`  
* `codigoRespuesta`: Un código de denegación (p. ej., `117` para PIN incorrecto).  
* `estado`: Podría ser `G` (Denegada), `A` (Cancelada) o `T` (Fallo técnico).

## Próximos pasos

* [**Configurar Webhooks y notificaciones**](/es/get-smart/get-smart-api-cloud/integration-guides/set-up-webhooks-and-notifications)**:** Guía detallada sobre cómo procesar y validar el payload de notificación.  
* [**Especificaciones de impresión de recibos**](/es/get-smart/get-smart-api-cloud/reference/receipt-printing-specifications)**:** Utiliza los datos de la notificación (`tarjetaClienteRecibo`, `marcaTarjeta`) para imprimir el recibo obligatorio conforme a la normativa.