Saltar al contenido principal

Google Pay

Esta guía cubre el flujo de comunicación entre un Storefront Headless, la biblioteca Adyen Web y el VTEX Payment Provider Protocol (PPP) para pagos con Google Pay.

Dado que los storefronts headless controlan su propia interfaz, los desarrolladores deben orquestar manualmente la extracción de datos de VTEX, la renderización de los Componentes Adyen y las llamadas a la API del backend del Conector VTEX.

Variante de Google Pay

El método de pago de Google Pay configurado en Adyen debe ser la variante paywithgoogle. Consulte la guía de configuración de Google Pay para el proceso completo.

Extracción de credenciales de Google Pay

Dentro del appPayload devuelto por el gateway callback (ver Paso 2), extraiga las credenciales de Google Pay:

const googlePaymentMethods = paymentMethods.paymentMethods.find(
payments => payments.type === 'paywithgoogle'
)

const googleMerchantName = googlePaymentMethods.configuration.gatewayMerchantId
const googleMerchantId = googlePaymentMethods.configuration.merchantId

Use estos valores en el objeto paymentMethodsConfiguration al inicializar AdyenCheckout:

paymentMethodsConfiguration: {
googlepay: {
configuration: {
merchantName: merchantName,
merchantId: googleMerchantId,
gatewayMerchantId: googleMerchantName,
},
},
}

Paso 1: Guardar Información del Navegador

Al inicio del proceso de checkout (antes de que el usuario realice el pedido), su frontend debe enviar la información del navegador del comprador al conector backend. Estos datos son obligatorios para los flujos de 3D Secure (3DS).

Dado que los storefronts headless se ejecutan en un dominio diferente al de la API de VTEX (que bloquea las cookies de sesión entre dominios), debe pasar explícitamente el orderformId en el cuerpo de la solicitud.

Endpoint: POST https://{su-cuenta-vtex}.myvtex.com/api/io/_v3/api/save-checkout-info

Payload:

{
"browserInfo": {
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
"acceptHeader": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"language": "pt-PT",
"colorDepth": 32,
"screenHeight": 748,
"screenWidth": 1707,
"timeZoneOffset": -3,
"javaEnabled": false
},
"origin": "https://www.su-tienda-headless.com",
"orderformId": "10928nr01927rb6basdb61"
}
consejo

Capture los datos del navegador de forma dinámica usando los objetos navigator y window.screen del navegador.

Paso 2: Realizar el Pedido y Extraer el appPayload

Cuando el usuario haga clic en "Realizar Pedido", llame a la API estándar de Place Order de VTEX y, a continuación, llame a /api/checkout/pub/gatewayCallback/${orderGroupId} para obtener el appPayload. Este payload contiene todos los datos de configuración generados por el conector para inicializar los componentes Adyen.

Ejemplo de appPayload parseado:

{
"authorization": {},
"merchantName": "Test",
"paymentType": "googlepay",
"environment": "test",
"action": false,
"lineItems": [
{
"quantity": "1",
"taxPercentage": "0",
"productUrl": "",
"imageUrl": "",
"amountIncludingTax": "25",
"id": "123",
"description": "test"
}
],
"paymentMethods": {}
}

Paso 3: Manejo de Eventos del Componente Adyen

onSubmit

Se activa cuando el comprador envía los datos de pago.

Objetivo: iniciar la autorización del pago.

Endpoint: POST /api/io/_v/api/payment-authorization

Payload:

{
"paymentMethod": {},
"authorization": {}
}

Pase la respuesta de la API al componente usando component.handleAction(data) cuando sea necesario (ej: 3DS, redirects).

onChange

Se activa cuando el estado del componente cambia y se vuelve válido. Se usa para métodos de pago que no tienen un botón de submit explícito.

Endpoint: POST /api/io/_v/api/payment-authorization

Payload:

{
"paymentMethod": {},
"authorization": {}
}

Gestione la respuesta con component.handleAction(data).

onAdditionalDetails

Se activa cuando Adyen requiere información adicional (ej: autenticación 3D Secure).

Objetivo: completar el paso de autenticación del pago.

Endpoint: POST /api/io/_v/api/payment-details

Payload:

{
...state.data,
...authorization
}

Según la respuesta, resuelva el flujo de pago (éxito o fallo).

Polling de Estado del Pago

Llame a este endpoint en intervalos (ej: cada 5 segundos) mientras el estado esté pendiente.

Endpoint: POST /api/io/_v/api/payment-status

Payload:

{
"paymentId": "identificador del pago"
}

Trate los siguientes estados como exitosos:

  • Authorised
  • Received
  • Pending (según su lógica de negocio)

Cualquier otro estado debe tratarse como un fallo o rechazo.

Paso 4: Manejo de 3DS y Redirects Externos

Cuando un usuario pasa por un desafío 3D Secure o usa una billetera externa, es redirigido fuera de su storefront. Tras la autenticación, el Gateway de Pagos de VTEX emite un redirect 302 fijo hacia:

/checkout/orderPlaced/?og={orderGroup}

Su aplicación headless debe implementar una ruta en /checkout/orderPlaced. Esta página debe:

  1. Capturar el parámetro og (Order Group) de la URL.
  2. Obtener los detalles del pedido usando la API de Orders de VTEX (si es necesario).
  3. Mostrar su UI personalizada de "Confirmación de Pedido".
peligro

Si no crea esta ruta, los usuarios que regresen de validaciones 3DS encontrarán un error 404 en su storefront headless.