# Pago con QR Code

Este documento aplica al siguiente país:
Argentina |
---|

En el Web Checkout de Getnet, el comprador escanea un QR Code dinámico en lugar de ingresar los datos de la tarjeta. El código se muestra en la pantalla del Web Checkout. En el celular, el comprador también puede abrir la aplicación de la billetera mediante el deeplink. Luego, confirma el pago dentro de la billetera que prefiera. El QR Code se genera en pesos argentinos (ARS), con el importe de la compra informado en el payment intent.

Como la confirmación ocurre dentro de la billetera, el pago es **asíncrono**: el Web Checkout muestra el QR Code y mantiene la transacción pendiente hasta que la billetera confirma o rechaza el pago.
El resultado final se entrega al comercio mediante la [notificación por webhook](/es/web-checkout/first-steps-wbc/receive-webhook-wbc).

> ⚠️ **Importante**: El QR Code se muestra en la **pantalla del Web Checkout** (iFrame, Lightbox o Redirect). No existe una llamada de API específica para QR Code en la integración del comercio. Creas el payment intent como ya lo haces hoy, y el método empieza a aparecer como una opción más para el comprador.

## Cómo funciona

1. Tu back-end crea el payment intent de la manera habitual, sin especificar un método de pago.
2. El comprador abre el Web Checkout (iFrame, Lightbox o Redirect) y selecciona **QR Code** entre las opciones disponibles.
3. El Web Checkout genera y muestra un QR Code dinámico, con el importe y la moneda de la compra, y presenta el deeplink de la billetera para compradores en el celular.
4. El comprador escanea el QR Code (o abre el deeplink), elige el método de pago dentro de la billetera y confirma la operación.
5. Getnet recibe la confirmación de la billetera, actualiza el pago y envía la notificación por webhook a la URL configurada.

El flujo de extremo a extremo involucra al comprador, la pantalla del Web Checkout y la API de Getnet WebCheckout:

![](https://static-devportal-ux.sensedia-eng.com/Pagonxt/production/documentations/flow-qrcode-payments-wbc-1787834625417-s4mloubv.png)

## Requisitos

- Configurar tu Web Checkout mediante [Portal](/es/web-checkout/first-steps-wbc/configuration-by-portal) o mediante [API](/es/web-checkout/first-steps-wbc/configration-by-api) (según tu ubicación).
- Generar tu token siguiendo el documento de [Authentication](/es/web-checkout/first-steps-wbc/authentication-token-wbc).
- El producto `qr_code_checkout` habilitado y configurado para el comercio.
- Una URL de webhook configurada en la configuración técnica, ya que el resultado del pago con QR Code siempre se entrega de forma asíncrona.

<Callout type="info">

Si intentas configurar un producto que no está habilitado para el comercio, se muestra el siguiente mensaje:
```json
\{
   "code": "payment_method_not_enabled_in_seller",
   "message": "Payment method 'qr_code_checkout' is not enabled for this seller. Please enable it in seller configuration first.",
   "details": []
\}
```

</Callout>

## Crear el payment intent

No hay ningún atributo nuevo ni cambio de contrato para habilitar el QR Code: el payment intent es el mismo que ya usas para los demás métodos. Los siguientes atributos son los que afectan la manera en que se muestra el QR Code.

**Campos de la solicitud**
| Atributo | Tipo | Descripción | Ejemplo |
|---|---|---|---|
| `mode` | String | Modo del payment intent. Debe ser `instant` (predeterminado) para que el comprador pague a través de la pantalla del checkout. | `instant` |
| `payment.currency` | String | Código de moneda. El QR Code se procesa en pesos argentinos. | `ARS` |
| `payment.amount` | Integer | Importe de la compra en formato entero, donde los últimos 2 dígitos representan los centavos. | `1410000` |

**Ejemplo de solicitud**

```json
curl https://api-sbx.pre.globalgetnet.com/dpy/web-checkout/v1/payment-intent \
--request POST \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
--data '{
  "mode": "instant",
  "order_id": "PEDIDO_AR_97531",
  "payment": {
    "currency": "ARS",
    "amount": 1410000
  },
  "product": [
    {
      "product_type": "cash_carry",
      "title": "Bota de couro Look Fashion",
      "value": 1410000,
      "quantity": 1
    }
  ],
  "customer": {
    "customer_id": "cliente_ar_005",
    "first_name": "Laura",
    "last_name": "Fernández",
    "name": "Laura Fernández",
    "email": "laura.fernandez@example.com.ar",
    "document_type": "dni",
    "document_number": "45678912",
    "billing_address": {
      "street": "Av. Corrientes",
      "number": "1234",
      "city": "Buenos Aires",
      "state": "Buenos Aires",
      "country": "AR",
      "postal_code": "1043"
    }
  },
  "soft_descriptor": "Loja AR",
  "expires_at": "1h"
}'
```

#### Respuesta

Ejemplo de respuesta:

```json
{
  "payment_intent_id": "f6ee8bc7-229d-4d9d-bced-7dd2371a1f57",
  "trade_name": "GetNet Store",
  "redirect_url": "https://www.pre.globalgetnet.com/checkout/f6ee8bc7-229d-4d9d-bced-7dd2371a1f57"
}
```

Con el `payment_intent_id`, carga el Web Checkout usando la opción de integración que ya utilizas: iFrame, Lightbox o Redirect, como se describe en las opciones de integración.

## Experiencia del comprador

- El QR Code es **dinámico**: ya contiene el importe y la moneda de la compra, por lo que el comprador no ingresa ningún valor.
- En la computadora, el comprador escanea el código con la aplicación de la billetera. En el celular, el checkout también ofrece el deeplink que abre la billetera directamente.
- El comprador elige, dentro de la billetera, el método de pago (saldo en cuenta o tarjeta). También elige el plan de cuotas, si corresponde. Esta elección no depende de tu solicitud.
- Mientras el pago no se confirma, el checkout mantiene la pantalla de espera. Si el comprador abandona la pantalla, el pago permanece pendiente hasta que se confirme en la billetera o hasta que el payment intent expire.

## Ciclo de vida del estado

| Estado | Significado |
|---|---|
| `Approved` | La billetera confirmó el pago. El payment intent pasa a `paid` y se envía la notificación. |
| `Denied` | La billetera rechazó o canceló el pago, el QR Code se desactivó, o no fue posible generar el QR Code. |

## Conciliación

Concilia la notificación con tu pedido usando el `order_id` enviado al crear el payment intent, o usando el propio `payment_intent_id`. El `payment_id` recibido en la notificación es el identificador de la transacción para consultas y para las operaciones de cancelación y reembolso.

## Siguientes pasos

- Consulta los [métodos de pago admitidos](/es/web-checkout/first-steps-wbc/suported-payments-methods-wbc).