> 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/enroll-wallet.md).

# Registrar la cartera

## Resumen

Inscriba la aplicación de billetera digital después de **NFC Wallet SDK** la inicialización y antes de comenzar **Tokenización**.

La inscripción de la billetera aprovisiona a la aplicación de billetera digital con los activos de seguridad necesarios para usar **NFC Wallet** servicios:

* Ejecute esto una vez por instancia de billetera.
* Ejecute esto solo si la aplicación de billetera digital usa **NFC Wallet** servicios.
* Ejecute esto solo en dispositivos elegibles.

{% hint style="warning" %}
Inscriba solo las aplicaciones de billetera digital que usan **NFC Wallet** servicios.

Esto evita tráfico de red innecesario de la aplicación de billetera digital y carga innecesaria en **NFC Wallet**.
{% endhint %}

## Diagrama de secuencia

Flujo general para inscribir su aplicación de billetera.

<figure><img src="/files/9fce7f0712f4fb74d80fdd9db239dfbd2f03250e" alt=""><figcaption><p>Flujo general de inscripción de la billetera.</p></figcaption></figure>

{% hint style="info" %}
Este flujo se denomina técnicamente **inscripción segura de la billetera** en **NFC Wallet**.
{% endhint %}

## Integración del SDK

### Requisitos previos

Antes de comenzar, verifique lo siguiente:

* Su aplicación de billetera digital está incorporada en el backend de NFC Wallet.
* Ha inicializado el **NFC Wallet SDK**.
* La billetera no está inscrita (véase abajo).

### Realice la inscripción de la billetera

La inscripción de la billetera es una acción única en el ciclo de vida de la aplicación de billetera digital.

Ejecútela después de la inicialización del SDK, y solo si la billetera no está inscrita.

1. Obtenga un `WalletSecureEnrollmentBusinessService` instancia.
2. Compruebe `getState()` devuelve `WSE_REQUIRED`.
3. Si es necesario, llame a `startWalletSecureEnrollment()` para iniciar la inscripción de la billetera.
4. Implemente `WalletSecureEnrollmentListener` para seguir el progreso.

Estas son las devoluciones de llamada posibles:

* `onProgressUpdate` con el estado `WSE_STARTED`: El proceso comienza.
* `onProgressUpdate` con el estado `WSE_COMPLETED`: El proceso finaliza correctamente.
* `onError`: El proceso falla con un error.

Después de que la inscripción de la billetera se complete correctamente, continúe con [Tokenizar una tarjeta](/nfc-wallet-sdk-android/es/implement-nfc-wallet/tokenize-a-card.md).

```java
public void performWseIfNeeded() {
    // Primero compruebe el estado actual. Si necesitamos WSE en absoluto.
    final WalletSecureEnrollmentBusinessService wseService 
                = ProvisioningServiceManager.getWalletSecureEnrollmentBusinessService();
    final WalletSecureEnrollmentState state = wseService.getState();

    switch (state) {
        case WSE_COMPLETED:
        case WSE_NOT_REQUIRED:
            // WSE ya se había realizado en la instancia actual o en alguna instancia anterior.
            break;
        case WSE_STARTED:
            // WSE se activó durante esta instancia. Simplemente espere a que termine la primera.
            return;
        case WSE_REQUIRED:
            // Active la inscripción de WS.
            wseService.startWalletSecureEnrollment(new WalletSecureEnrollmentListener() {
                @Override
                public void onProgressUpdate(final WalletSecureEnrollmentState wseState) {
                    if (wseState == WalletSecureEnrollmentState.WSE_COMPLETED) {
                        // Éxito
                    }
                    else if (wseState == WalletSecureEnrollmentState.WSE_STARTED) {
                        // Iniciado
                    }
                }

                @Override
                public void onError(final WalletSecureEnrollmentError wbDynamicKeyRenewalServiceError) {
                    // Registrar error
                }
            });
            break;
        default:
            // Registre el error, ya que no debería ocurrir
            break;
    }
}   
```

### Detalles del código de error

Cuando `WalletSecureEnrollmentListener.onError(...)` se activa, el SDK proporciona un `WalletSecureEnrollmentError`.

Incluye un código de error y un mensaje, además de campos adicionales según el tipo de fallo.

#### Analice `WalletSecureEnrollmentError`

La estructura del `WalletSecureEnrollmentError` objeto es la siguiente:

* Código de error del SDK: el tipo de error para esta operación.
* Código de error de CPS: el código de error numérico devuelto por el módulo CPS (lado del servidor).
* Código de estado HTTP: el código de estado HTTP devuelto para errores de comunicación.
* Mensaje: una descripción del error legible por humanos.

El error debe analizarse de la siguiente manera:

1. Leer `getSdkErrorCode()` para obtener un `WalletSecureEnrollmentErrorCodes` valor.
2. Si el código de error del SDK indica un error de comunicación (`COMM_ERROR`), lea `getHttpStatusCode()`.
3. Si el código de error del SDK indica un error del lado del servidor (`SERVER_ERROR`), lea `getCpsErrorCode()`.
4. Leer `getErrorMessage()` para una descripción adecuada para los registros.
5. Si el código de error del SDK es `DEVICE_SUSPICIOUS`, lea `getStatusAdditionalInfo()` y regístrelo para la resolución de problemas.

Consulte `WalletSecureEnrollmentErrorCodes` en la [API de Android](/nfc-wallet-sdk-android/es/android-api.md) documentación de referencia para la lista completa de códigos.

#### `WalletSecureEnrollmentErrorCodes`

Utilice las siguientes recomendaciones para decidir si reintentar, detener o restablecer el SDK.

