> 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 un servicio de tokenización para usar el SDK D1 de Thales para las capacidades de "View\&Control".
{% endhint %}

Use esta guía para permitir que el **Usuario final** ver y administrar **tarjetas digitales** (tokens) creados para sus tarjetas en **las billeteras xPay** y otros **solicitantes de tokens**.

En la aplicación del emisor, normalmente:

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

## Requisitos previos

Asegúrese de que:

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

Para el flujo completo de tokenización de la billetera, consulte [Implementar push a billeteras 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`, llame a `getDigitalCardList()`.

La respuesta contiene una lista de `DigitalCard` objetos. 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 con 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 vencimiento 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 del token (`tokenRequestorID`).
* Si la tarjeta digital está en el dispositivo actual (`isOnCurrentDevice`) para la billetera o el solicitante del token seleccionado (por ejemplo, Apple Pay, Google Pay, Samsung Pay o NFC Wallet).
* Lista de vinculaciones 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) de cada dispositivo vinculado.

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

Como buena práctica, identifique los 5–10 principales ID de solicitante de token relevantes para su cartera e incorpore de forma fija un nombre para mostrar y un logotipo orientados al Usuario final en la aplicación del emisor.
{% endhint %}

### Flujo

<figure><img src="/files/a59014a364783e555bd4368d5256d5772ffd79a1" alt="Flow for retrieving the digital card list"><figcaption><p>Flujo de alto nivel para listar las 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 de 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>) {
            // Maneja el objeto digitalCardList del servidor.
            // Por ejemplo, para mostrarlo en la interfaz de usuario como la imagen de ejemplo de arriba.
            for (digitalCard in digitalCardList) {
                val digitalCardID = digitalCard.cardID
                val digitalCardState = digitalCard.state // Estado de la tarjeta digital actual.
                val digitalCardExp = digitalCard.expiryDate // Fecha de vencimiento 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 del token.
                val isOnCurrentDevice = digitalCard.isOnCurrentDevice // Identifica si la tarjeta digital está en el dispositivo actual.

                // Recupera la lista de vinculaciones 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) {
            // Consulte la sección Integración del SDK de 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 {
        // Consulte la sección Integración del SDK de D1 – Gestión de errores.
    } else if let digitalCards = digitalCards {
        // Continúa con los flujos posteriores. Por ejemplo, actualizar la interfaz de usuario.
        for digitalCard in digitalCards {
            print("ID de tarjeta digital: \(digitalCard.cardID)")
            print("Estado: \(digitalCard.state.rawValue)")
            print("Últimos 4: \(digitalCard.last4 ?? "")")
            print("Vencimiento: \(digitalCard.expiryDate ?? "")")
            print("ID del dispositivo: \(digitalCard.deviceID ?? "")")
            print("Nombre del dispositivo: \(digitalCard.deviceName ?? "")")
            print("Tipo de dispositivo: \(digitalCard.deviceType ?? "")")
            print("ID del solicitante del token: \(digitalCard.tokenRequestorID ?? "")")
            print("Está en el dispositivo actual: \(digitalCard.isOnCurrentDevice)")

            // Recupera la lista de vinculaciones 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 vinculación: \(binding.bindingStatus?.rawValue ?? "")")
                }
            }
        }
    }
}
```

{% endtab %}
{% endtabs %}

## Controlar tarjetas digitales

La aplicación del emisor puede permitir que el Usuario final administre el estado de cada tarjeta digital.

Las acciones admitidas 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 de 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: recuperado 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 {
                // La actualización del estado de la tarjeta digital ha fallado.
            }
        }

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

    // Si el estado actual de la tarjeta digital es ACTIVE
    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 ACTIVE
// digitalCard se recupera de la API D1Task.digitalCardList
d1Task.updateDigitalCard(cardID, digitalCard: digitalCard, action: .suspend) { isSuccess, error in
    if let error = error {
        // Consulte la sección Integración del SDK de D1 – Gestión de errores
    } else {
        if isSuccess {
            // Continúe con los flujos posteriores, por ejemplo, actualizar la interfaz de usuario
        } else {
            // El fallo podría deberse a un estado no válido, por ejemplo, actualizar una tarjeta activa a estado activo
        }
    }
}
```

{% endtab %}
{% endtabs %}

Para obtener acceso completo al SDK de D1, consulte [la 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, and the optional `goal` 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>&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.
