# Flujo de la transacción

Esta página detalla el flujo completo de la transacción para la integración Get Smart App2App, desde la iniciación hasta la finalización.

## Resumen

La integración App2App sigue un modelo síncrono de petición-respuesta donde tu aplicación inicia una transacción, la aplicación Get Smart la procesa y el control vuelve a tu aplicación con el resultado.

## Ciclo de vida de la transacción

Una transacción completa pasa por cuatro fases distintas desde la iniciación hasta la finalización. Comprender cada fase te ayudará a implementar la gestión de errores adecuada y a administrar la experiencia del usuario de forma eficaz.

**Fase 1: Inicialización**

Tu aplicación prepara la petición de transacción reuniendo los datos de la misma (importe, tipo, número de pedido), creando un Intent con el nombre de acción específico y añadiendo los parámetros necesarios como extras del Intent.

**Fase 2: Lanzamiento**

Tu aplicación lanza el Intent mediante `startActivityForResult` y transfiere el control a la aplicación Get Smart. Si la app Get Smart no está instalada, se lanza una excepción `ActivityNotFoundException` que tu aplicación debe gestionar.

**Fase 3: Procesamiento**

La aplicación Get Smart toma el control para mostrar la interfaz de pago, leer la tarjeta, comunicarse con los sistemas de autorización, gestionar la impresión de boletas y preparar el Intent de resultado con los detalles de la transacción.

**Fase 4: Finalización**

El control vuelve a tu aplicación a través del callback `onActivityResult`. Tu aplicación verifica el código de petición, comprueba el código de resultado para determinar si el flujo se completó o se canceló, analiza los datos de respuesta de los extras del Intent y procesa el resultado de acuerdo con tu lógica de negocio.

## Diagrama de flujo detallado

El siguiente diagrama ilustra el flujo completo de la transacción, mostrando la secuencia de operaciones y el intercambio de datos entre tu aplicación y la aplicación Get Smart.

![](https://static-devportal-ux.sensedia-eng.com/Pagonxt/staging/documentations/diagram-transaction-flow-1773249467681-kbs74v7x.png)

## Códigos de resultado

Los resultados de las transacciones se comunican a través de dos niveles de códigos de estado: los códigos de resultado estándar de Android indican si el flujo se completó, mientras que los valores de resultado específicos de la transacción indican si el pago fue autorizado.

**Códigos de resultado Android**

El parámetro `resultCode` estándar de Android indica el estado de finalización:

| Código de Resultado | Significado                                                                            |
| ------------------- | -------------------------------------------------------------------------------------- |
| `RESULT_OK`         | La app Get Smart completó su flujo y devolvió un resultado (autorización o denegación) |
| `RESULT_CANCELED`   | El usuario canceló la operación o la app abortó el flujo                               |

<Callout type="warning">

`RESULT_OK` **no** significa que el pago haya sido autorizado. Solo significa que la app Get Smart completó su proceso. Debes comprobar el extra `RESULT` para determinar el estado de autorización.

</Callout>

**Valores de resultado de la transacción**

El extra `RESULT` en el Intent de respuesta contiene el resultado de la transacción:

| Valor          | Significado                                      |
| -------------- | ------------------------------------------------ |
| `"AUTORIZADA"` | El pago fue autorizado                            |
| `"DENEGADA"`   | El pago fue denegado o falló                     |

## Tipos de transacción

La integración App2App admite dos tipos principales de transacción, cada uno con parámetros y casos de uso específicos.

**Venta**

Una transacción de compra estándar donde el importe se carga en la tarjeta del cliente y se devuelve un código de autorización si tiene éxito. Establece el parámetro `type` en `1`.

**Devolución**

Una devolución o anulación de una transacción anterior. Establece el parámetro `type` en `2` e incluye el parámetro `original_order` con el número de pedido de la transacción que se va a devolver.

## Gestión de boletas

La impresión de boletas es gestionada íntegramente por la aplicación Get Smart, eliminando la necesidad de que tu aplicación gestione el hardware de impresión o el formato de los recibos.

**Boleta del Comercio** - Se imprime automáticamente tras una transacción con éxito. Contiene los detalles de la transacción y las firmas necesarias para el mantenimiento de registros.

**Boleta del Cliente** - La app Get Smart presenta la opción de imprimir la copia del cliente. El cliente o el comercio pueden elegir si desean imprimirla.

El callback `onActivityResult` se activa solo después de que se hayan completado todos los flujos de impresión.

## Escenarios de error

Comprender los escenarios de error comunes te ayuda a implementar una gestión de errores robusta y proporcionar información clara a los usuarios cuando las transacciones no pueden completarse.

**Aplicación no instalada** - Si la app Get Smart no está instalada, Android lanza una `ActivityNotFoundException`. Tu app debe capturar esta excepción y mostrar un mensaje apropiado al usuario.

**Transacción Denegada** - Si la transacción es denegada, el `resultCode` será `RESULT_OK`, el extra `RESULT` será `"DENEGADA"`, y los extras `RESPCODE` y `ERROR_MSG` contendrán los detalles de la denegación.

**Cancelación por el Usuario** - Si el usuario cancela la transacción, el `resultCode` será `RESULT_CANCELED`. No se intentó ninguna transacción y no se produjo ninguna autorización ni denegación.

## Consideraciones de tiempo

Los tiempos de procesamiento de las transacciones varían según diversos factores, y tu aplicación debe estar diseñada para manejar estas variaciones de forma elegante.

**Duración de la transacción** - El tiempo varía según el método de lectura de tarjeta (el chip es más lento que el contactless), la conectividad de red, la impresión de boletas y el tiempo de interacción del usuario. Tu aplicación no debe agotar el tiempo de espera (timeout) mientras espera el resultado. El callback `onActivityResult` de Android siempre se activará cuando la app Get Smart finalice.

**Ciclo de vida de la Activity** - Mientras la app Get Smart está activa, tu Activity puede pausarse o detenerse, y el sistema puede recuperar recursos si la memoria es baja. Asegúrate de que tu Activity pueda manejar correctamente la recreación tras finalizar el pago.

## Próximos pasos

* Aprende a crear un pago en [Crear un pago](/es/get-smart/get-smart-app2app/transaction-guides/transactions/create-a-single-step-payment)
* Comprende cómo gestionar resultados en [Gestionar resultados de la transacción](/es/get-smart/get-smart-app2app/transaction-guides/transactions/handle-transaction-results)
* Revisa todos los parámetros de respuesta en la [Referencia de parámetros de respuesta](https://docs.globalgetnet.com/es/products/local-processor-spain/get-smart-app2app?doc=getsmart-app2app-response-api-reference)