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

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

## Descripción general

Puedes adjuntar datos de transacción de la billetera a un pago sin contacto.

El backend del emisor puede usar estos datos durante el procesamiento de la autorización.

Los datos de transacción de la billetera se definen por tarjeta digital.

La aplicación de billetera digital puede proporcionarlo en dos modos:

* **Persistente**: El SDK de NFC Wallet almacena los datos en almacenamiento seguro. Persiste entre reinicios de la aplicación.
* **Efímero**: La aplicación de billetera digital proporciona el valor solo para una transacción.

La aplicación de billetera digital decide si incluir los datos de transacción de la billetera en cada pago.

{% hint style="info" %}
El SDK de NFC Wallet solo admite datos de transacción de la billetera para los perfiles sin contacto de Mastercard y PURE.
{% endhint %}

### Especificación de Mastercard (MCBP 2.3)

El SDK de NFC Wallet 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 de NFC Wallet actualiza el `IAD` (EMV tag `9F10`, Datos de aplicación del emisor):

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

{% hint style="info" %}
En MCBP 2.3, esta función se denomina **información propietaria de la billetera**.
{% endhint %}

### Especificación PURE

El SDK de NFC Wallet también admite datos de transacción de la billetera para los perfiles sin contacto PURE.

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

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

## Integración del SDK

### Establece datos persistentes de transacción de la billetera para Mastercard

Usar `DigitalCard.setWalletTransactionData` para establecer datos persistentes de transacción de la billetera:

* Pasa un valor de 14 bytes `Data` valor para almacenar los datos de transacción de la billetera para esta tarjeta digital.
* Pasa `nil` para borrar el valor almacenado de esta tarjeta digital.

```swift
do {      
    // Establece los datos de transacción de la billetera para Mastercard, longitud de datos = 14 bytes.
    let walletData = Data([0x57, 0x61, 0x6C, 0x6C, 0x65, 0x74, 0x44,
                            0x61, 0x74, 0x61, 0x00, 0x00, 0x00, 0x00])      
    try await digitalCard.setWalletTransactionData(walletData)
    // Borra los datos de transacción de la billetera para esta tarjeta
    try await digitalCard.setWalletTransactionData(nil)  
} catch {
    // Maneja el error  
}
```

### Establece datos persistentes de transacción de la billetera para PURE

Usar `DigitalCard.setWalletTransactionData` para establecer datos persistentes de transacción de la billetera:

* Pasa un valor de 15 bytes `Data` valor para almacenar los datos de transacción de la billetera para esta tarjeta digital.
* Pasa `nil` para borrar el valor almacenado de esta tarjeta digital.

```swift
do {      
    // Establece los datos de transacción de la billetera para esta tarjeta específica
    let walletData = Data([0x57, 0x61, 0x6C, 0x6C, 0x65, 0x74, 0x44,
                            0x61, 0x74, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00])      
    try await digitalCard.setWalletTransactionData(walletData)
    // Borra los datos de transacción de la billetera para esta tarjeta
    try await digitalCard.setWalletTransactionData(nil)  
} catch {
    // Maneja el error  
}
```

### Maneja los errores

Los datos de transacción de la billetera deben cumplir los siguientes requisitos:

* Longitud para Mastercard: exactamente 14 bytes
* Longitud para PURE: exactamente 15 bytes
* Compatibilidad de esquema: solo se admiten los perfiles sin contacto de Mastercard y PURE. Si estableces datos de transacción de la billetera para otro esquema, el SDK devuelve `.schemeNotSupported`.

```swift
do {
      try await digitalCard.setWalletTransactionData(data)
  } catch DigitalCard.Error.invalidWalletTransactionData {
      // Validación de longitud basada en el esquema.
      // Para Mastercard, la longitud de los datos no es de 14 bytes. 
      // Para la tarjeta PURE, la longitud de los datos no es de 15 bytes. 
  } catch DigitalCard.Error.schemeNotSupported {
      // El esquema de la tarjeta no admite datos de transacción de la billetera (p. ej., Visa)
  } catch {
      // Otros errores
  }
```

### Proporciona datos de transacción de la billetera para un pago

Usar `startPayment()` con `ContactlessPaymentInputData` para proporcionar datos de transacción de la billetera durante un pago sin contacto.

`ContactlessPaymentInputData` admite dos modos de datos de transacción de la billetera:

* `.storage`: Usa el valor almacenado en almacenamiento seguro (si se ha establecido).
* `.ephemeral`: Proporciona un valor solo para esta transacción.

#### Modo de almacenamiento

```swift
let paymentInputData = ContactlessPaymentInputData(
    digitalCardID: card.id,
    walletTransactionDataMode: .storage
)
```

#### Modo efímero

```swift
let paymentInputData = ContactlessPaymentInputData(
    digitalCardID: card.id,
    walletTransactionDataMode: .ephemeral(customData)
)
```

#### Inicia un pago

```swift
// inicia el pago con contactlessPaymentInputData proporcionado
// caso de uso: modo manual (con interacción del usuario)
await session.startPayment(with contactlessPaymentInputData: contactlessPaymentInputData)
```


---

# 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-ios/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.
