> 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).

# Push a solicitantes de tokens (Token Connect)

## Enviar a solicitantes de token (Token Connect)

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

Los solicitantes de token pueden incluir comercios de comercio electrónico y proveedores de carteras.

Para la documentación de productos de Mastercard, consulte [Resumen 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 token elegibles para una tarjeta.
2. Solicita una **URL de push** para el solicitante de token seleccionado.
3. Redirige al usuario final a la experiencia del solicitante de token para completar **Tokenización**.

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

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

### Experiencia del usuario final

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

<figure><img src="https://4070583847-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWDlYTPaq4dNHuiWtf8ux%2Fuploads%2FsVuMgQC38BtKGrjgtZA7%2FUX%20-%20Push%20to%20Wallet.svg?alt=media&amp;token=51d9e105-acd8-4f44-a09d-67fb1ca57145" alt=""><figcaption><p>Ejemplo de experiencia del usuario final para enviar una tarjeta a un solicitante de token usando Token Connect.</p></figcaption></figure>

### Flujo

#### Recuperar solicitantes de token elegibles

<figure><img src="https://4070583847-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWDlYTPaq4dNHuiWtf8ux%2Fuploads%2FZExA7WRfN1glX8viYJ9h%2FFlow%20-%20Push%20to%20token%20requestors%20(Token%20Connect).svg?alt=media&amp;token=46566394-9e5e-474b-8374-c0b09b535f18" alt=""><figcaption><p>Recupere los solicitantes de token elegibles para una tarjeta.</p></figcaption></figure>

#### Enviar a un solicitante de token

<figure><img src="https://4070583847-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWDlYTPaq4dNHuiWtf8ux%2Fuploads%2FJaYE8VfMvniOex4o6Xj1%2FFlow%20-%20Push%20to%20token%20requestors%20(Token%20Connect)%20-2.svg?alt=media&amp;token=905d5af4-09c8-4850-b3ac-cda2a75b49bc" alt=""><figcaption><p>Genere una URL de push para el solicitante de token seleccionado y redirija al usuario final.</p></figcaption></figure>

### Diagramas de secuencia

{% stepper %}
{% step %}

#### Obtener solicitantes de token elegibles

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

Cada solicitante de token incluye:

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

<figure><img src="https://4070583847-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWDlYTPaq4dNHuiWtf8ux%2Fuploads%2FWpceTQPa0ZNlxHiRQwnv%2FSequence%20Diagram%20-%20Get%20eligible%20token%20requestors.svg?alt=media&amp;token=874b73b9-71ae-4d28-8821-7ece9e7f9a8a" alt=""><figcaption></figcaption></figure>

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

```kotlin
fun getEligibleTokenRequestors(d1Task: D1Task, cardID: String) {
    activity.lifecycleScope.launch(Dispatchers.Main) {
        try {
            val tkRequestorList = withContext(Dispatchers.IO) {
                d1Task.pushProvisioningService.getTokenRequestorList(
                    cardID
                ).await()
            }

            // Gestionar el objeto tkRequestorList del servidor
            // Ej.: para mostrarlo en la interfaz de usuario como la imagen de ejemplo 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 token
                val tkrProvisioningMethods : MutableList<ProvisioningMethod> = tkRequestor.provisioningMethods // Métodos de aprovisionamiento del solicitante de token
            }
        } catch (exception: D1Exception) {
            // Consulta la sección Integración del SDK D1 – Gestión de errores
        }
    }
}
```

{% endtab %}

{% tab title="Android < 4.4.0" %}

```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 ejemplo 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 token.
                val tkrProvisioningMethods : MutableList<ProvisioningMethod> = tkRequestor.provisioningMethods // Métodos de aprovisionamiento del solicitante de token.
            }
        }

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

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

{% endtab %}

{% tab title="iOS >= 4.4.0" %}

```swift
let cardID = "" // obtenido, por ejemplo, del servidor
        
do {
    let service = try d1Task.pushProvisioningService()
    let tokenRequestors = try await service.tokenRequestorList(cardID)
    // 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
        }
    }
} catch let d1Error as D1Error {
    // Consulta la sección Integración del SDK D1 – Gestión de errores
} catch let error {
    // Gestiona otro error
}
```

{% endtab %}

{% tab title="iOS < 4.4.0" %}

```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 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 token

