Ciclo de vida de la transacción
Comprender el ciclo de vida completo de la transacción garantiza la implementación de un flujo de pago robusto y fiable. Esta página explica el viaje de extremo a extremo de un pago Tap on Phone, desde la comprobación del estado inicial del terminal hasta la determinación del resultado final de la transacción.
El flujo de pago estándar
Una transacción de pago exitosa generalmente sigue una secuencia estándar de eventos entre tu app cliente y la app Tap on Phone.
- Verificación de Estado (Opcional, pero Recomendada): Antes de iniciar un pago, tu app transmite (broadcasts) una solicitud de estado. Esto confirma que la app Tap on Phone está en el estado
Initialized. Si el estado esNone, debes solicitar al comercio que inicialice el POS. - Atestación Proactiva (Opcional, pero Recomendada): Para evitar retrasos inesperados en la interfaz de usuario mientras el cliente espera, tu app transmite (broadcasts) una solicitud de atestación. Esto garantiza que el token de seguridad del dispositivo sea válido antes de iniciar la interfaz de pago.
- Iniciación de Intent: Tu app inicia la
POSActivityde Tap on Phone utilizando un Android Intent. Debes pasar los detalles de la transacción (como el importe en céntimos, el tipo de transacciónPURCHASEy tus credenciales de SSO). - Ejecución del Pago: La app Tap on Phone toma el control de la pantalla. Solicita al cliente que acerque su tarjeta o dispositivo, lee los datos de forma segura, solicita un PIN si es necesario y se comunica con el backend para autorizar el pago.
- Callback de Resultado: Una vez finalizado el pago, la app Tap on Phone se cierra y devuelve un
ActivityResulta tu app.
Determinación del estado final
Cuando tu app recibe el ActivityResult, debes evaluar campos específicos para determinar si el pago se ha realizado correctamente.
RESULT_CANCELED: El usuario canceló manualmente la transacción (por ejemplo, pulsando el botón de retroceso), o se produjo un error fatal antes de que la transacción pudiera conectarse online. No se genera ningún recibo.RESULT_OK: El proceso de transacción se completó y se generó un recibo.
RESULT_OK no significa que el pago haya sido aprobado.** Simplemente significa que el proceso ha finalizado sin un error fatal del sistema.
Para determinar si el pago se ha aprobado realmente, debes inspeccionar el extra status devuelto dentro del intent RESULT_OK:
- Si
statusesAPPROVED, el pago se ha realizado correctamente. - Si
statusesDECLINED, el pago fue denegado por el emisor o la red. Debes comprobar los camposdeclineCauseydeclineErrorpara entender el motivo.
Gestión de respuestas no recibidas
En entornos móviles, las aplicaciones pueden fallar (crash), o el sistema operativo Android podría cerrar tu app mientras está en segundo plano esperando a que finalice la app Tap on Phone.
Si tu app nunca recibe la respuesta del intent de transacción, no debes asumir que la transacción ha fallado. La app Tap on Phone podría haber procesado el pago correctamente mientras tu app estaba desconectada.
El flujo de recuperación
Para recuperar un resultado de transacción no recibido, utiliza el broadcast de estado asíncrono:
- Capturar el ID de la Transacción: Cuando inicias el intent de pago, la app Tap on Phone transmite un
sdkTransactionIden cuanto comienza la transacción. Tu app debe escuchar elTRANSACTION_BROADCAST_RESPONSEy guardar temporalmente este UUID. - Esperar: Si tu app pierde el resultado final, espera al menos de 5 a 10 segundos para asegurarte de que el backend ha procesado completamente la transacción.
- Consultar el Estado: Transmite un
TRANSACTION_STATUS_BROADCASTque contenga el UUID guardado. - Procesar el Resultado: La app Tap on Phone responde con los detalles completos del recibo (lo que te permite comprobar si fue
APPROVEDoDECLINED) o con un error.
Si el broadcast de recuperación devuelve un error, recomendamos reintentarlo una vez para descartar problemas temporales de red. Si falla por segunda vez, puedes considerar de forma segura que la transacción ha sido denegada.