> 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/click-to-pay/es/implement-click-to-pay-issuers/enroll-cards-in-click-to-pay/enroll-cards-by-d1-sdk.md).

# Inscribir tarjetas mediante el SDK de D1

## Descripción general

Esta página explica cómo la aplicación del emisor puede inscribir una tarjeta y a su usuario final en Click to Pay mediante el SDK D1.

La aplicación del emisor llama a `inscribir`, lo que desencadena la misma operación de inscripción de Click to Pay en el backend que cuando el backend del emisor llama a [API de D1](/click-to-pay/es/integrate-the-d1-api/d1-api-summary.md).

Utilice este flujo del SDK cuando quiera que el usuario final inicie la inscripción en Click to Pay directamente en la interfaz de usuario de la aplicación del emisor mientras D1 orquesta las interacciones de backend con los directorios de Click to Pay y la red de pago.

## Flujo

El siguiente diagrama ilustra los pasos principales del flujo de inscripción de Click to Pay del SDK:

<figure><img src="https://3391342470-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FuKGiYHoxBTUoHkwRFlXH%2Fuploads%2F732nA40vMy1QuMWso8VH%2FFlow%20-%20%20Enroll%20cards%20by%20D1%20SDK.svg?alt=media&amp;token=2fe52659-db21-4f64-881f-6cf367544dd8" alt=""><figcaption></figcaption></figure>

## Diagrama de secuencia

