> 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-push-to-scheme/push-to-token-requestors-token-connect.md).

# Pulsar hacia solicitantes de tokens (Token Connect)

## Pulsar hacia solicitantes de tokens (Token Connect)

Use esta guía para enviar una tarjeta desde la aplicación del emisor a un **solicitante de tokens** usando **Mastercard MDES Token Connect**.

Los solicitantes de tokens pueden incluir comerciantes de comercio electrónico y proveedores de monederos.

Para la documentación del producto Mastercard, consulte [Descripción general de MDES Token Connect](https://developer.mastercard.com/mdes-token-connect/documentation/#overview).

### Descripción general

Con Token Connect, la aplicación del emisor:

1. Recupera la lista de solicitantes de tokens elegibles para una tarjeta.
2. Solicita una **URL de envío** para el solicitante de tokens seleccionado.
3. Redirige al usuario final a la experiencia del solicitante de tokens para completar **Tokenización**.

{% hint style="info" %}
**Requisitos previos**

* El usuario final está autenticado en la aplicación del emisor.
* La aplicación del emisor ha inicializado el SDK D1 y completado el inicio de sesión.
* El consumidor y la tarjeta están registrados en D1.
  {% endhint %}

### Experiencia del usuario final

El diagrama a continuación ilustra un flujo representativo de Token Connect. El mismo patrón se aplica a cualquier solicitante de tokens compatible con Token Connect.

<figure><img src="/files/fcef3164eecac2f1465662a231340c49e8b54155" alt=""><figcaption><p>Ejemplo de experiencia del usuario final para enviar una tarjeta a un solicitante de tokens usando Token Connect.</p></figcaption></figure>

### Flujo

#### Recuperar solicitantes de tokens elegibles

<figure><img src="/files/d0e5f0d16328458e1f0ad53473a802edaef377ed" alt=""><figcaption><p>Recuperar los solicitantes de tokens elegibles para una tarjeta.</p></figcaption></figure>

#### Enviar a un solicitante de tokens

<figure><img src="/files/27e91280a77fb41dda99cbea931be53e2d9e74f3" alt=""><figcaption><p>Generar una URL de envío para el solicitante de tokens seleccionado y redirigir al usuario final.</p></figcaption></figure>

### Diagramas de secuencia

{% stepper %}
{% step %}

#### Obtener solicitantes de tokens elegibles

La aplicación del emisor usa el SDK D1 para recuperar la lista de solicitantes de tokens que admiten Token Connect para una tarjeta determinada.

Cada solicitante de tokens incluye:

* Un nombre para mostrar.
* Un logotipo de marca.
* Uno o más métodos de aprovisionamiento compatibles (por ejemplo, Android, iOS o web).

<figure><img src="/files/dbc33ecd0db75c4bda6ef277f2ebbc93210c4d8d" alt=""><figcaption><p>Ejemplo de interfaz de usuario de la aplicación del emisor para seleccionar un solicitante de tokens elegible.</p></figcaption></figure>

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

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

        override fun onSuccess(tkRequestorList: List<TokenRequestor>) {
            // Gestiona el objeto tkRequestorList del servidor.
            // Ejemplo para mostrarlo en la interfaz de usuario como la imagen de muestra anterior.
            for (tkRequestor : TokenRequestor in tkRequestorList) {
                val tkRequestorID : String = tkRequestor.id
                val tkRequestorName : String = tkRequestor.name
                val tkRequestorAssets : MutableList<AssetContent>? = tkRequestor.assets // Logotipo del solicitante de tokens.
                val tkrProvisioningMethods : MutableList<ProvisioningMethod> = tkRequestor.provisioningMethods // Métodos de aprovisionamiento del solicitante de tokens.
            }
        }

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

    d1Task.getTokenRequestorList(cardID, callback)
}
```

{% endtab %}

{% tab title="iOS" %}

```swift
let cardID = "" // Obtenido, por ejemplo, de su backend

