> 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/push-provisioning/es/implement-push-provisioning/implement-view-and-control/view-and-control-digital-cards.md).

# Ver y controlar tarjetas digitales

{% hint style="danger" %}
Se requiere el servicio de tokenización para usar el SDK D1 de Thales con capacidades de "View\&Control".
{% endhint %}

Usa esta guía para permitir que el **Usuario Final** vea y gestione **tarjetas digitales** (tokens) creados para sus tarjetas en **xPay Wallets** y otros **solicitantes de tokens**.

En la aplicación del emisor, normalmente:

* muestra todas las tarjetas digitales vinculadas a un `cardId`
* muestra el estado de cada tarjeta digital (por ejemplo, activa o suspendida)
* admite acciones básicas del ciclo de vida, como suspender, reanudar, eliminar y activar

## Requisitos previos

Asegúrate de que:

* El Usuario Final y la tarjeta estén registrados en el **backend de D1**.
* El **SDK D1** está integrado en tu aplicación del emisor e inicializado.
* La aplicación del emisor ha completado el flujo de inicio de sesión del SDK D1.

Para el flujo completo de tokenización de wallet de extremo a extremo, consulta [Implementar push a wallets digitales](/push-provisioning/es/implement-push-provisioning/implement-push-to-digital-wallets.md).

## Ver tarjetas digitales

Para mostrar las tarjetas digitales existentes de un `cardId`, llama a `getDigitalCardList()`.

La respuesta contiene una lista de objetos `DigitalCard` . Para Visa Cloud Token Framework (CTF), el `DigitalCard` objeto también incluye información de vinculación del dispositivo, lo que permite a la aplicación ver todas las vinculaciones de dispositivos asociadas a cada tarjeta digital.

El `DigitalCard` contiene la siguiente información:

* Estado de la tarjeta digital (por ejemplo, activa, suspendida o pendiente de activación).
* Fecha de caducidad de la tarjeta digital.
* Últimos cuatro dígitos de la tarjeta digital.
* Nombre y tipo del dispositivo que contiene la tarjeta digital.
* ID del solicitante de tokens (`tokenRequestorID`).
* Si la tarjeta digital está en el dispositivo actual (`isOnCurrentDevice`) para la wallet o el solicitante de tokens seleccionados (por ejemplo, Apple Pay, Google Pay, Samsung Pay o NFC Wallet).
* Lista de vinculación de dispositivos (desde SDK 4.3.0 para Visa CTF). Contiene la referencia de vinculación, el nombre del dispositivo y el estado de la vinculación (APPROVED, DECLINED o CHALLENGED) para cada dispositivo vinculado.

{% hint style="info" %}
Debido a limitaciones de la red de pagos, no siempre puedes recuperar en tiempo real el nombre y el logotipo del solicitante de tokens.

Como buena práctica, identifica los 5–10 IDs de solicitantes de tokens más relevantes para tu cartera y codifica de forma fija en la aplicación del emisor un nombre para mostrar y un logotipo visibles para el Usuario Final.
{% endhint %}

### Flujo

<figure><img src="/files/a59014a364783e555bd4368d5256d5772ffd79a1" alt="Flow for retrieving the digital card list"><figcaption><p>Flujo de alto nivel para listar tarjetas digitales de una tarjeta.</p></figcaption></figure>

### Diagrama de secuencia

**Requisitos previos**

* La cuenta del consumidor y la tarjeta fueron registradas en D1
* El SDK está correctamente inicializado
* La aplicación del emisor llamó a la API de inicio de sesión del SDK D1

<figure><img src="/files/121750935e3e7f4cf57b6371d93b9f1c7a34ca16" alt="Example issuer application screen showing a list of digital cards"><figcaption><p>Ejemplo de interfaz de la aplicación del emisor para listar tarjetas digitales.</p></figcaption></figure>

### Ejemplos

{% tabs %}
{% tab title="Android" %}

```kotlin
fun getDigitalCardList(d1Task: D1Task, cardID: String) {
    val callback: D1Task.Callback<List<DigitalCard>> = object : D1Task.Callback<List<DigitalCard>> {

        override fun onSuccess(digitalCardList: List<DigitalCard>) {
            // Gestiona el objeto digitalCardList del servidor.
            // Por ejemplo, para mostrarlo en la interfaz de usuario como en la imagen de ejemplo anterior.
            for (digitalCard in digitalCardList) {
                val digitalCardID = digitalCard.cardID
                val digitalCardState = digitalCard.state // Estado de la tarjeta digital actual.
                val digitalCardExp = digitalCard.expiryDate // Fecha de caducidad de la tarjeta digital actual.
                val last4 = digitalCard.last4 // Últimos 4 dígitos de la tarjeta digital actual.
                val tokenRequestorID = digitalCard.tokenRequestorID // ID del solicitante de tokens.
                val isOnCurrentDevice = digitalCard.isOnCurrentDevice // Identifica si la tarjeta digital está en el dispositivo actual.

                // Recupera la lista de vinculación de dispositivos (desde SDK 4.3.0 para Visa CTF).
                val deviceBindingList = digitalCard.deviceBindingList
                deviceBindingList?.forEach { binding ->
                    val bindingReference = binding.bindingReference // ID de referencia de vinculación.
                    val deviceName = binding.deviceName // Nombre del dispositivo.
                    val bindingStatus = binding.bindingStatus // APPROVED, DECLINED o CHALLENGED.
                }
            }
        }

        override fun onError(exception: D1Exception) {
            // Consulta la sección Integración del SDK D1 – Gestión de errores.
        }
    }
    d1Task.getDigitalCardList(cardID, callback)
}
```

