> 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/transit-digitization/es/implementar-apple-transit/ticketing-basado-en-cuenta-abt/compra-de-producto-tarifario-posterior-al-aprovisionamiento-en-la-aplicacion.md).

# Compra de producto tarifario posterior al aprovisionamiento en la aplicación

El flujo de compra de producto tarifario posterior a la provisión dentro de la aplicación (In-App Post-Provisioning Fare Product Purchase) es iniciado por el usuario directamente a través de la aplicación iOS del operador de transporte. El objetivo principal es que el usuario compre un producto tarifario dentro de la aplicación y que éste se aplique sin problemas a su tarjeta de transporte en Apple Wallet para su uso inmediato.

### Flujo de trabajo <a href="#workflow" id="workflow"></a>

Los siguientes pasos de alto nivel describen el flujo de compra de producto tarifario posterior a la provisión dentro de la aplicación:

1. **Selección del producto tarifario y pago**: El usuario selecciona el producto tarifario que desea comprar desde la aplicación iOS del operador de transporte. Puede incluir añadir saldo almacenado a un saldo existente o comprar/renovar un producto tarifario.
2. **Recuperación del paquete y actualización de la vista en Wallet**: Al recibir la solicitud updateBundle, Apple solicita el paquete de provisión que contiene los detalles de la tarjeta a D1 Transit.\
   Para cualquier actualización de saldo o renovación de producto tarifario, D1 Transit utiliza el servicio de notificaciones push de Apple (APNs) para actualizar Apple Wallet con los valores correctos.

#### Selección del producto tarifario y pago <a href="#fare-product-selection-and-payment" id="fare-product-selection-and-payment"></a>

Antes de que comience el flujo de trabajo, el usuario debe seleccionar un producto tarifario elegible dentro de la aplicación iOS del operador de transporte para añadirlo a su tarjeta de transporte.

Una vez seleccionado un producto tarifario, la aplicación debe mostrar opciones de pago para que el usuario complete la compra. El usuario puede entonces elegir su método de pago preferido entre las opciones disponibles.

**Escenarios de error**

**Compra o renovación no permitida**

Si la compra o renovación de un producto tarifario está prohibida debido a reglas de negocio (p. ej., tarjeta caducada o producto tarifario no elegible), la aplicación iOS del operador de transporte deberá indicarlo al usuario.

#### Recuperación del paquete y actualización de la vista en Wallet <a href="#bundle-retrieval-and-wallet-display-update" id="bundle-retrieval-and-wallet-display-update"></a>

Después de comprar o renovar con éxito un producto tarifario, el Emisor de Transporte (Transit Issuer) deberá enviar una solicitud a D1 Transit indicando que se deben actualizar los metadatos de la cuenta de la tarjeta.

D1 Transit notifica a Apple realizando una solicitud a la API updateBundle, con el parámetro intentionType establecido en updatePass.

Al recibir la solicitud updateBundle, Apple recupera el paquete de provisión realizando una solicitud getProvisioningBundle a D1 Transit.

Una vez que el paquete es devuelto a Apple, D1 Transit notifica al Emisor de Transporte que el paquete se actualizó correctamente.

Para las actualizaciones de saldo, el Emisor de Transporte notifica a D1 Transit usando handleEvent. Se utiliza el servicio de notificaciones push de Apple (APNs) para asegurar que Apple Wallet refleje la información más reciente.

**Escenarios de error**

**No hay solicitud de Apple para obtener el paquete de provisión**

D1 Transit define un período de tiempo de espera entre la recepción de la respuesta updateBundle y la solicitud getProvisioningBundle por parte de Apple.

Si la solicitud getProvisioningBundle no es recibida por D1 Transit dentro de este período de tiempo de espera, D1 Transit aplicará una política de reintento configurada.

Si se agotan todos los intentos de reintento y la solicitud getProvisioningBundle aún no se recibe, D1 Transit notifica el fallo al Emisor de Transporte.

**Token de autenticación no autorizado**

Cuando la tarjeta se provisiona, Apple registra el dispositivo para transacciones con D1 Transit llamando al endpoint transactionNotifications/register de D1 Transit. En respuesta, D1 Transit devuelve un authenticationToken, que se almacena en el dispositivo. Si el dispositivo realiza una solicitud con un authenticationToken caducado, D1 Transit devuelve un estado HTTP 401, lo que obliga al dispositivo a volver a registrarse para transacciones.

<figure><img src="/spaces/SokLBgfEhZisVFcUdPiW/files/ZRTsZ7ZhHSndMJayYwds" alt=""><figcaption></figcaption></figure>

<figure><img src="/spaces/SokLBgfEhZisVFcUdPiW/files/JttO5svCFHBDPLUGUzxH" alt=""><figcaption></figcaption></figure>


---

# 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/transit-digitization/es/implementar-apple-transit/ticketing-basado-en-cuenta-abt/compra-de-producto-tarifario-posterior-al-aprovisionamiento-en-la-aplicacion.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.
