> 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/nfc-wallet-sdk-android/es/additional-features/add-wallet-transaction-data.md).

# Añadir datos de transacción de la cartera

## Resumen

Puede adjuntar datos de transacción de la cartera a un pago sin contacto. El host de procesamiento puede usar estos datos durante el procesamiento de autorización.

Los datos de transacción de la cartera se definen para cada tarjeta digital. Puede proporcionarlos de dos maneras:

* **Persistente:** El SDK almacena los datos en almacenamiento seguro. Sigue disponible después de que la aplicación de cartera digital se reinicie.
* **Efímero:** La aplicación de cartera digital proporciona los datos solo para una transacción.

La aplicación de cartera digital decide si incluir estos datos en cada pago.

Esta función es compatible con los perfiles de pago sin contacto Mastercard (MCBP 2.3) y PURE.

Antes de una transacción, se debe establecer el modo de datos de transacción de la cartera para especificar si se usarán los datos persistentes almacenados o los datos personalizados efímeros.

El modo de datos de transacción de la cartera se restablece después de cada transacción y debe volver a establecerse si la tarjeta cambia durante una transacción.

{% hint style="warning" %}
Las siguientes API están obsoletas a partir de `6.14.0`:

* `DigitalizedCard.setWalletTransactionData(WalletTransactionData walletTransactionData)`
* `DigitalizedCard.getWalletTransactionData()`
* `PaymentBusinessService.setWalletTransactionData(WalletTransactionData walletTransactionData)`

Use las API introducidas en `6.14.0` para nuevas integraciones.
{% endhint %}

### Perfiles compatibles

#### Mastercard (MCBP 2.3)

NFC Wallet SDK admite la especificación Mastercard **MCBP 2.3**.

Si los datos de transacción de la cartera están disponibles antes de una transacción sin contacto, el SDK actualiza el `IAD` (etiqueta EMV `9F10`, Datos de aplicación del emisor):

* Desplazamiento inicial: byte 19
* Longitud máxima del IAD: 32 bytes
* Longitud máxima de los datos de transacción de la cartera: 14 bytes

En MCBP 2.3, esta función se denomina **información propietaria de la cartera**.

#### PURE sin contacto

Si los datos de transacción de la cartera están disponibles antes de una transacción sin contacto, el SDK actualiza el `IAD` (etiqueta EMV `9F10`, Datos de aplicación del emisor):

* Desplazamiento inicial: byte 18
* Longitud máxima del IAD: 32 bytes
* Longitud máxima de los datos de transacción de la cartera: 15 bytes

## Integración del SDK

### Establecer el modo de datos de transacción de la cartera

Establezca el modo de datos de transacción de la cartera antes de que comience la transacción.

Use `PaymentBusinessService.setWalletTransactionDataMode(WalletTransactionDataMode)` para seleccionar cómo el SDK proporciona los datos de transacción de la cartera para el siguiente pago.

Modos disponibles:

* **Modo de almacenamiento:** Use los datos de transacción de la cartera predeterminados almacenados para la tarjeta digital.
* **Modo efímero:** Establezca datos de transacción de la cartera solo para la siguiente transacción. Estos datos no se almacenarán.

{% hint style="warning" %}
El modo de datos de transacción de la cartera se restablece:

