> 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/nfc-wallet-sdk-android/es/implement-nfc-wallet/tokenize-a-card/digitize-a-card/yellow-flow-digitization.md).

# Digitalización del flujo amarillo

## Descripción general

El flujo amarillo es un **Tokenización** flujo en el que el **backend del emisor** aprueba la Tokenización con autenticación escalonada (**ID\&V**).

Este flujo es común cuando el SDK de Billetera NFC está integrado en una **aplicación de billetera digital** que admite tarjetas de múltiples emisores.

En este flujo, el **usuario final** completa ID\&V antes de que la Tokenización pueda completarse.

## Experiencia del usuario

Ver [Experiencia del usuario del flujo amarillo](/nfc-wallet-sdk-android/es/implement-nfc-wallet/tokenize-a-card.md#yellow-flow).

## Diagrama de secuencia

<figure><img src="/files/87352136f9857bed4ddb523ce84fbc6eafd79149" alt=""><figcaption><p>Secuencia de digitalización del flujo amarillo.</p></figcaption></figure>

## Integrar SDK

Después de que usted [Verifique la elegibilidad de la tarjeta](/nfc-wallet-sdk-android/es/implement-nfc-wallet/tokenize-a-card/check-card-eligibility.md), implemente `MGDigitizationListener` para rastrear el progreso de la digitalización. Luego:

1. Llame a `MGCardEnrollmentService.digitizeCard(...)`.

   Proporcione una referencia a su `MGDigitizationListener`.
2. Si el backend del emisor aprueba la Tokenización con autenticación escalonada (flujo amarillo), el SDK desencadena estos callbacks:
   1. `onCPSActivationCodeAcquired`

      Usted recibe el `activationCode` para iniciar el aprovisionamiento seguro.

      Ver [Iniciar el aprovisionamiento](/nfc-wallet-sdk-android/es/implement-nfc-wallet/tokenize-a-card/trigger-provisioning.md).
   2. `onSelectIDVMethod`: Reciba los métodos de ID\&V para mostrar al usuario final. Ver [Listar y seleccionar un método de ID\&V](/nfc-wallet-sdk-android/es/implement-nfc-wallet/tokenize-a-card/digitize-a-card/yellow-flow-digitization.md#list-and-select-an-id-and-v-method).
   3. `onActivationRequired`: Se desencadena solo si el método de ID\&V seleccionado requiere activación (por ejemplo, OTP).
   4. `onComplete`: Los pasos de digitalización se completan correctamente.

      si los métodos de ID\&V son:

      1. **cell\_phone**, **email** u **app\_to\_app con criptograma**: La Tokenización se completa
      2. **website**, **customer\_service**, o **app\_to\_app sin criptograma**: La Tokenización se completa después de que usted [procese las notificaciones CPS](/nfc-wallet-sdk-android/es/get-started/configuration/5.-push-notifications/handle-push-notifications.md#process-cps-notifications-digital-card-operations).

{% hint style="info" %}
Para las **website**, **customer\_service**, o **app\_to\_app sin criptograma** métodos de ID\&V, el emisor activa el token usando la API del emisor del TSP.

En este caso, el aprovisionamiento se completa solo después de que usted [procese las notificaciones CPS](/nfc-wallet-sdk-android/es/get-started/configuration/5.-push-notifications/handle-push-notifications.md#process-cps-notifications-digital-card-operations).
{% endhint %}

### Listar y seleccionar un método de ID\&V

En `MGDigitizationListener.onSelectIDVMethod`, use `IDVMethodSelector` para listar los métodos de ID\&V disponibles.

`IDVMethodSelector.getIdvMethodList()` devuelve un arreglo de `IDVMethod` con estos campos:

* `id`: Use este valor al seleccionar el método.
* `type`: El tipo de ID\&V (por ejemplo, OTP por SMS, OTP por correo electrónico, o verificación mediante **aplicación del emisor**).
* `value`: El valor para mostrar. El contenido depende de `type`.
* `isOTPRequired`: Indica si el SDK desencadenará `onActivationRequired`.

NFC Wallet admite estos valores de ID\&V: `type` valores:

* **cell\_phone**

  ID\&V usando un OTP enviado por SMS.

  Use `value` para mostrar el número de teléfono enmascarado donde se enviará el OTP.
* **email**

  ID\&V usando un OTP enviado por correo electrónico.

  Use `value` para mostrar la dirección de correo electrónico enmascarada donde se enviará el OTP.
* **customer\_service**

  ID\&V usando una llamada al servicio de atención al cliente del emisor.

  Use `value` para mostrar el número de teléfono al que el usuario final debe llamar.
* **website**

  El usuario final completa ID\&V en el sitio web del emisor.

  Use `value` para obtener la URL del sitio web.
* **app\_to\_app**

  El **aplicación de billetera digital** redirige al usuario final al **aplicación del emisor**.

  Use `value` para mostrar el nombre de la aplicación del emisor.

Cuando el usuario final selecciona un método, capture su `id` y llame a `IDVMethodSelector.select(...)` para notificar al backend de NFC Wallet.

<pre class="language-java" data-expandable="true"><code class="lang-java">// Referencia del idvMethodSelector
IDVMethodSelector idvMethodSelector = null;

<strong>// Métodos de la interfaz MGDigitizationListener 
</strong><strong>@Override
</strong>public void onSelectIDVMethod(final IDVMethodSelector idvMethodSelector) {
    if (idvMethodSelector.getIdvMethodList().length == 0) {
        // Registrar error
    }
    
    this.idvMethodSelector = idvMethodSelector;
    
    displayIdvMethods();
}

// Método para construir la interfaz de diálogo para mostrar posibles ID&#x26;V...
<strong>public void displayIdvMethods() {
</strong>    // ... así que lista de posibles ID&#x26;V usando idvMethodSelector
    for (int i = 0; i &#x3C; idvMethodSelector.getIdvMethodList().length; i++) {
        IDVMethod idvMethod = idvMethodSelector.getIdvMethodList()[i];
        String id = idvMethod.getId();
        String type = idvMethod.getType();
        String value = idvMethod.getValue();
        boolean isOtpRequired = idvMethod.isOtpRequired();
        ...
    }
    ...
}

// Método que debe llamarse desde la UI, cuando el método de ID&#x26;V es seleccionado por el usuario final
// Proporcione el id del idvMethod seleccionado
public void selectIdvMethod( int idvSelectedMethodId) {
    idvMethodSelector.select( idvSelectedMethodId );
}
</code></pre>

### ID\&V con OTP

Si el usuario final selecciona **cell\_phone** u **email**, el TSP genera un OTP. Luego el TSP solicita al emisor que envíe el OTP por SMS o correo electrónico.

El SDK de Billetera NFC desencadena `MGDigitizationListener.onActivationRequired` con `PendingCardActivation.getState()` establecido en `OTP_NEEDED`.

Su **aplicación de billetera digital** debe mostrar una interfaz de ingreso de OTP.

Después de que el usuario final ingrese el OTP, llame a `PendingCardActivation.activate(...)` y proporcione el OTP.

Si el OTP es válido, el SDK desencadena `MGDigitizationListener.onComplete` callback.

{% hint style="info" %}
**Implemente la interfaz de ingreso de OTP**

El SDK de Billetera NFC no proporciona una interfaz de ingreso de OTP. Implemente y personalice la UI en su **aplicación de billetera digital**.
{% endhint %}

<pre class="language-java" data-expandable="true"><code class="lang-java">// referencia a su Card Digitization listener
MyDigitizationListener digitizationListener = new MyDigitizationListener();

// Referencia de la activación pendiente de la tarjeta
PendingCardActivation pendingCardActivation = null;

<strong>// Métodos de la interfaz MGDigitizationListener 
</strong><strong>@Override
</strong>public void onActivationRequired (PendingCardActivation pendingCardActivation) {
    this.pendingCardActivation = pendingCardActivation;
    
    PendingCardActivation activationState = pendingCardActivation.getState();
    switch( activationState ) {
        case OTP_NEEDED:
            // mostrar una UI para ingresar un OTP
            ...
    }
    ...
}

// Método que debe llamarse desde la UI, cuando el OTP ha sido proporcionado por el usuario final
public void idvActivationWithOtp( String otp) {
    pendingCardActivation.activate( otp.getBytes(), digitizationListener );
}
</code></pre>

### ID\&V por servicio al cliente o web

Si el usuario final selecciona **customer\_service** u **website**, el emisor gestiona ID\&V directamente (por ejemplo, mediante un portal web del emisor o servicio de atención al cliente del emisor).

Use `value` para obtener la URL del portal web o el número de teléfono del servicio de atención al cliente del emisor.

Después de que el emisor autentique con éxito al usuario final, el emisor activa el token usando la API del emisor del TSP.

Luego el backend de NFC Wallet envía una `CPS` notificación push a la aplicación de billetera digital.

Procese el push como se describe en [Procesar notificaciones CPS](/nfc-wallet-sdk-android/es/get-started/configuration/5.-push-notifications/handle-push-notifications.md#process-cps-notifications-digital-card-operations).

### ID\&V app-a-app

En este método de ID\&V, la aplicación de billetera digital redirige al usuario final a la aplicación del emisor.

El SDK de Billetera NFC desencadena `MGDigitizationListener.onActivationRequired` con `PendingCardActivation.getState()` establecido en `APP2APP_NEEDED`.

Use `PendingCardActivation.getAppToAppData()` para recuperar un `AppToAppData` objeto.

Use `AppToAppData.getPayLoad()`, `AppToAppData.getScheme()`, y `AppToAppData.getSource()` para redirigir al usuario final a la aplicación del emisor.

```java
MGCardEnrollmentService enrollmentService = MobileGatewayManager.INSTANCE.getCardEnrollmentService();
PendingCardActivation pendingCardActivation = enrollmentService.getPendingCardActivation(digitalCardId);
PendingCardActivationState state = pendingCardActivation.getState();
if (PendingCardActivationState.APP2APP_NEEDED == state) {
  AppToAppData appToAppData = pendingCardActivation.getAppToAppData();
  if(appToAppData != null) {
    String scheme = appToAppData.getScheme();
    String source = appToAppData.getSource();
    String payload = appToAppData.getPayload();
  // use source to get packageId and intent action to launch issuer application
  }
}
```

Después de que la aplicación del emisor complete la autenticación, redirige al usuario final de vuelta a la aplicación de billetera digital.

Hay dos variantes:

* `AppToApp con criptograma`: La aplicación del emisor genera un criptograma del emisor.
* `AppToApp sin criptograma`: El emisor activa el token usando la API del emisor del TSP.

Para `AppToApp con criptograma`,&#x20;

* llame a `PendingCardActivation.resumeAppToAppActivation(...)` y proporcione el criptograma del emisor.
* Si el criptograma es válido,&#x20;
  * El SDK de Billetera NFC aprovisiona el perfil de la tarjeta digital en segundo plano.
  * y el SDK desencadena `MGDigitizationListener.onComplete` callback.

Para `AppToApp sin criptograma`,&#x20;

* llame a `PendingCardActivation.resumeAppToAppActivation()`.&#x20;
* Procese el push como se describe en [Procesar notificaciones CPS](/nfc-wallet-sdk-android/es/get-started/configuration/5.-push-notifications/handle-push-notifications.md#process-cps-notifications-digital-card-operations).


---

# 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/nfc-wallet-sdk-android/es/implement-nfc-wallet/tokenize-a-card/digitize-a-card/yellow-flow-digitization.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.