{% hint style="info" %}
Llamar a `SDKDataController.wipeAll()` cuando la recomendación sea restablecer el SDK.
{% endhint %}

<details>

<summary>Tablas de códigos de error</summary>

<table data-full-width="true"><thead><tr><th width="240">Código de error</th><th>Cuándo ocurre</th><th>Acción recomendada</th></tr></thead><tbody><tr><td><code>WSE_INTERNAL_ERROR</code></td><td>Se produce un error interno del SDK.</td><td><p>Reintente la inscripción de la billetera.</p><p>Si el problema persiste, restablezca el SDK.</p></td></tr><tr><td><code>COMMON_NO_INTERNET</code></td><td>El dispositivo no tiene conectividad de red.</td><td>Pida al usuario final que se conecte a una red y luego reintente la inscripción de la billetera.</td></tr><tr><td><code>COMMON_COMM_ERROR</code></td><td>Se produce un error de comunicación al recuperar los activos de seguridad.</td><td>Reintente la inscripción de la billetera.</td></tr><tr><td><code>COMMON_SERVER_ERROR</code></td><td>Se produce un error del lado del servidor al recuperar los activos de seguridad.</td><td><p>Reintente la inscripción de la billetera.</p><p>Si el problema persiste, póngase en contacto con el equipo de entrega de Thales para validar la configuración del entorno.</p></td></tr><tr><td><code>RE_ENROLLMENT_REQUIRED</code></td><td>Se requiere reinscripción por motivos de seguridad.</td><td>Restablezca el SDK y luego ejecute de nuevo la inscripción de la billetera.</td></tr><tr><td><code>WSE_STORAGE_ACCESS_ERROR</code></td><td>El SDK supera su límite interno de reintentos al acceder al almacenamiento seguro.</td><td>Restablezca el SDK y luego reintente la inscripción de la billetera.</td></tr><tr><td><code>JSON_PARSING_ERROR</code></td><td>Los datos de respuesta no se pueden analizar.</td><td><p>Reintente la inscripción de la billetera.</p><p>Si el problema persiste, restablezca el SDK.</p></td></tr><tr><td><code>WSE_REQUEST_ERROR</code></td><td>La solicitud de inscripción falla.</td><td>Reintente la inscripción de la billetera.</td></tr><tr><td><code>WSE_DOWNLOAD_ERROR</code></td><td>La descarga de los activos de seguridad falla.</td><td>Verifique la conectividad de red y luego reintente la inscripción de la billetera.</td></tr><tr><td><code>WSE_ERROR_INIT_SESSION</code></td><td>La inicialización de la sesión WSE falla (normalmente relacionada con la autenticación).</td><td>Reintente la inscripción de la billetera.</td></tr><tr><td><code>WSE_ERROR_COMPUTE_AUTH_VALUE_FAILED_PACKAGE_NOT_FOUND</code></td><td>El SDK no puede calcular el valor de autenticación porque no se puede resolver el nombre del paquete.</td><td>Verifique el nombre del paquete de la aplicación usado en su configuración de incorporación y luego reintente la inscripción de la billetera.</td></tr><tr><td><code>WSE_ERROR_COMPUTE_AUTH_VALUE_FAILED_CERT_EXCEPTION</code></td><td>El SDK no puede calcular el valor de autenticación debido a un problema con la firma de la aplicación o la clave pública.</td><td>Verifique el certificado de firma de la aplicación usado en su configuración de incorporación y luego reintente la inscripción de la billetera.</td></tr><tr><td><code>WSE_CPS_COMPONENT_NOT_INITIALIZED</code></td><td>La inscripción de la billetera comienza antes de que se inicialice el componente CPS.</td><td>Inicialice el SDK y luego reintente la inscripción de la billetera.</td></tr><tr><td><code>WSE_MG_COMPONENT_NOT_INITIALIZED</code></td><td>La inscripción de la billetera comienza antes de que se inicialice el componente MobileGateway.</td><td>Inicialice el SDK y luego reintente la inscripción de la billetera.</td></tr><tr><td><code>DEVICE_SUSPICIOUS</code></td><td>El SDK detecta una amenaza de seguridad en el dispositivo.</td><td><p>Detenga el flujo e informe al usuario final de que el dispositivo no se puede usar.</p><p>Capture y comparta <code>getStatusAdditionalInfo()</code> al contactar con el soporte de Thales.</p></td></tr><tr><td><code>WSE_KCV_ERROR</code></td><td>El SDK no puede validar los activos de seguridad descargados (la comprobación KCV falla).</td><td>Reintente la inscripción de la billetera.</td></tr></tbody></table>

</details>

## Clave de vinculación de la aplicación (notas)

Como se describe en [incorporación](/nfc-wallet-sdk-android/es/get-started/configuration/2.-onboarding.md) debe proporcionar la **clave de vinculación de la aplicación.**

Si no se proporciona la clave de vinculación de la aplicación o es incorrecta, la inscripción de la billetera fallará.

Revise la advertencia y la nota siguientes.

{% hint style="warning" %}

### Rotación de la clave de firma / Múltiples firmantes <a href="#receive-this-from-the-thales-delivery-team" id="receive-this-from-the-thales-delivery-team"></a>

Si la clave de firma más antigua no se proporciona como el primer valor del firmante en la estructura proof-of-rotation, la inscripción de la billetera fallará
{% endhint %}

{% hint style="info" %}
**Degradación a versiones anteriores de NFC Wallet SDK**

Para degradar a una versión anterior de NFC Wallet SDK, la aplicación debe asegurarse de que la clave de firma más antigua se proporcione como el primer firmante en la estructura proof-of-rotation.
{% endhint %}


---

# 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/enroll-wallet.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.