d1Task.tokenRequestorList(cardID) { tokenRequestors, error in
    if let error = error {
        // Consulte la sección de gestión de errores de la integración del SDK D1
    } else if let tokenRequestors = tokenRequestors {
        // Mostrar tokenRequestors en la interfaz de usuario
        for tokenRequestor in tokenRequestors {
            print("ID: \(tokenRequestor.id ?? \"\")")
            print("Nombre: \(tokenRequestor.name ?? \"\")")

            if let asset = tokenRequestor.asset?.first,
               let imageData = Data(base64Encoded: asset.encodedData) {
                let image = UIImage(data: imageData)
                _ = image
            }
        }
    }
}
```

{% endtab %}
{% endtabs %}
{% endstep %}

{% step %}

#### Enviar una tarjeta a un solicitante de tokens

Después de que el usuario final seleccione un solicitante de tokens, la aplicación del emisor solicita una **URL de envío** mediante la llamada a `addDigitalCardToScheme()`.

Luego, la aplicación del emisor redirige al usuario final al solicitante de tokens mediante la URL de envío devuelta.

<figure><img src="/files/301827fc2bbe511f7e50b4cb9ef9c7977b9a53b1" alt=""><figcaption><p>Ejemplo de interfaz de usuario de la aplicación del emisor para iniciar el flujo de envío de Token Connect.</p></figcaption></figure>

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

```kotlin
//cardID: recibido con la API getConsumerDetails.
//tokenRequestor: seleccionado por el usuario.
fun pushCardToTokenRequestor(d1Task: D1Task, cardID: String, tokenRequestor: TokenRequestor) {
    val appURL = "d1demoapp://com.thalesgroup.gemalto.d1.validation/PushToSchemeResult" // La URL personalizada de la aplicación emisora a la que el solicitante de tokens llama al finalizar el flujo de digitalización.
    val tcsAccepted = true

    val callback: D1Task.Callback<String> = object : D1Task.Callback<String> {

        override fun onSuccess(pushUrl: String) {
            // Inicia la aplicación solicitante de tokens.
            getActivity().startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(pushUrl)))
        }

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

    // Para Click to Pay, el valor del atributo Mastercard tokenRequestor.id es 50123197928.
    d1Task.addDigitalCardToScheme(
        cardID,
        tokenRequestor,
        appURL,
        tcsAccepted,
        callback
    )
}
```

{% endtab %}

{% tab title="iOS" %}

```swift
let cardID = "" // Obtenido, por ejemplo, de su backend

// La URL de enlace profundo de la aplicación emisora a la que llama el solicitante de tokens después del flujo de Tokenización.
let appURL = "test://sample.com.demo/tokenRequestorsPage"

// tokenRequestor es seleccionado por el usuario final y devuelto por tokenRequestorList().

d1Task.addDigitalCardToScheme(
    cardID,
    tokenRequestor: tokenRequestor,
    appURL: appURL,
    termsAndConditionsAccepted: true
) { provisionString, error in
    if let error = error {
        // Consulte la sección de gestión de errores de la integración del SDK D1
    } else if let provisionString = provisionString,
              let pushUrl = URL(string: provisionString),
              UIApplication.shared.canOpenURL(pushUrl) {
        UIApplication.shared.open(pushUrl)
    }
}
```

{% endtab %}
{% endtabs %}

**Qué sucede a continuación**

* El SDK D1 devuelve una URL de envío.
* La aplicación del emisor abre la URL de envío en la aplicación solicitante de tokens o en una vista web.
* El solicitante de tokens realiza el flujo de Tokenización.
* Cuando el flujo se completa, el solicitante de tokens redirige al usuario final de vuelta a la aplicación del emisor usando la `appURL`.
  {% endstep %}
  {% endstepper %}

{% hint style="info" %}

* Para configurar `appURL`, implemente enlaces profundos en su aplicación del emisor: [Android](https://developer.android.com/training/app-links/deep-linking), [iOS](https://developer.apple.com/documentation/xcode/defining-a-custom-url-scheme-for-your-app).
* El solicitante de tokens devuelve el resultado de la Tokenización a la aplicación del emisor. Para más detalles, consulte la guía de Mastercard: [Recibir respuesta del solicitante de tokens](https://developer.mastercard.com/mdes-token-connect/documentation/tutorials-and-guides/issuer-implementation-guide/#receive-response-from-token-requestor).
  {% endhint %}

{% hint style="warning" %}
Mastercard **activación simplificada** no es compatible.
{% endhint %}

Para acceder completamente al SDK D1, consulte [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-push-to-scheme/push-to-token-requestors-token-connect.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.
