> 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 billetera

## Resumen

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

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

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

La aplicación de la billetera 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, el modo de datos de transacción de la billetera debe configurarse 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 billetera 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 desde `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 de Mastercard **MCBP 2.3**.

Si los datos de transacción de la billetera 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 billetera: 14 bytes

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

#### PURE sin contacto

Si los datos de transacción de la billetera 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 billetera: 15 bytes

## Integración del SDK

### Configurar el modo de datos de transacción de la billetera

Configure el modo de datos de transacción de la billetera 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 billetera para el siguiente pago.

Modos disponibles:

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

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

* al cambiar de 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 modo de almacenamiento

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

{% code lineNumbers="true" %}

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

{% endcode %}

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

#### Usar modo efímero

En el fragmento de código siguiente, la aplicación de la billetera digital proporciona al NFC Wallet SDK los datos efímeros de transacción de la billetera 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 billetera 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 billetera PURE con `00` bytes cuando es necesario para alcanzar 15 bytes.\
NFC Wallet SDK no rellena los datos de transacción de la billetera Mastercard.
{% endhint %}

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

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

#### Configurar datos persistentes de transacción de la billetera

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

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

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

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

// Datos de transacción de la billetera 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 billetera 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 billetera PURE con `00` bytes cuando es necesario para alcanzar 15 bytes.\
NFC Wallet SDK no rellena los datos de transacción de la billetera Mastercard.
{% endhint %}

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

Use `DigitalizedCard.setWalletTransactionData(byte[] walletTransactionData)` y pase `null` para borrar el valor almacenado de 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 billetera
    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 billetera

Use `DigitalizedCard.retrieveWalletTransactionData()` para recuperar los datos de transacción de la billetera 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 billetera 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 billetera 
    }

} 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 la billetera digital** debe configurar de nuevo el modo de datos de transacción de la billetera después de una devolución de llamada de activación de tarjeta exitosa.

{% 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.
