> For the complete documentation index, see [llms.txt](https://docs.payments.thalescloud.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.payments.thalescloud.io/classic-push-provisioning/es/casos-de-uso/ver-y-controlar/autenticacion-en-la-aplicacion/google-y-samsung-pay.md).

# Google y Samsung Pay

#### Flujo ID\&V para Google Pay <a href="#idv-flow-for-google-pay" id="idv-flow-for-google-pay"></a>

La figura siguiente muestra el flujo ID\&V app-a-app de Google Pay, donde Google Pay llama a la aplicación del emisor ("App del banco").

<figure><img src="/files/9fb92558baa11276f32a984d316a936fc46283fb" alt=""><figcaption></figcaption></figure>

**Paso 1: Elegir opción de ID\&V de la app**

Se solicita al usuario final que seleccione el método de autenticación ID\&V dentro de la billetera Google Pay. El usuario final selecciona "Iniciar sesión en la app del banco".

**Paso 2: Iniciar sesión en la aplicación del emisor**

El usuario final utiliza sus credenciales de la app del banco para iniciar sesión.

**Paso 3: Interfaz de la aplicación del emisor**

La app del banco muestra los últimos cuatro dígitos del PAN de la tarjeta añadida a Google Pay. El usuario final selecciona **Siguiente** para activar la tarjeta en Google Pay.

**Paso 4: Pantalla de éxito**

Una pantalla de éxito muestra el estado de activación en Google Pay. Esta pantalla incluye un botón que devuelve al usuario final a Google Pay.

#### Configuración TSP del esquema <a href="#scheme-tsp-configuration-1" id="scheme-tsp-configuration-1"></a>

Para obtener instrucciones completas de Google, consulte la [Configuración TSP](https://developers.google.com/pay/issuers/tsp-integration/app-to-app-idv#tsp_settings).

Los emisores deben proporcionar los siguientes parámetros a sus TSP. Google Pay recibe estos parámetros de los TSP durante la Tokenización y los utiliza para llamar a su aplicación de emisor.

| PARÁMETRO          | EJEMPLO                                   | DESCRIPCIÓN                                                                                                                                                                                                                                                                                                                                                                        |
| ------------------ | ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Nombre del paquete | `com.example.mybank`                      | El nombre del paquete (applicationId) identifica la app móvil del emisor a la que Google Pay debe llamar al invocar el [intent](https://developer.android.com/reference/android/content/Intent) para iniciar el flujo app a app. Si la app no está instalada en el dispositivo móvil del titular de la tarjeta, se pedirá al usuario final que la instale desde Google Play Store. |
| Acción             | `com.example.mybank.action.ACTIVATE_CARD` | Al llamar a la app móvil del emisor, la app Google Pay crea un intent explícito. La acción debe proporcionarse en su forma totalmente calificada, incluyendo el nombre del paquete. Además, la acción debe ser específica para su uso en la activación de tokens.                                                                                                                  |
| Texto extra        |                                           | Este parámetro se usa para pasar datos adicionales que se incluirán en el intent. Normalmente es una estructura JSON codificada en Base64. El valor de esta cadena es opaco para Google y se proporcionará tal cual en el campo estándar EXTRA\_TEXT.                                                                                                                              |

#### Flujo de desarrollo de la app <a href="#app-development-flow" id="app-development-flow"></a>

Cuando un usuario final selecciona el método app-a-app para verificar su identidad, la aplicación del emisor debe:

1. Recibir el Intent desde Google/Samsung Wallet.
2. Autenticar al titular de la tarjeta.
3. Activar el token.
4. Devolver al usuario final a Google Wallet llamando a `activity.setResult(RESULT_OK, ...)`.

**Recibir el intent**

Cuando un usuario final elige verificar su identidad usando la aplicación del emisor, Google/Samsung Wallet llama a la aplicación del emisor usando el nombre del paquete, la acción y `EXTRA_TEXT` proporcionados a Google/Samsung Pay a través del TSP. Para recibir el intent desde Google Pay, el emisor debe actualizar su archivo manifest de la aplicación y crear una actividad para activar el token.

**Actualizar el archivo manifest de Android**

Los emisores deben actualizar el archivo manifest de Android en sus aplicaciones de emisor para manejar la acción de modo que Google Wallet pueda llamarla durante el flujo app-a-app.

Para actualizar el archivo manifest y registrar la acción y la actividad para manejar la redirección de la app:

```
<activity android:name=".CardActivationActivity">
    <!-- Esta actividad maneja la acción App To App ACTIVATE_CARD -->
    <intent-filter>
        <action android:name="com.example.mybank.action.ACTIVATE_CARD"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>
```

**Actividad de activación del token**

Para completar la activación, la aplicación del emisor debe iniciar una actividad que realice la activación del token usando los parámetros de activación pasados en el `Intent`.

```java
/*
 * Dentro de la app móvil del emisor AppToAppActivity (CardActivationActivity)
 * biblioteca extra: com.fasterxml.jackson.core:jackson-core & com.fasterxml.jackson.core:jackson-databind
 */

import android.util.Base64;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

/*
    * Después de recibir el intent, la aplicación debe usar la API Activity.getCallingPackage() para
    * validar que la solicitud proviene de Google Pay como sigue:
    */
// Validar que el llamante es Google Wallet (Google Play Services)
if ("com.google.android.gms".equals(getCallingPackage())) {
    // Continuar con la activación del token
} else {
    // Abortara la activación del token: manejar el error
}

String data = getIntent().getStringExtra(Intent.EXTRA_TEXT);

// Analizar base64 para recuperar los parámetros de activación como un objeto JSON en una cadena
byte[] decodedDataBytes = Base64.decode(data, Base64.DEFAULT);
String decodedData = new String(decodedDataBytes, StandardCharsets.UTF_8);

// Leer la cadena JSON usando jackson
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(decodedData);

String tokenId = null;
String scheme = CardScheme.VISA.getScheme();
String panLast4 = null;
String tokenRequestorId = "";

if (node.get("tokenReferenceID") != null) { // Esquema VISA
    // Para VISA -> tokenReferenceID : tokenId
    tokenId = node.get("tokenReferenceID").asText(); //VISA
    panLast4 = node.get("panLast4").asText(); //VISA

    // tokenRequestorId -> Para Google Pay o "40010043095" para Samsung Pay - relevante solo en caso de que el ESQUEMA sea VISA, para MASTERCARD poner cadena vacía
    tokenRequestorId = node.get("tokenRequestorID").asText(); //VISA

} else { // MASTERCARD
    // Para MasterCard -> tokenUniqueReference : D1 -> tokenId
    tokenId = node.get("tokenUniqueReference").asText(); //MasterCard
    panLast4 = node.get("accountPanSuffix").asText(); //MasterCard
    scheme = CardScheme.MASTERCARD.getScheme();
}

String authorizationCode = "<JWT>"; // proporcionar el valor JWT relacionado con la tarjeta concreta, recuperado desde el backend del emisor

// Nota: La aplicación debe mostrar panLast4 como identificación de la tarjeta.

TPCManager.getInstance().getTSHProxy().updateTokenState(tokenId,
        tokenRequestorId,
        scheme,
        authorizationCode,
        TokenAction.ACTIVATE,
        new TPCSDKListener<Boolean>() {
            @Override
            public void onStart() {
                // al iniciar
            }

            @Override
            public void onSuccess(TPCResult<Boolean> result) {
                Log.i(TAG, "Estado del token actualizado, tarjeta activada");
                Boolean status = result.getResult();

                // TODO: actualizar la IU para el nuevo estado
            }

            @Override
            public void onError(TPCSDKException exception) {
                Log.e("TAG", "Error en la solicitud updateTokenState = " + exception.getMessage());
            }
        });
```

#### Identificación de la tarjeta y del token <a href="#card-and-token-identification-1" id="card-and-token-identification-1"></a>

Cuando Google Pay activa la aplicación del emisor, proporciona una cadena codificada en Base64 llamada `EXTRA_TEXT` en el [Configuración TSP](https://developers.google.com/pay/issuers/tsp-integration/app-to-app-idv#tsp_settings).

La aplicación del emisor debe decodificar la cadena Base64 para recuperar los detalles del token requeridos para la activación. El formato depende del esquema utilizado.

El siguiente ejemplo muestra el objeto JSON encapsulado en la `EXTRA_TEXT` para Visa y Mastercard:

> <i class="fa-exclamation-circle">:exclamation-circle:</i>
>
> #### Precaución <a href="#caution" id="caution"></a>
>
> Estos ejemplos JSON se proporcionan tal cual. Usted es responsable de usar las especificaciones de esquema más recientes. Thales no se responsabiliza de los cambios que los esquemas puedan introducir en los objetos JSON siguientes.

Un ejemplo del esquema Visa:

```json
{
"panReferenceID ":"V-3815023863409817870482",
"tokenRequestorID":"42301999123",
"tokenReferenceID":"DNITHE381502386342002358",
"panLast4":"1234",
"deviceID":"DEiOiJBMjU2R_0NNS1-ciLCJiI",
"walletAccountID":"AiOiJBMjU-2_R0NNS1ciLCJiI6"
}
```

Un ejemplo del esquema Mastercard:

```json
{
"paymentAppProviderId": "123456789",
"paymentAppInstanceId": "123456789",
"tokenUniqueReference": "DWSPMC000000000fcb2f4136b2f4136a0532d2f4136a0532",
"accountPanSuffix": "6789",
"accountExpiry": "1018"
}
```

#### Nota <a href="#note-2" id="note-2"></a>

El `tokenReferenceID` y `tokenUniqueReference` corresponden al `ID de token` en el TSP. Puede usar estos IDs para activar el token. `panLast4` y `accountPanSuffix` son los últimos cuatro dígitos del PAN que se tokenizó. Puede usar estos valores para recuperar el arte de la tarjeta y mostrarlo al usuario final durante la solicitud de autenticación.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.payments.thalescloud.io/classic-push-provisioning/es/casos-de-uso/ver-y-controlar/autenticacion-en-la-aplicacion/google-y-samsung-pay.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
