# Google Pay

* Web
* Native Android App

## Integración Web[​](#integración-web "Enlace directo al Integración Web")

Puedes empezar a aceptar pagos con Google Pay en la Web usando la [Página de pago alojada](https://docs.monei.com/es/es/integrations/use-prebuilt-payment-page/.md) o el [Componente Payment Request](https://docs.monei.com/es/es/monei-js/reference/.md#componente-paymentrequest). No se necesita ninguna configuración adicional.

Nuestro [Componente Payment Request](https://docs.monei.com/es/es/monei-js/reference/.md#componente-paymentrequest) te ofrece una única integración para Apple Pay y Google Pay. Los clientes ven un botón de Google Pay o de Apple Pay, según qué combinación de dispositivo y navegador sea compatible.

Si prefieres integrar directamente contra la API de Google Pay, sigue la [guía de integración directa con la API](#integraci%C3%B3n-directa-con-la-api) que se muestra a continuación.

### Antes de empezar[​](#antes-de-empezar "Enlace directo al Antes de empezar")

Para aceptar pagos con Google Pay necesitas tener al menos un procesador de tarjetas configurado.

Para configurar los procesadores de tarjetas ve a [MONEI Dashboard → Ajustes → Métodos de pago → Pagos con tarjeta](https://dashboard.monei.com/settings/payment-methods/card).

Antes de empezar, necesitas:

* Asegurarte de que tienes Google Pay habilitado en [MONEI Dashboard → Ajustes → Métodos de pago](https://dashboard.monei.com/settings/payment-methods).
* Añadir una tarjeta en Chrome.
* Servir tu aplicación a través de HTTPS. Esto es un requisito tanto en desarrollo como en producción. Una forma de ponerse en marcha es usar un servicio como [ngrok](https://ngrok.com/).

Para probar tu integración:

* Usa tu Account ID y clave de API del [modo de prueba](https://docs.monei.com/es/es/testing/.md).
* Puedes usar cualquier dato de tarjeta real; no se realizará ningún cobro en el modo de prueba (los datos de la tarjeta se sustituyen automáticamente por la tarjeta de prueba).
* Puedes comprobar el estado del pago de prueba en tu [MONEI Dashboard → Pagos](https://dashboard.monei.com/payments) (en modo de prueba).

Condiciones de Google Pay

Al integrar Google Pay™, aceptas la [Política de uso aceptable](https://payments.developers.google.com/terms/aup) de las APIs de Google Pay y los términos definidos en las [Condiciones del servicio](https://payments.developers.google.com/terms/sellertos) de la API de Google Pay.

### Checkout Exprés[​](#checkout-exprés "Enlace directo al Checkout Exprés")

Usa el checkout exprés para recopilar las direcciones de envío y facturación directamente en la hoja de pago de Google Pay. Consulta la [guía de Checkout Exprés](https://docs.monei.com/es/es/integrations/express-checkout/.md) para ver la configuración y los ejemplos.

### Integración directa con la API[​](#integración-directa-con-la-api "Enlace directo al Integración directa con la API")

Si prefieres integrar directamente contra la API de Google Pay, sigue las [instrucciones de Google](https://developers.google.com/pay/api/web/guides/setup).

Especifica la siguiente especificación de tokenización:

```
const tokenizationSpecification = {

  type: 'PAYMENT_GATEWAY',

  parameters: {

    gateway: 'monei',

    gatewayMerchantId: 'MONEI_ACCOUNT_ID'

  }

};
```

Usa el `merchantId` de MONEI de la API [Get PaymentMethods](https://docs.monei.com/es/es/apis/rest/payment-methods-get/.md) (`metadata.googlePay.merchantId`). No se requiere ningún registro adicional con Google.

```
paymentDataRequest.merchantInfo = {

  merchantName: 'Your Business Name',

  // Get merchantId from Get PaymentMethods API (metadata.googlePay.merchantId)

  // Test: 12345678901234567890, Production: BCR2DN6T37ENLJ3M

  merchantId: 'MONEI_GOOGLE_PAY_MERCHANT_ID'

};
```

Intercambia el token de Google Pay por un token de pago de MONEI que pueda usarse para confirmar el pago:

```
async function processPayment(paymentData) {

  // Encode Google Pay token as a base64 string

  const token = window.btoa(paymentData.paymentMethodData.tokenizationData.token);

  const result = await monei.api.createToken({

    paymentId: '{{payment_id}}',

    paymentMethod: {

      googlePay: {

        token: token

      }

    }

  });

  return moneiTokenHandler(result.paymentToken);

}
```

### Confirmar el pago[​](#confirmar-el-pago "Enlace directo al Confirmar el pago")

Una vez que hayas obtenido el token de pago de MONEI, puedes confirmar el pago usando el token.

```
async function moneiTokenHandler(token) {

  try {

    const result = await monei.confirmPayment({

      paymentId: '{{payment_id}}',

      paymentToken: token

    });

    // At this moment you can show a customer the payment result

    // But you should always rely on the result passed to the callback endpoint

    // on your server to update the order status

    console.log(result);

  } catch (error) {

    console.error(error);

  }

}
```

## Integración con app nativa de Android[​](#integración-con-app-nativa-de-android "Enlace directo al Integración con app nativa de Android")

Google Pay funciona de inmediato en Android sin necesidad de configuración adicional de certificados. Simplemente integra la API de Google Pay y usa MONEI como tu pasarela de pago.

### Requisitos previos[​](#requisitos-previos "Enlace directo al Requisitos previos")

* Google Pay habilitado en [MONEI Dashboard → Ajustes → Métodos de pago](https://dashboard.monei.com/settings/payment-methods)
* Al menos un procesador de tarjetas configurado en el [MONEI Dashboard](https://dashboard.monei.com/settings/payment-methods/card)
* Dispositivo Android o emulador con Google Play Services

### Añadir dependencias[​](#añadir-dependencias "Enlace directo al Añadir dependencias")

Añade la biblioteca de Google Pay al `build.gradle` de tu aplicación:

```
dependencies {

    implementation 'com.google.android.gms:play-services-wallet:19.2.1'

}
```

Añade los metadatos de la API de Google Pay a tu `AndroidManifest.xml`:

```
<meta-data

    android:name="com.google.android.gms.wallet.api.enabled"

    android:value="true" />
```

### Comprobar la disponibilidad de Google Pay[​](#comprobar-la-disponibilidad-de-google-pay "Enlace directo al Comprobar la disponibilidad de Google Pay")

Antes de mostrar el botón de Google Pay, verifica que esté disponible en el dispositivo:

```
val paymentsClient = Wallet.getPaymentsClient(

    this,

    Wallet.WalletOptions.Builder()

        .setEnvironment(WalletConstants.ENVIRONMENT_TEST) // Use ENVIRONMENT_PRODUCTION for live

        .build()

)



val isReadyToPayRequest = IsReadyToPayRequest.fromJson("""

    {

        "apiVersion": 2,

        "apiVersionMinor": 0,

        "allowedPaymentMethods": [{

            "type": "CARD",

            "parameters": {

                "allowedAuthMethods": ["PAN_ONLY", "CRYPTOGRAM_3DS"],

                "allowedCardNetworks": ["VISA", "MASTERCARD", "AMEX", "DISCOVER", "JCB"]

            }

        }]

    }

""")



paymentsClient.isReadyToPay(isReadyToPayRequest)

    .addOnCompleteListener { task ->

        if (task.isSuccessful) {

            // Show Google Pay button

        }

    }
```

### Configurar la solicitud de pago[​](#configurar-la-solicitud-de-pago "Enlace directo al Configurar la solicitud de pago")

Crea una solicitud de pago con MONEI como pasarela. Usa el `merchantId` de la API [Get PaymentMethods](https://docs.monei.com/es/es/apis/rest/payment-methods-get/.md) (`metadata.googlePay.merchantId`). No se requiere ningún registro adicional con Google:

```
val paymentDataRequest = PaymentDataRequest.fromJson("""

    {

        "apiVersion": 2,

        "apiVersionMinor": 0,

        "allowedPaymentMethods": [{

            "type": "CARD",

            "parameters": {

                "allowedAuthMethods": ["PAN_ONLY", "CRYPTOGRAM_3DS"],

                "allowedCardNetworks": ["VISA", "MASTERCARD", "AMEX", "DISCOVER", "JCB"]

            },

            "tokenizationSpecification": {

                "type": "PAYMENT_GATEWAY",

                "parameters": {

                    "gateway": "monei",

                    "gatewayMerchantId": "YOUR_MONEI_ACCOUNT_ID"

                }

            }

        }],

        "merchantInfo": {

            "merchantName": "Your Store Name",

            "merchantId": "MONEI_GOOGLE_PAY_MERCHANT_ID"

        },

        "transactionInfo": {

            "totalPrice": "10.00",

            "totalPriceStatus": "FINAL",

            "currencyCode": "EUR",

            "countryCode": "ES"

        }

    }

""")
```

### Iniciar Google Pay[​](#iniciar-google-pay "Enlace directo al Iniciar Google Pay")

Inicia la hoja de pago de Google Pay cuando el usuario pulsa el botón:

```
private val googlePayLauncher = registerForActivityResult(

    ActivityResultContracts.StartActivityForResult()

) { result ->

    when (result.resultCode) {

        Activity.RESULT_OK -> {

            result.data?.let { intent ->

                val paymentData = PaymentData.getFromIntent(intent)

                handlePaymentSuccess(paymentData)

            }

        }

        Activity.RESULT_CANCELED -> {

            // User cancelled

        }

        AutoResolveHelper.RESULT_ERROR -> {

            // Handle error

        }

    }

}



fun requestPayment() {

    val task = paymentsClient.loadPaymentData(paymentDataRequest)

    AutoResolveHelper.resolveTask(task, this, GOOGLE_PAY_REQUEST_CODE)

}
```

### Procesar el pago[​](#procesar-el-pago "Enlace directo al Procesar el pago")

Extrae el token de los datos del pago y envíalo a tu backend:

```
private fun handlePaymentSuccess(paymentData: PaymentData?) {

    val paymentInfo = paymentData?.toJson() ?: return

    val json = JSONObject(paymentInfo)



    // Extract the Google Pay token

    val token = json

        .getJSONObject("paymentMethodData")

        .getJSONObject("tokenizationData")

        .getString("token")



    // Base64 encode the token

    val encodedToken = Base64.encodeToString(token.toByteArray(), Base64.NO_WRAP)



    // Send to your backend to create MONEI payment token and confirm payment

    sendToBackend(encodedToken)

}
```

### Integración con el backend[​](#integración-con-el-backend "Enlace directo al Integración con el backend")

En tu backend, intercambia el token de Google Pay por un token de pago de MONEI:

```
# 1. Create a payment

curl -X POST https://api.monei.com/v1/payments \

  -H "Authorization: YOUR_API_KEY" \

  -H "Content-Type: application/json" \

  -d '{

    "amount": 1000,

    "currency": "EUR",

    "orderId": "order_123"

  }'



# 2. Create a token from Google Pay token

curl -X POST https://api.monei.com/v1/payment-tokens \

  -H "Authorization: YOUR_API_KEY" \

  -H "Content-Type: application/json" \

  -d '{

    "paymentId": "PAYMENT_ID_FROM_STEP_1",

    "paymentMethod": {

      "googlePay": {

        "token": "BASE64_ENCODED_GOOGLE_PAY_TOKEN"

      }

    }

  }'



# 3. Confirm the payment

curl -X POST https://api.monei.com/v1/payments/PAYMENT_ID/confirm \

  -H "Authorization: YOUR_API_KEY" \

  -H "Content-Type: application/json" \

  -d '{

    "paymentToken": "MONEI_TOKEN_FROM_STEP_2"

  }'
```

## Antes de pasar a producción[​](#antes-de-pasar-a-producción "Enlace directo al Antes de pasar a producción")

* Asegúrate de que estás usando el Account ID y la clave de API del [modo de producción (live)](https://docs.monei.com/es/es/testing/.md).
* Asegúrate de que tienes al menos un [procesador de tarjetas habilitado](https://dashboard.monei.com/settings/payment-methods/card).
* Asegúrate de que tienes Google Pay habilitado en [MONEI Dashboard → Ajustes → Métodos de pago](https://dashboard.monei.com/settings/payment-methods).
* Para la integración directa con la API, usa el `merchantId` de la API [Get PaymentMethods](https://docs.monei.com/es/es/apis/rest/payment-methods-get/.md).