* cuando cambia la tarjeta durante una transacción. Consulte [Gestionar un cambio de tarjeta durante una transacción](#handle-a-card-change-during-a-transaction).
* después de la transacción, independientemente del estado (éxito, fallo o cancelación)
  {% endhint %}

#### Usar el modo de almacenamiento

En el siguiente fragmento de código, la aplicación de cartera digital notifica al NFC Wallet SDK que use los datos persistentes de transacción de la cartera para la siguiente transacción.

{% code lineNumbers="true" %}

```java
// Establecer los datos de transacción de la cartera predeterminados para una transacción de pago.
PaymentBusinessManager.getPaymentBusinessService().
setWalletTransactionDataMode(WalletTransactionDataMode.storage());
```

{% endcode %}

{% hint style="info" %}
Consulte [Administrar datos persistentes de transacción de la cartera](#manage-persistent-wallet-transaction-data) para obtener detalles sobre cómo establecer datos persistentes de transacción de la cartera para cada tarjeta digital.
{% endhint %}

#### Usar el modo efímero

En el siguiente fragmento de código, la aplicación de cartera digital proporciona al NFC Wallet SDK los datos efímeros de transacción de la cartera para la siguiente transacción.

Para Mastercard, la carga útil puede contener hasta 14 bytes. Para PURE, puede contener hasta 15 bytes.

{% code overflow="wrap" lineNumbers="true" %}

```java
// Establecer datos personalizados de transacción de la cartera para una transacción de pago.
byte[] walletTransactionData = new byte[]{(byte) 0x0a, (byte) 0x0c, (byte) 0x0f, (byte) 0x0d, (byte) 0xae, (byte) 0xdd, (byte) 0xee, (byte) 0xaa};

PaymentBusinessManager.getPaymentBusinessService().
setWalletTransactionDataMode(WalletTransactionDataMode.ephemeral(walletTransactionData));
```

{% endcode %}

{% hint style="info" %}
NFC Wallet SDK rellena los datos de transacción de la cartera PURE con `00` bytes cuando es necesario para alcanzar 15 bytes.\
NFC Wallet SDK no rellena los datos de transacción de la cartera Mastercard.
{% endhint %}

### Administrar datos persistentes de transacción de la cartera

Los datos de transacción de la cartera almacenados están asociados a una tarjeta digital. El SDK usa este valor si selecciona el **modo de almacenamiento**.

#### Establecer datos persistentes de transacción de la cartera

Use `DigitalizedCard.setWalletTransactionData(byte[] walletTransactionData)` para establecer datos persistentes de transacción de la cartera.

* Pase hasta 14 bytes `byte[]` para Mastercard 2.3.
* Pase hasta 15 bytes `byte[]` para PURE.

{% code lineNumbers="true" expandable="true" %}

```java
String tokenId = "tokenId";
DigitalizedCard digitalizedCard = DigitalizedCardManager.getDigitalizedCard(tokenId);

// Datos de transacción de la cartera que se van a establecer (14 bytes según Mastercard)
byte[] walletTransactionDataToSet = new byte[]{
    (byte) 0xaa, (byte) 0xba, (byte) 0xca, (byte) 0xda,
    (byte) 0xea, (byte) 0xfa, (byte) 0xff, (byte) 0xaa,
    (byte) 0xba, (byte) 0xca, (byte) 0xda, (byte) 0xea,
    (byte) 0xfa, (byte) 0xff
};

try {
    // Establecer los datos de transacción de la cartera en la tarjeta
    digitalizedCard.setWalletTransactionData(walletTransactionDataToSet);
    
    // ... Lógica de la aplicación aquí .

} catch (InternalComponentException e) {
    // Gestionar problemas como esquema no compatible, error de inicialización o problema de longitud de datos
}
```

{% endcode %}

{% hint style="info" %}
NFC Wallet SDK rellena los datos de transacción de la cartera PURE con `00` bytes cuando es necesario para alcanzar 15 bytes.\
NFC Wallet SDK no rellena los datos de transacción de la cartera Mastercard.
{% endhint %}

#### Borrar datos persistentes de transacción de la cartera

Use `DigitalizedCard.setWalletTransactionData(byte[] walletTransactionData)` y pase `null` para borrar el valor almacenado para la tarjeta digital

{% code lineNumbers="true" expandable="true" %}

```java
String tokenId = "tokenId";
DigitalizedCard digitalizedCard = DigitalizedCardManager.getDigitalizedCard(tokenId);

try {
    // Borrar los datos persistentes de transacción de la cartera
    digitalizedCard.setWalletTransactionData(null);

} catch (InternalComponentException e) {
    // Gestionar problemas como esquema no compatible, error de inicialización o problema de longitud de datos
}
```

{% endcode %}

#### Recuperar datos persistentes de transacción de la cartera

Use `DigitalizedCard.retrieveWalletTransactionData()` para recuperar los datos de transacción de la cartera asociados a la tarjeta digital.

{% code lineNumbers="true" expandable="true" %}

```java
String tokenId = "tokenId";
DigitalizedCard digitalizedCard = DigitalizedCardManager.getDigitalizedCard(tokenId);

try {
    // Recuperar los datos de transacción de la cartera de la tarjeta
    byte[] retrievedWalletTransactionData = digitalizedCard.retrieveWalletTransactionData();
    if (retrievedWalletTransactionData != null) {
        // Procesar los datos recuperados aquí
    } else {
        // No se encontraron datos de transacción de la cartera 
    }

} catch (InternalComponentException e) {
    // Gestionar problemas como esquema no compatible, error de inicialización o problema de longitud de datos
}
```

{% endcode %}

### Gestionar un cambio de tarjeta durante una transacción

Si la tarjeta cambia durante la transacción, la **aplicación de cartera digital** debe establecer el modo de datos de transacción de la cartera nuevamente después de una devolución de llamada exitosa de activación de la tarjeta.

{% code lineNumbers="true" %}

```java
final PaymentBusinessService paymentBusinessService = PaymentBusinessManager.getPaymentBusinessService();
CardActivationListener activationListener = new CardActivationListener() {
  @Override
  public void onCardActivated(PaymentServiceErrorCode code) {
    if (code == PaymentServiceErrorCode.SUCCESS) {
      try {
        PaymentBusinessManager.getPaymentBusinessService()
            .setWalletTransactionDataMode(WalletTransactionDataMode.storage());
      } catch (InternalComponentException e) {
        // Gestionar excepciones.
      }
    }
  }
};

// Iniciar un pago con una tarjeta diferente.
paymentBusinessService.activateNonDefaultCard(
    cardBTokenId,
    PaymentType.CONTACTLESS,
    keepAsDefault,
    paymentServiceListener,
    activationListener
);
```

{% endcode %}


---

# 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/nfc-wallet-sdk-android/es/additional-features/add-wallet-transaction-data.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.
