# Pagos con Google Pay™

![](https://static-devportal-ux.sensedia-eng.com/Pagonxt/staging/documentations/resize-image-project-1772218139978-yi0ruxuo.png)

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

Acepta pagos a través de Google Pay™, la billetera digital de Google. El comprador paga con una tarjeta guardada en su cuenta de Google, y tu integración recibe un token de pago cifrado en lugar del número real de la tarjeta.

Esta guía te muestra cómo crear un payment intent, obtener el token de Google Pay en el frontend y enviar el pago a través de una única integración con la API de Web Checkout.

## Cómo funciona

Usa Google Pay cuando quieras ofrecer un checkout rápido y tokenizado a los compradores en Android y la web, sin que necesiten escribir los datos de la tarjeta. Características clave:

- **Sin ingreso de tarjeta**: el comprador paga con las tarjetas ya guardadas en su cuenta de Google.
- **Token cifrado**: el frontend obtiene un token de pago de la API de Google Pay y lo envía a Getnet. El número real de la tarjeta nunca se expone.
- **Autenticación nativa**: omite el flujo 3DS.
- **Sin validación de sesión previa**: Google Pay no requiere un paso de validación de sesión.
- **Procesamiento síncrono**: al enviar el pago, se devuelve el resultado (status / authorization_code) en la misma llamada.

El flujo completo involucra al comprador, tu frontend, tu backend y la API de Getnet Web Checkout:

![](https://static-devportal-ux.sensedia-eng.com/Pagonxt/production/images/google-diagram-wbc-1784580691506-uo0y6lgs.png)

## Requisitos

Antes de integrar, asegúrate de tener lo siguiente:

- El vendedor (`x-seller-id`) tiene **Google Pay habilitado**.
- Tu integración con la API de Google Pay en el frontend está configurada con el `gateway` y `gatewayMerchantId` correctos, para que Getnet pueda procesar el token.
- Genera tu token siguiendo el documento de [Authentication](/es/web-checkout/first-steps-wbc/authentication-token-wbc).
- El onboarding de dominio está completo para tu tipo de integración (ver más abajo).

### Onboarding técnico por tipo de integración

| Tipo de integración    | Registro de dominio|
|-------------------------|--------------------------------|
| **Link & Redirect API** | Usa el dominio de Getnet, no requiere registro del dominio del comercio.|
| **Iframe & Lightbox**   | El dominio del comercio difiere del dominio de Getnet. El comercio debe indicar su dominio en la configuración de Web Checkout, para que Getnet pueda registrarlo con Google. |

<Callout type="info">

Puedes configurar el tipo de checkout (Iframe & Lightbox) y las opciones que se aceptarán desde el Portal o por API. Sigue los pasos del documento para configurar por [Portal](/es/web-checkout/first-steps-wbc/configuration-by-portal) o por [API](/es/web-checkout/first-steps-wbc/configration-by-api).

</Callout>

## Paso 1: Crea el payment intent

Llama a la API de Web Checkout para crear un payment intent. Devuelve un `payment_intent_id` y una `redirect_url`.

Endpoint|
---|
`POST /payment-intent`|

**Campos obligatorios**
| Campo | Tipo | Descripción | Ejemplo |
|----------------------------------|----------|--------|----------------------------------------|
| `payment.currency`| String | Código de moneda. | `BRL`|
| `payment.amount`| Integer | Importe de la compra en formato entero, donde los últimos 2 dígitos representan los céntimos. Para países donde no aplican los céntimos, completa el importe con 2 ceros a la derecha. |`92500`|
| `customer.customer_id`| String | Se recomienda usar el número de documento del cliente, solo letras y números, sin caracteres especiales, separadores ni espacios.| `12345678912`  |
| `customer.first_name`| String | Nombre del cliente.| `John`  |
| `customer.last_name`| String | Apellido del cliente.| `Doe Smith`  |
| `customer.name`| String | Nombre completo del cliente.| `John Doe Smith`  |
| `customer.email`| String | Dirección de correo electrónico del cliente.| `customer@email.com.br`  |
| `customer.document_type`| String | Tipo de documento usado para identificar al cliente. | `CPF`  |
| `customer.document_number`| String | Número de documento usado para identificar al cliente.| `12345678912`  |
| `customer.billing_address.street`| String | Nombre de una calle.| `Av. Brasil`  |
| `customer.billing_address.number`| String | Número que identifica la posición de un edificio en una calle.| `1000`  |
| `customer.billing_address.country`| String | Código de país.| `BR` |
| `customer.billing_address.postal_code`| String | Código postal.| `90230060`  |

**Campos opcionales**
| Campo                          | Tipo    | Descripción                                                | Ejemplo                                    |
|------------------------------------|---------|--------------------------------------------------------------|--------------------------------------------|
| `configurations.3ds`               | boolean | Controla la autenticación 3D Secure.                         | `true` o `false`                          |
| `configurations.preauthorization`  | boolean | Indica si el pago es una preautorización.           | `true` o `false`                          |
| `configurations.card_verification` | boolean | Indica si se trata de un flujo de verificación de tarjeta.             | `true` o `false`                          |
| `configurations.success_url`       | string  | URL de redirección en caso de pago exitoso.                | `https://www.mystore.com/checkout/success` |
| `configurations.error_url`         | string  | URL de redirección en caso de error durante el pago.           | `https://www.mystore.com/checkout/error`   |
| `product`                          | array   | Ítems de la compra.                     | ---                                        |
| `soft_descriptor`                  | string  | Descripción del pago que aparece en el comprobante del cliente | `Loja BR`                                  |
| `expires_at`                       | string  | Vencimiento del payment intent.                                 | `3d4h15m`                                  |

#### Reglas de llenado de campos:

* El campo `expires_at` acepta un valor de duración (por ejemplo, 15m, 2h, 7d o 1d12h30m). Esta duración se aplica sin importar la zona horaria del comercio. La marca de tiempo de vencimiento que devuelve la API siempre tiene formato GMT+0 (UTC). Si **no se proporciona ningún valor**, el payment intent **no vence**.
* Cuando se proporcionan `success_url` y `error_url` en la solicitud del payment intent, estos valores anulan lo configurado en la configuración técnica del vendedor.

#### Ejemplo de solicitud:

```json
{
  "mode": "instant",
  "order_id": "ORDER_GPAY_BR_0001",
  "configurations": {
    "3ds": true,
    "preauthorization": false,
    "card_verification": false,
    "success_url": "https://www.mystore.com/checkout/success",
    "error_url": "https://www.mystore.com/checkout/error"
  },
  "payment": {
    "currency": "BRL",
    "amount": 92500
  },
  "product": [
    {
      "product_type": "service",
      "title": "Plano Pro",
      "description": "Assinatura 1 mes",
      "value": 92500,
      "quantity": 1
    }
  ],
  "customer": {
    "customer_id": "customer_br_005",
    "first_name": "Jose",
    "last_name": "da Silva",
    "name": "Jose da Silva",
    "email": "customer@email.com",
    "document_type": "CPF",
    "document_number": "12345678909",
    "phone_number": "5511999998888",
    "checked_email": true,
    "billing_address": {
      "street": "Av. Paulista",
      "number": "1000",
      "complement": "Cj 101",
      "district": "Bela Vista",
      "city": "Sao Paulo",
      "state": "SP",
      "country": "BR",
      "postal_code": "01310100"
    }
  },
  "soft_descriptor": "Loja BR",
  "expires_at": "1h"
}

```

## Paso 2: Redirige y obtén el token

Redirige al comprador a la `redirect_url`, o muestra la pantalla de checkout incrustada donde elige Google Pay. El comprador se autentica en su dispositivo Android o navegador (sin pasar por 3DS).

## Paso 3: Confirma el resultado

Google Pay es síncrono, la llamada devuelve `status` y `authorization_code`. Confirma también el resultado mediante webhook a `notification.url` antes de liberar el pedido.

> El estado del webhook puede ser **Authorized** o **Denied**.

#### Respuesta de webhook aprobada

Ejemplo de respuesta:

```json
{
  "payment_intent_id": "ee0b7dd5-92da-4ef4-ad3b-0ba369ad0efe",
  "checkout_id": "5ab15d1e-ea8b-4560-84d2-fb3d02179537",
  "order_id": "ORDER_GPAY_BR_0001",
  "mode": "instant",
  "seller": {
    "id": "716d899e-9091-4577-a12f-8a77ec4d1e0b",
    "trade_name": "GetNet Shop",
    "merchant_document": "00000000000",
    "settings": { "notification_url_configured": true }
  },
  "customer": {
    "customer_id": "customer_br_005",
    "name": "Jose da Silva",
    "email": "customer@email.com",
    "document_type": "CPF",
    "document_number": "12345678909"
  },
  "payment": {
    "method": "google_pay",
    "amount": 92500,
    "currency": "BRL",
    "result": {
      "payment_id": "9c8f0e2a-1b3d-4c5e-8a7f-2d1e0b9c8a7d",
      "status": "Authorized",
      "authorization_code": "123456",
      "transaction_datetime": "2026-07-08T12:00:00.000Z"
    }
  },
  "created_at": "2026-07-08T11:59:30.000Z",
  "updated_at": "2026-07-08T12:00:00.000Z"
}
```

#### Respuesta de webhook denegada

Ejemplo de respuesta:

```json
{
  "payment_intent_id": "ee0b7dd5-92da-4ef4-ad3b-0ba369ad0efe",
  "checkout_id": "5ab15d1e-ea8b-4560-84d2-fb3d02179537",
  "order_id": "ORDER_GPAY_BR_0001",
  "mode": "instant",
  "payment": {
    "method": "google_pay",
    "amount": 92500,
    "currency": "BRL",
    "result": {
      "payment_id": "9c8f0e2a-1b3d-4c5e-8a7f-2d1e0b9c8a7d",
      "status": "Denied",
      "transaction_datetime": "2026-07-08T12:01:00.000Z",
      "return_message": "Card not accepted for this operation"
    }
  },
  "created_at": "2026-07-08T11:59:30.000Z",
  "updated_at": "2026-07-08T12:01:00.000Z"
}
```