Después de que el usuario final selecciona un solicitante de token, la aplicación del emisor solicita un **URL de push** llamando a `addDigitalCardToScheme()`.

La aplicación del emisor luego redirige al usuario final al solicitante de token usando la URL de push devuelta.

<figure><img src="https://4070583847-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWDlYTPaq4dNHuiWtf8ux%2Fuploads%2Fgit-blob-7ce5dff88d091310a8adff27be0a29acd22a2b8e%2FSequence%20Diagram%20-%20%20Push%20a%20card%20to%20a%20token%20requestor.svg?alt=media" alt=""><figcaption></figcaption></figure>

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

```kotlin
fun pushCardToTokenRequestor(d1Task: D1Task, cardID: String, tokenRequestor: TokenRequestor) {
    val appURL = "d1demoapp://com.thalesgroup.gemalto.d1.validation/PushToSchemeResult" // La URL personalizada de la aplicación del emisor que el solicitante de token llama al finalizar el flujo de digitalización
    val tcsAccepted = true

    // Para Click to Pay, el valor del atributo Mastercard tokenRequester.id es 50123197928.
    activity.lifecycleScope.launch(Dispatchers.Main) {
        try {
            val pushUrl = withContext(Dispatchers.IO) {
                d1Task.pushProvisioningService.addDigitalCardToScheme(
                    cardID,
                    tokenRequestor,
                    appURL,
                    tcsAccepted
                ).await()
            }
            // Iniciar la aplicación del solicitante de token
            activity.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(pushUrl)))
        } catch (exception: D1Exception) {
            // Consulta la sección Integración del SDK D1 – Gestión de errores
        }
    }
}
```

{% endtab %}

{% tab title="Android  < 4.4.0" %}

```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 del emisor que el solicitante de token 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 del solicitante de token.
            getActivity().startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(pushUrl)))
        }

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

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

{% endtab %}

{% tab title="iOS >= 4.4.0" %}

```swift
let provisionMethod = PushProvisioningService.ProvisioningMethod(pushHandler: "pushHandler", platformType: "iOS")
let tokenRequestor = PushProvisioningService.TokenRequestor(id: "test", name: "test", asset: nil, provisioningMethods: [provisionMethod])
let cardID = "" // obtenido, por ejemplo, del servidor
let appURL = "test://sample.com.demo/tokenRequestorsPage"
// la URL de la aplicación del emisor, que se configura mediante el mecanismo de deep link.
// La aplicación del solicitante de token llamará a esta URL para pasar el resultado de la información de la tarjeta enviada.
do {
    let service = try d1Task.pushProvisioningService()
    let provisionString = try await service.addDigitalCardToScheme(cardID,
                                                                   tokenRequestor: tokenRequestor,
                                                                   appURL: appURL,
                                                                   termsAndConditionsAccepted: true)
    if let provisionURL = URL(string: provisionString) {
        if await UIApplication.shared.canOpenURL(provisionURL) {
            await UIApplication.shared.open(provisionURL)
        }
    }
} catch let d1Error as D1Error {
    // Consulta la sección Integración del SDK D1 – Gestión de errores
} catch let error {
    // Gestiona otro error
}
```

{% endtab %}

{% tab title="iOS < 4.4.0" %}

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

// La URL de deep link de la aplicación del emisor que el solicitante de token llama 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 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 de D1 devuelve una URL de push.
* La aplicación del emisor abre la URL de push en la aplicación del solicitante de token o en una vista web.
* El solicitante de token realiza el flujo de tokenización.
* Cuando el flujo se completa, el solicitante de token redirige al usuario final de vuelta a la aplicación del emisor usando la `appURL`.
  {% endstep %}
  {% endstepper %}

{% hint style="info" %}

* Para configurar `appURL`, implemente deep links 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 token devuelve el resultado de la tokenización a la aplicación del emisor. Para obtener detalles, consulte la guía de Mastercard: [Recibir respuesta del solicitante de token](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 optimizada** no es compatible.
{% endhint %}

Para obtener acceso completo al SDK de D1, consulte [referencia de la 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.