Desde D1 SDK 4.2.0, con la incorporación del flujo de backend, la `inscribir` ([Android](https://thalesgroup.github.io/d1sdk-docs/d1-sdk/latest/android/com/thalesgroup/gemalto/d1/clicktopay/ClickToPayService.html#enrol\(java.lang.String,com.thalesgroup.gemalto.d1.clicktopay.ConsumerInfo,java.lang.String,com.thalesgroup.gemalto.d1.clicktopay.BillingAddress,com.thalesgroup.gemalto.d1.D1Task.Callback\)) / [iOS](https://thalesgroup.github.io/d1sdk-docs/d1-sdk/4.3.0/ios/documentation/d1/clicktopayservice/enrol\(_:consumerinfo:name:billingaddress:\))) API también está disponible a través de [D1 SDK](/click-to-pay/es/integrate-the-d1-sdk/api-reference.md).

### Requisitos previos

El flujo del SDK tiene los mismos requisitos previos y limitaciones que el flujo de backend. Consulte [los requisitos previos](/click-to-pay/es/implement-click-to-pay-issuers/enroll-cards-in-click-to-pay.md#prerequisites).

El siguiente diagrama de secuencia muestra el flujo iniciado desde la aplicación del emisor:

<figure><img src="https://3391342470-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FuKGiYHoxBTUoHkwRFlXH%2Fuploads%2Fbzz9EFeZ8iDuEAGeafPV%2FSequence%20Diagram%20-%20Click%20to%20Pay%20-%20%20Enroll%20cards%20by%20D1%20SDK.svg?alt=media&amp;token=775a94a6-7680-4d8b-9e1b-7db4f6f98bb3" alt=""><figcaption></figcaption></figure>

### Puntos clave

* La aplicación del emisor debe proporcionar la información del consumidor. Consulte `ConsumerInfo` ([API del SDK](/click-to-pay/es/integrate-the-d1-sdk/api-reference.md)).
* La inscripción es una operación asíncrona. El resultado final se puede obtener mediante:
  * usando el estado de devolución de llamada (`SUCCESSFUL` o `PENDING`),
  * llamando al `Obtener operación` punto final disponible en el [API de D1](/click-to-pay/es/integrate-the-d1-api/d1-api-summary.md), o
  * activando las notificaciones D1. En el flujo del SDK, el emisor también puede activar [notificaciones push en la aplicación](/click-to-pay/es/integrate-d1-notifications.md) además de las notificaciones del backend del emisor.
* El TSP asociado con la red de pago desencadena un flujo típico de digitalización.

### Gestionar notificaciones push de Click to Pay

Antes de que la aplicación del emisor pueda recibir notificaciones de inscripción en Click to Pay desde el backend D1, asegúrese de que las notificaciones push estén configuradas de la siguiente manera:

{% stepper %}
{% step %}
**Configurar notificaciones push**

Realice las acciones necesarias tal como se indica en [configuración de notificaciones push](https://docs.payments.thalescloud.io/click-to-pay/integrate-the-d1-sdk/getting-started/configuration/4.-push-notifications/push-notification-configuration).
{% endstep %}

{% step %}
**Registrar el token de notificación push**

Registrar el [token de notificación push](https://docs.payments.thalescloud.io/click-to-pay/integrate-the-d1-sdk/getting-started/configuration/4.-push-notifications/push-notification-configuration#update-push-token).
{% endstep %}

{% step %}
**Registrarse para recibir notificaciones de mensajes**

Registrarse para [notificaciones de mensajes](https://docs.payments.thalescloud.io/click-to-pay/integrate-the-d1-sdk/getting-started/configuration/4.-push-notifications/message-handling).
{% endstep %}
{% endstepper %}

Una vez completados estos pasos, la aplicación del emisor puede empezar a recibir notificaciones push como `clickToPayEnrolment` y `clickToPayOptOutCard`.

Cuando D1 SDK recibe una notificación push de tipo `clickToPayEnrolment` ([Android](https://thalesgroup.github.io/d1sdk-docs/d1-sdk/latest/android/com/thalesgroup/gemalto/d1/messaging/MessageType.html#CLICKTOPAY_ENROLMENT) / [iOS](https://thalesgroup.github.io/d1sdk-docs/d1-sdk/4.3.0/ios/documentation/d1/messagetype/clicktopayenrolment)) o `clickToPayOptOutCard` ([Android](https://thalesgroup.github.io/d1sdk-docs/d1-sdk/latest/android/com/thalesgroup/gemalto/d1/messaging/MessageType.html#CLICKTOPAY_OPTOUT_CARD) / [iOS](https://thalesgroup.github.io/d1sdk-docs/d1-sdk/4.3.0/ios/documentation/d1/messagetype/clicktopayoptoutcard)), la aplicación del emisor revisa la notificación para determinar si la operación de inscripción en Click to Pay o la exclusión voluntaria se ha realizado correctamente.

## API del SDK

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

```kotlin
fun enrolClick2Pay(d1Task: D1Task, cardID: String) {
    // Información del consumidor recibida de la entrada del usuario o del backend.
    val consumerInfo = ConsumerInfo(
        "Bella",
        "segundo nombre",
        "Lin",
        "en-US",
        "+65",
        "99998888",
        "email@thalesgroup.com"
    )
    val billingAddress = BillingAddress("CZ")

    val callback: D1Task.Callback<Status?> =
        object : D1Task.Callback<Status?> {
            override fun onSuccess(data: Status?) {
                // Inscripción en Click to Pay exitosa
                val status: Status? = data
                val operationID = data?.operationID
            }

            override fun onError(exception: D1Exception) {
                // Consulte la sección Integración del SDK de D1 – Gestión de errores.
            }
        }
    d1Task.getClickToPayService().enrol(
        cardID,
        consumerInfo,
        "Bella Lin",
        billingAddress,
        callback
    )
}
```

{% endtab %}

{% tab title="Android - JAVA" %}

```java
public void enrolClick2Pay(@NonNull D1Task d1Task, @NonNull String cardID) {
    // Información del consumidor recibida de la entrada del usuario o del backend.
    ConsumerInfo consumerInfo = new ConsumerInfo(
        "Bella", 
        "segundo nombre", 
        "Lin", 
        "en-US", 
        "+65", 
        "99998888", 
        "email@thalesgroup.com"
    );
    BillingAddress billingAddress = new BillingAddress("CZ");

    D1Task.Callback<Status> callback = new D1Task.Callback<Status>() {
        @Override
        public void onSuccess(Status data) {
            // Inscripción en Click to Pay exitosa
            Status status = data;
            String operationID = data.operationID;
        }

        @Override
        public void onError(D1Exception exception) {
            // Consulte la sección Integración del SDK de D1 – Gestión de errores.
        }
    };
    d1Task.getClickToPayService().enrol(
            cardID,
            consumerInfo,
            "Bella Lin",
            billingAddress,
            callback);
}
```

{% endtab %}

{% tab title="iOS" %}

```swift
let cardID = ""
let name = "Bella Lin"
let consumerInfo = ConsumerInfo(firstName: "Bella",
                                middleName: nil,
                                lastName: "Lin",
                                language: "en-US",
                                phoneNumberCountryCode: "+65",
                                phoneNumber: "99998888",
                                email: "email@thalesgroup.com")

let billingAddress = BillingAddress(line1: "1230 Rue de Rivoli",
                                    line2: nil,
                                    line3: nil,
                                    city: "Paris",
                                    state: "75",
                                    zipCode: "75000",
                                    countryCode: "FR")
do {
    let status = try await d1Task.clickToPayService().enrol(cardID,
                                                            consumerInfo: consumerInfo,
                                                            name: name,
                                                            billingAddress: billingAddress)
    switch status {
    case .pending(let operationID):
        // Inscripción en Click to Pay pendiente.
        print(operationID)
    case .successful(let operationID):
        // Inscripción en Click to Pay completada correctamente.
        print(operationID)
    }
} catch {
    // Gestionar el error.
}
```

{% endtab %}
{% endtabs %}


---

# 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/click-to-pay/es/implement-click-to-pay-issuers/enroll-cards-in-click-to-pay/enroll-cards-by-d1-sdk.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.