{% endtab %}

{% tab title="iOS" %}

```swift
let cardID = "" // Obtenido, por ejemplo, del servidor.
d1Task.digitalCardList(cardID) { digitalCards, error in
    if let error = error {
        // Consulta la sección Integración del SDK D1 – Gestión de errores.
    } else if let digitalCards = digitalCards {
        // Continúa con los flujos posteriores. Por ejemplo, actualizar la UI.
        for digitalCard in digitalCards {
            print("ID de la tarjeta digital: \(digitalCard.cardID)")
            print("Estado: \(digitalCard.state.rawValue)")
            print("Últimos4: \(digitalCard.last4 ?? "")")
            print("Caducidad: \(digitalCard.expiryDate ?? "")")
            print("ID del dispositivo: \(digitalCard.deviceID ?? "")")
            print("Nombre del dispositivo: \(digitalCard.deviceName ?? "")")
            print("Tipo de dispositivo: \(digitalCard.deviceType ?? "")")
            print("TokenRequestorID: \(digitalCard.tokenRequestorID ?? "")")
            print("isOnCurrentDevice: \(digitalCard.isOnCurrentDevice)")

            // Recupera la lista de vinculación de dispositivos (desde SDK 4.3.0 para Visa CTF).
            if let deviceBindingList = digitalCard.deviceBindingList {
                for binding in deviceBindingList {
                    print("Referencia de vinculación: \(binding.bindingReference ?? "")")
                    print("Nombre del dispositivo: \(binding.deviceName ?? "")")
                    print("Estado de la vinculación: \(binding.bindingStatus?.rawValue ?? "")")
                }
            }
        }
    }
}
```

{% endtab %}
{% endtabs %}

## Controlar tarjetas digitales

La aplicación del emisor puede permitir al Usuario Final gestionar el estado de cada tarjeta digital.

Las acciones compatibles incluyen:

* **Suspender** una tarjeta digital cuando el estado actual es activo: `d1Task.updateDigitalCard(cardID, digitalCard, CardAction.SUSPEND, callback)`
* **Reanudar** una tarjeta digital cuando el estado actual es suspendido: `d1Task.updateDigitalCard(cardID, digitalCard, CardAction.RESUME, callback)`
* **Eliminar** una tarjeta digital: `d1Task.updateDigitalCard(cardID, digitalCard, CardAction.DELETE, callback)`
* **Activar** una tarjeta digital (por ejemplo, después de la autenticación reforzada): `d1PushWallet.activateDigitalCard(digitalCard.getCardID(), callback)`

### Diagrama de secuencia

**Requisitos previos**

* La cuenta del consumidor y la tarjeta fueron registradas en D1
* El SDK está correctamente inicializado
* La aplicación del emisor llamó a la API de inicio de sesión del SDK D1

<figure><img src="/files/5ee655f2c63a4076fc98396c0ce449bc18397b0e" alt="Example issuer application screen for controlling digital cards"><figcaption><p>Ejemplo de interfaz de la aplicación del emisor para controlar el estado de una tarjeta digital.</p></figcaption></figure>

### Ejemplos

{% tabs %}
{% tab title="Android" %}

```kotlin
//digitalCard: recuperada de la API getDigitalCardList
fun controlDigitalCard(d1Task: D1Task, cardID: String, digitalCard: DigitalCard) {
    val callback: D1Task.Callback<Boolean> = object : D1Task.Callback<Boolean> {

        override fun onSuccess(isSuccess: Boolean) {
            if (isSuccess) {
                // El estado de la tarjeta digital se ha actualizado correctamente.
                // La aplicación puede actualizar la interfaz de usuario.
            } else {
                // Ha fallado la actualización del estado de la tarjeta digital.
            }
        }

        override fun onError(exception: D1Exception) {
            // Consulta la sección Integración del SDK D1 – Gestión de errores.
        }
    }

    // Si el estado actual de la tarjeta digital es ACTIVO
    d1Task.updateDigitalCard(cardID, digitalCard, CardAction.SUSPEND, callback)
}
```

{% endtab %}

{% tab title="iOS" %}

```swift
let cardID = "" // obtenido, por ejemplo, del servidor
// Si el estado actual de la tarjeta digital es ACTIVO
// digitalCard se recupera de la API D1Task.digitalCardList
d1Task.updateDigitalCard(cardID, digitalCard: digitalCard, action: .suspend) { isSuccess, error in
    if let error = error {
        // Consulta la sección Integración del SDK D1 – Gestión de errores
    } else {
        if isSuccess {
            // Continúa con los flujos posteriores, por ejemplo, actualizar la UI
        } else {
            // El fallo puede deberse a un estado no válido, por ejemplo, actualizar una tarjeta activa al estado activo
        }
    }
}
```

{% endtab %}
{% endtabs %}

Para tener acceso completo al SDK D1, consulta [referencia de API](/push-provisioning/es/integrate-the-d1-sdk/api-reference.md).


---

# 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:

```
GET https://docs.payments.thalescloud.io/push-provisioning/es/implement-push-provisioning/implement-view-and-control/view-and-control-digital-cards.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
