Guia de Integración de SDK Contactless

1. Guía de Integración del SDK

Bienvenido a la Guía de Integración del SDK. Este documento le ayudará a integrar el SDK en su proyecto y ponerlo en marcha. Siga los pasos a continuación para garantizar una integración fluida.

1.1 Requisitos previos

  • Android Studio (o su IDE preferido) instalado.
  • SDK AAR del proveedor.
  • VISA SENSORY BRANDING AAR; este archivo se encuentra en el directorio /libs del proyecto de demostración.
  • Android 8.0 o superior para la versión de destino de la aplicación. El dispositivo DEBE tener un lector NFC.

1.2 Configuración del proyecto y uso

Paso 1: Agregar el SDK a la dependencia de Gradle de su proyecto

Agregue las siguientes líneas a su archivo build.gradle:
groovy
dependencies { /** * SDK FTT and VISA * * Both are required to use the SDK */ api files('libs/aggressive_protected_2_0_81_ftcontactlesslib_release_develop_with_pin_SANDBOX.aar') api files('libs/VisaSensoryBranding.aar') // Necessary dependencies for the SDK implementation group: 'com.google.android.gms', name: 'play-services-base', version: '16.0.1' implementation group: 'com.google.android.gms', name: 'play-services-safetynet', version: '16.0.0' implementation group: 'com.google.android.gms', name: 'play-services-tasks', version: '16.0.1' implementation group: 'com.google.android.gms', name: 'play-services-basement', version: '16.0.1' implementation group: 'com.google.android.gms', name: 'play-services-location', version: '17.0.0' implementation("com.google.android.play:integrity:1.0.2") implementation 'org.apache.commons:commons-lang3:3.1' implementation 'commons-logging:commons-logging:1.1' implementation 'commons-validator:commons-validator:1.6' implementation 'org.apache.httpcomponents.client5:httpclient5:5.0.3' implementation 'org.apache.httpcomponents.core5:httpcore5:5.0' implementation 'org.slf4j:slf4j-api:1.7.30' implementation 'androidx.security:security-crypto:1.1.0-alpha05' implementation 'com.google.crypto.tink:tink-android:1.12.0' implementation('com.scottyab:rootbeer-lib:0.1.1') }

Paso 2: Agregar la aplicación a los sistemas FTT mediante ATC

Es necesario compartir los siguientes campos con ACT para el registro en los sistemas FTT y así inicializar el SDK:
  • applicationId en el archivo build.gradle
  • versionName en el archivo build.gradle
information icon

Asegúrese de que estos campos estén correctamente configurados y sean accesibles para la inicialización del SDK.

Paso 3: Configurar la API de integridad de Google y Huawei SafetyDetect

Es necesario configurar la API de integridad de Google Play y Huawei SafetyDetect (si es compatible con dispositivos Huawei). Comparta las credenciales resultantes con los sistemas FTT.

Google Play Integrity API
  1. Habilita la API
    • Google Play Integrity API
    • Ve a https://console.cloud.google.com/
    • Selecciona o crea tu proyecto
    • Ve a API y Servicios > Biblioteca
    • Busca la API de Integridad de Google Play y habilítala
  2. Obtén las credenciales JSON
    • Ve a API y Servicios > Credenciales
    • Crea una cuenta de servicio y asígnale el rol de usuario de Integridad de Google Play
    • Descarga y comparte la clave JSON de forma segura con los sistemas FTT
  3. Obtén el ID del proyecto
    • Ve a IAM y Administración > Configuración
    • Copia el ID del proyecto y compártelo
Huawei SafetyDetect API
  1. Habilita la API de SafetyDetect en Huawei AppGallery Connect.
  2. Genera y comparte las credenciales JSON de SafetyDetect con los sistemas FTT.

Paso 4: Inicialización del SDK

En tu MainActivity o actividad de punto de entrada, inicializa el SDK. Consulta el método initService o la aplicación de demo.

Paso 5: Incorporación del ID del dispositivo

Tras la primera inicialización del SDK, recibirá un ID del dispositivo. Este ID debe completar el proceso de incorporación para habilitar las transacciones.

information icon

Este paso es crucial para vincular el dispositivo al sistema de forma segura y habilitar las capacidades de transacción. Asegúrese de gestionar la respuesta del SDK correctamente y siga los procedimientos de incorporación requeridos, descritos con el proveedor.

Paso 6: Gestión de las devoluciones de llamada del SDK

Debe implementar métodos de devolución de llamada (callbacks) para gestionar las respuestas del SDK, como las de éxito, errores y actualizaciones de estado.

Ejemplo:
java
@Override public void onDeviceIdResponse(String deviceId) { Log.i("TAG", "Device ID: " + deviceId); tvDeviceId.setText(deviceId); }

1.3 Solución de problemas

Si encuentra algún problema durante el proceso de integración, consulte las devoluciones de llamada del SDK a reasonText y reasonCode para la mayoría de los errores. Además, compruebe si hay excepciones generales y revise el seguimiento de la pila (stack trace) para diagnosticar posibles problemas.

Si la información de las devoluciones de llamada y el seguimiento de la pila no resuelve el problema y necesita crear un ticket de soporte, proporcione la siguiente información:

  • Una explicación completa de las acciones que está realizando.
  • La devolución de llamada realizada o la excepción general presentada.
  • responseCode, reasonText y seguimiento de la pila.
  • El número de serie del dispositivo, el ID del terminal y cualquier otro dato relevante que pueda ayudar a inspeccionar el problema.

Esto permitirá investigar el problema de forma más eficiente y ofrecer una solución más rápida.


2. Descripción de los métodos del SDK

information icon
Clase base para todos los métodos: ftContactlessManager, accedida vía ftContactlessManager.getManager().

2.1 Inicialización del SDK — initService

Overloads
initService(final Activity mActivity, onContactlessReaderResponse uiResponse, PinDialogStyle pinDialogStyle, boolean supportMcMaestro)
initService(final Activity mActivity, onContactlessReaderResponse uiResponse, PinDialogStyle pinDialogStyle, boolean useExternalVisaSensoryBranding, long waitMillsForSensoryBranding, boolean supportMcMaestro)
initService(final Activity mActivity, onContactlessReaderResponse uiResponse, PinDialogStyle pinDialogStyle, boolean useHuaweiSafetyDetect, String huaweiSafetyDetectAppId, boolean useExternalVisaSensoryBranding, long waitMillsForSensoryBranding, boolean supportMcMaestro)
Código de ejemplo:
java
ftContactlessManager.getManager().initService(MainMenuActivity.this, MainMenuActivity.this, pinDialogStyle, false);
ParámetroTipoDescripción
mActivityActivityIndica el contexto de la llamada de inicialización actual
uiResponseonContactlessReaderResponseInterfaz implementada en una clase que gestionará los callbacks del SDK
pinDialogStylePinDialogStyleEstilo usado para el popup de solicitud de PIN en transacciones con PIN
useHuaweiSafetyDetectbooleanBandera para usar el servicio Huawei SafetyDetect (solo dispositivos Huawei)
huaweiSafetyDetectAppIdStringId generado en la consola de Huawei para identificar la aplicación (usado para SafetyDetect)
useExternalVisaSensoryBrandingbooleanBandera para habilitar el uso de un Visa Sensory Branding externo
waitMillsForSensoryBrandinglongTiempo en milisegundos a esperar por la animación del sensory branding externo
supportMcMaestrobooleanSoporte para Maestro

2.2 Realizar transacción — doTransaction

Overloads
doTransaction(Activity mActivity, onContactlessReaderResponse uiResponse, double transactionAmount, CurrencyInfo transactionCurrency, int merchantDetailId)
doTransaction(..., int merchantDetailId, String transactionId)
doTransaction(..., int merchantDetailId, TransactionConfirmationMode confirmationMode)
doTransaction(..., int merchantDetailId, String transactionId, TransactionConfirmationMode confirmationMode)
doTransaction(Activity mActivity, onContactlessReaderResponse uiResponse, int merchantDetailId, double transactionAmount, CurrencyInfo transactionCurrency, int quotas, int extrafinancing, boolean isLoyaltyTransaction)
doTransaction(..., boolean isLoyaltyTransaction, String transactionId)
doTransaction(..., boolean isLoyaltyTransaction, TransactionConfirmationMode confirmationMode)
doTransaction(..., boolean isLoyaltyTransaction, String transactionId, TransactionConfirmationMode confirmationMode)
doTransaction(..., String transactionId, TransactionConfirmationMode confirmationMode, Boolean cybersourceApplyDecisionManager, CybersourceBillTo cybersourceBillTo)
Código de ejemplo:
java
ftContactlessManager.getManager().doTransaction(activity, MainMenuActivity.this, transactionAmount, transactionCurrency, merchantId);
ParámetroTipoDescripción
mActivityActivityContexto de la llamada actual
uiResponseonContactlessReaderResponseInterfaz de gestión de callbacks del SDK
transactionAmountdoubleMonto de la transacción actual
transactionCurrencyCurrencyInfoMoneda de la transacción actual
merchantDetailIdintId que identifica al comercio usado en la transacción
quotasintCuotas usadas; las cuotas permitidas se devuelven en el objeto de detalles del comercio
extrafinancingintFinanciamiento extra usado; las opciones permitidas se devuelven en el objeto de detalles del comercio
isLoyaltyTransactionbooleanIndica si la transacción es de fidelización, solo si el comercio lo permite
transactionIdStringId de la transacción en curso
confirmationModeTransactionConfirmationModePor defecto AUTOMATIC_CONFIRMATION; si se define USER_CONFIRMATION, la transacción espera a que se llame transactionConfirmation
cybersourceBillToCybersourceBillToObjeto opcional con información adicional para Cybersource
cybersourceApplyDecisionManagerbooleanSi es TRUE, se incluye la información de cybersourceBillTo en la transacción; si es FALSE, se ignora aunque se haya provisto

2.3 Transacción con impuesto — doTaxTransaction

Overloads
doTaxTransaction(Activity mActivity, onContactlessReaderResponse uiResponse, int merchantDetailId, double transactionBaseAmount, CurrencyInfo transactionCurrency, int quotas, double transactionTaxAmount, double transactionTaxAmountDiscounted, int extrafinancing, boolean isLoyaltyTransaction)
doTaxTransaction(..., boolean isLoyaltyTransaction, String transactionId)
doTaxTransaction(..., boolean isLoyaltyTransaction, TransactionConfirmationMode confirmationMode)
doTaxTransaction(..., boolean isLoyaltyTransaction, String transactionId, TransactionConfirmationMode confirmationMode)
Código de ejemplo:
java
ftContactlessManager.getManager().doTaxTransaction(activity, MainMenuActivity.this, merchantId, transactionBaseAmount, transactionCurrency, quotas, transactionTaxAmount, transactionTaxAmountDiscounted, extrafinancing, isLoyaltyTransaction);
ParámetroTipoDescripción
mActivityActivityContexto de la llamada actual
uiResponseonContactlessReaderResponseInterfaz de gestión de callbacks del SDK
merchantDetailIdintId que identifica al comercio
transactionBaseAmountdoubleMonto base de la transacción
transactionCurrencyCurrencyInfoMoneda de la transacción
quotasintCuotas usadas
transactionTaxAmountdoubleMonto total, baseAmount + ISV Tax
transactionTaxAmountDiscounteddoubleMonto con descuento, transactionTaxAmount − ISV discount
extrafinancingintFinanciamiento extra usado
isLoyaltyTransactionbooleanMarca de transacción de fidelización
transactionIdStringId de la transacción en curso
confirmationModeTransactionConfirmationModeVer descripción en doTransaction

2.4 Transacción manual — doManualTransaction

Código de ejemplo:
java
ftContactlessManager.getManager().doManualTransaction(activity, MainMenuActivity.this, transactionAmount, transactionCurrency, selectedMerchantDetail.getId(), Pan, date, cvc, description);
ParámetroTipoDescripción
mActivityActivityContexto de la llamada actual
uiResponseonContactlessReaderResponseInterfaz de gestión de callbacks del SDK
transactionAmountdoubleMonto de la transacción
transactionCurrencyCurrencyInfoMoneda de la transacción
merchantDetailIdintId del comercio
PANStringNúmero de cuenta principal de la tarjeta
dateStringFecha de vencimiento de la tarjeta
CVCStringCVC de la tarjeta
saleDescriptionStringDescripción breve de la transacción manual

2.5 Transacción manual con impuesto — doManualTaxTransaction

Código de ejemplo:
java
ftContactlessManager.getManager().doManualTaxTransaction(activity, MainMenuActivity.this, TransactionBaseAmount, TransactionCurrency(), selectedMerchantDetail.getId(), pan, date, cvc, description, TransactionTaxAmount, TransactionTaxDiscountedAmount);
ParámetroTipoDescripción
mActivityActivityContexto de la llamada actual
uiResponseonContactlessReaderResponseInterfaz de gestión de callbacks del SDK
transactionAmountdoubleMonto de la transacción
transactionCurrencyCurrencyInfoMoneda de la transacción
merchantDetailIdintId del comercio
PANStringNúmero de cuenta principal de la tarjeta
dateStringFecha de vencimiento de la tarjeta
CVCStringCVC de la tarjeta
saleDescriptionStringDescripción breve de la transacción
transactionTaxAmountdoubleMonto total, baseAmount + ISV Tax
transactionTaxAmountDiscounteddoubleMonto con descuento, transactionTaxAmount − ISV discount

2.6 Check-In — doCheckInTransaction

Código de ejemplo:
java
ftContactlessManager.getManager().doCheckInTransaction(mActivity, MainActivity.this, merchantDetailId, transactionBaseAmount, transactionCurrency, isTaxTransaction, transactionTaxAmount, transactionTaxAmountDiscounted, transactionId, folioNumber);
ParámetroTipoDescripción
mActivityActivityContexto de la llamada actual
uiResponseonContactlessReaderResponseInterfaz de gestión de callbacks del SDK
merchantDetailIdintId del comercio
transactionBaseAmountdoubleMonto base de la transacción
transactionCurrencyCurrencyInfoMoneda de la transacción
isTaxTransactionbooleanMarca de transacción con impuesto, si el comercio lo permite
transactionTaxAmountdoubleMonto total, baseAmount + ISV Tax
transactionTaxAmountDiscounteddoubleMonto con descuento
transactionIdStringId de la transacción
folioNumberStringFolio que identifica el check-in

2.7 Check-In — Reautorización — doCheckInReauthorizationTransaction

Mismos parámetros que doCheckInTransaction (ver sección 2.6).
Código de ejemplo:
java
ftContactlessManager.getManager().doCheckInReauthorizationTransaction(mActivity, MainActivity.this, merchantDetailId, transactionBaseAmount, transactionCurrency, isTaxTransaction, transactionTaxAmount, transactionTaxAmountDiscounted, transactionId, folioNumber);

2.8 Check-Out — doCheckOutTransaction

Mismos parámetros que doCheckInTransaction (ver sección 2.6).
Código de ejemplo:
java
ftContactlessManager.getManager().doCheckOutTransaction(mActivity, MainActivity.this, merchantDetailId, transactionBaseAmount, transactionCurrency, isTaxTransaction, transactionTaxAmount, transactionTaxAmountDiscounted, transactionId, folioNumber);

2.9 Detener transacción — stopTransaction

Código de ejemplo:
java
ftContactlessManager.getManager().stopTransaction(activity, MainMenuActivity.this);
ParámetroTipoDescripción
mActivityActivityContexto de la llamada actual
uiResponseonContactlessReaderResponseInterfaz de gestión de callbacks del SDK

2.10 Enviar confirmación de transacción — transactionConfirmation

Overloads
transactionConfirmation(Activity mActivity, onContactlessReaderResponse uiResponse, boolean sendTransactionAuthorization)
transactionConfirmation(Activity mActivity, onContactlessReaderResponse uiResponse, Boolean sendTransactionAuthorization, AdditionalTransactionInfo additionalTransactionInfo)
Código de ejemplo:
java
ftContactlessManager.getManager().transactionConfirmation(activity, MainMenuActivity.this, true);
ParámetroTipoDescripción
mActivityActivityContexto de la llamada actual
uiResponseonContactlessReaderResponseInterfaz de gestión de callbacks del SDK
sendTransactionAuthorizationbooleanIndica si la transacción debe enviarse al host o no (cancelada)
additionalTransactionInfoAdditionalTransactionInfoEstructura con datos adicionales requeridos para procesar la transacción

2.11 Reembolso — doRefundTransaction

Overloads
doRefundTransaction(Activity mActivity, onContactlessReaderResponse uiResponse, double transactionAmount, CurrencyInfo transactionCurrency, String authorizationId, int merchantDetailId)
doRefundTransaction(..., int merchantDetailId, TransactionConfirmationMode confirmationMode)
Código de ejemplo:
java
ftContactlessManager.getManager().doRefundTransaction(this.activity, MainMenuActivity.this, TransactionBaseAmount, TransactionCurrency, AuthorizationId, merchantId, transactionConfirmationMode);
ParámetroTipoDescripción
mActivityActivityContexto de la llamada actual
uiResponseonContactlessReaderResponseInterfaz de gestión de callbacks del SDK
transactionAmountDoubleMonto de la transacción
transactionCurrencyCurrencyInfoMoneda usada para el reembolso
authorizationIdStringIdentificador de la transacción aprobada a reembolsar
merchantDetailIdintId del comercio vinculado
transactionConfirmationModeTransactionConfirmationModeVer descripción en doTransaction

2.12 Enviar datos del voucher — sendVoucherData

Overloads
sendVoucherData(Activity mActivity, onContactlessReaderResponse uiResponse, String signaturePath, Queue<String> userMailVoucher, String voucherComments)
sendVoucherData(..., String voucherComments, Boolean sendVoucherMail)
Código de ejemplo:
java
ftContactlessManager.getManager().sendVoucherData(activity, MainMenuActivity.this, this.signaturePath, this.userMailVoucherQueue, voucherComments, true);
ParámetroTipoDescripción
mActivityActivityContexto de la llamada actual
uiResponseonContactlessReaderResponseInterfaz de gestión de callbacks del SDK
signaturePathStringCadena con la firma del tarjetahabiente
userMailVoucherQueue<String>Cola de correos que recibirán el voucher virtual
voucherCommentsStringComentarios adicionales al voucher virtual
sendVoucherDataBooleanSi true, el voucher se envía a los correos de la lista; si false, no se envía por email pero se almacena para que el usuario lo gestione

2.13 Historial de transacciones — getHistoryTransactions

Overloads
getHistoryTransactions(Activity mActivity, onContactlessReaderResponse uiResponse)
getHistoryTransactions(Activity mActivity, onContactlessReaderResponse uiResponse, String invoiceRefNoOrTransactionId)
Código de ejemplo:
java
ftContactlessManager.getManager().getHistoryTransactions(MainMenuActivity.this, MainMenuActivity.this);
ParámetroTipoDescripción
mActivityActivityContexto de la llamada actual
uiResponseonContactlessReaderResponseInterfaz de gestión de callbacks del SDK
invoiceRefNoOrTransactionIdStringNúmero de factura o Id de transacción para recuperar solo esa transacción

2.14 Anular transacción — sendTransactionAnnulment

Código de ejemplo:
java
ftContactlessManager.getManager().sendTransactionAnnulment(activity, MainMenuActivity.this, historyItem);
ParámetroTipoDescripción
mActivityActivityContexto de la llamada actual
uiResponseonContactlessReaderResponseInterfaz de gestión de callbacks del SDK
transactionHistoryItemObjeto con todos los datos de la transacción a anular

2.15 Enviar cierre de lote — sendSettlement

Código de ejemplo:
java
ftContactlessManager.getManager().sendSettlement(activity, MainMenuActivity.this);
ParámetroTipoDescripción
mActivityActivityContexto de la llamada actual
uiResponseonContactlessReaderResponseInterfaz de gestión de callbacks del SDK

2.16 Registro de usuario — sendUserSignUp

Código de ejemplo:
java
ftContactlessManager.getManager().sendUserSignUp(activity, MainMenuActivity.this, merchantDetailId, userName, userLastName, userEmail, userPhoneNumber, userPasswordQuestion, userPasswordAnswer);
ParámetroTipoDescripción
mActivityActivityContexto de la llamada actual
uiResponseonContactlessReaderResponseInterfaz de gestión de callbacks del SDK
merchantDetailIdintId del comercio vinculado con el usuario a crear
userNameStringNombre del usuario a crear
userLastNameStringApellido del usuario a crear
userEmailStringCorreo del usuario a crear
userPhoneStringTeléfono del usuario a crear
userQuestionStringPregunta de seguridad para recuperar la contraseña
userAnswerStringRespuesta a la pregunta de seguridad

2.17 Alta rápida de comercio — sendMerchantRapidOnBoard

Código de ejemplo:
java
ftContactlessManager.getManager().sendMerchantRapidOnBoard(MainMenuActivity.this, robData);
ParámetroTipoDescripción
mActivityActivityContexto de la llamada actual
uiResponseonContactlessReaderResponseInterfaz de gestión de callbacks del SDK
robDataRapidOnBoardingDataDatos del alta rápida del comercio

2.18 Obtener Id del dispositivo — getDeviceId

Código de ejemplo:
java
ftContactlessManager.getManager().getDeviceId(MainMenuActivity.this, MainMenuActivity.this);
ParámetroTipoDescripción
mActivityActivityContexto de la llamada actual
uiResponseonContactlessReaderResponseInterfaz de gestión de callbacks del SDK

2.19 Obtener versión del SDK — getCoreVersion

Código de ejemplo:
java
ftContactlessManager.getManager().getCoreVersion();

No requiere parámetros.


2.20 Mostrar Visa Sensory Branding — showVisaSensoryBranding

Código de ejemplo:
java
ftContactlessManager.getManager().showVisaSensoryBranding(mActivity, onSensoryComplete);
ParámetroTipoDescripción
mActivityActivityActivity actual
onSensoryCompleteonSensoryBrandingCompleteInterfaz con el método onComplete, invocado al finalizar el splash de Visa

2.21 Mostrar Mastercard Sensory Branding — showMastercardSensoryBranding

Código de ejemplo:
java
ftContactlessManager.getManager().showMastercardSensoryBranding(mActivity, onSensoryComplete);
ParámetroTipoDescripción
mActivityActivityActivity actual
onSensoryCompleteonSensoryBrandingCompleteInterfaz con el método onComplete, invocado al finalizar el splash de Mastercard

3. Descripción de la interfaz de callback UI (onContactlessReaderResponse)

Todos los métodos siguientes forman parte de la interfaz onContactlessReaderResponse, que la aplicación cliente debe implementar para recibir las respuestas asíncronas del SDK.
MétodoDescripción
onProcessingCommand()Se invoca mientras el SDK está procesando un comando.
onConnectingService()Se invoca cuando el SDK envía la autenticación al host y descarga la configuración del dispositivo (IMEI).
onServiceConnected(TerminalData terminalData)Se invoca cuando el host responde con la configuración del dispositivo. Devuelve un objeto TerminalData.
onCouldNotConnectService(String reason, String responseCode)Se invoca si el mensaje de autenticación no pudo enviarse al host.
onCouldNotValidateIntegrity(String message)Se invoca si la validación de integridad determina que el dispositivo no es seguro (rooteado o SO modificado).
onPresentCardRequest()Se invoca tras llamar a doTransaction, indicando que debe acercarse la tarjeta al lector NFC.
onReadingCardData()Se invoca cuando la tarjeta ha sido tocada y se está leyendo.
onReturnCurrentTransactionInfo(CurrentTransactionInfo currentTransactionInfo, TransactionConfirmationMode confirmationMode)Se invoca tras leer la tarjeta, con datos como el monto y el nombre del tarjetahabiente. Debe seguirse con transactionConfirmation.
onSendingTransactionAuthorization()Se invoca cuando el SDK envía la autorización de la transacción actual.
onSendingTransactionRefundAuthorization()Se invoca cuando el SDK envía la autorización de un reembolso.
onSendingCheckInTransactionAuthorization()Se invoca cuando el SDK envía la autorización de un check-in.
onSendingCheckOutTransactionAuthorization()Se invoca cuando el SDK envía la autorización de un check-out.
onStoringOfflineAuthorizedTransaction()Se invoca cuando el host pierde conexión y el SDK guarda la transacción autorizada localmente.
onTransactionCancelled()Se invoca cuando la transacción ha sido cancelada.
onVoucherDataResponse(VoucherData voucherData)Se invoca cuando el host responde y la transacción es aprobada; incluye los datos del voucher.
onVoucherSent()Se invoca cuando el voucher de la transacción ha sido enviado al host.
onHistoryTransactionsResponse(TransactionsHistory transactionsHistory)Se invoca tras llamar a getHistoryTransactions, con el historial de transacciones no liquidadas.
onSettlementResponse(boolean settlementComplete, String resultMessage)Se invoca tras llamar a sendSettlement, con el estado del cierre de lote.
onSignUpUserResponse(boolean userCreated, String resultMessage, String usernameResult, String userEmail, String passwordResult)Se invoca tras llamar a sendUserSignUp, con el resultado de la creación del usuario.
onNFCStateOff()Se invoca si, al llamar doTransaction, se detecta que el NFC está apagado.
onDeviceIdResponse(String deviceId)Se invoca tras llamar a getDeviceId, devolviendo el identificador del dispositivo.
onNewDeviceIdResponse(String deviceId)Se invoca con el identificador del dispositivo tras recibir la configuración del host.
onGeneralException(GeneralException exception, String msg)Se invoca si falla una validación interna o el procesamiento de un comando.
onGeneralSecurityException(GeneralSecurityException exception)Se invoca si falla una validación de seguridad interna del dispositivo.
onTransactionConfirmed(boolean sendCurrentTransaction, TransactionConfirmationMode confirmationModeUsed)Se invoca al confirmarse la transacción, sea de forma automática o por confirmación de usuario.
onStartingAutomaticReversal()Se invoca cuando la transacción va a revertirse por motivos de seguridad.
onAutomaticReversalResponse(boolean transactionReversed, String resultMessage, String retrievalRefNo, String systemTraceNo)Se invoca cuando la transacción ha sido revertida por motivos de seguridad.

Detalle de parámetros relevantes

CallbackParámetroTipoDescripción
onServiceConnectedterminalDataTerminalDataConfiguración del dispositivo actual (IMEI)
onCouldNotConnectServicereasonStringDescripción breve del problema
onCouldNotConnectServiceresponseCodeStringCódigo de respuesta de la solicitud initService
onCouldNotValidateIntegritymessageStringDescripción breve del problema de integridad
onReturnCurrentTransactionInfocurrentTransactionInfoCurrentTransactionInfoCampos específicos de la transacción actual
onReturnCurrentTransactionInfoconfirmationModeTransactionConfirmationModeIndica si la confirmación es automática o manual
onVoucherDataResponsevoucherDataVoucherDataDatos del voucher, incluyendo el Id de autorización
onHistoryTransactionsResponsetransactionsHistoryTransactionsHistoryHistorial de transacciones no liquidadas
onSettlementResponsesettlementCompletebooleantrue si se procesó correctamente, false si no
onSettlementResponseresultMessageStringDescripción del estado del cierre
onSignUpUserResponseuserCreatedbooleanResultado del comando de creación de usuario
onSignUpUserResponseresultMessageStringDescripción del resultado
onSignUpUserResponseusernameResultStringNombre de usuario creado
onSignUpUserResponseuserEmailStringCorreo usado para crear el usuario
onSignUpUserResponsepasswordResultStringContraseña temporal generada por el host
onDeviceIdResponse / onNewDeviceIdResponsedeviceIdStringIdentificador del dispositivo actual
onGeneralExceptionexceptionGeneralExceptionEnum que describe la excepción
onGeneralExceptionmsgStringMensaje descriptivo de la excepción
onGeneralSecurityExceptionexceptionGeneralSecurityExceptionEnum que describe la excepción de seguridad
onTransactionConfirmedsendCurrentTransactionbooleantrue si la transacción fue confirmada, false si no
onTransactionConfirmedconfirmationModeUsedTransactionConfirmationModeModo de confirmación utilizado
onAutomaticReversalResponsetransactionReversedbooleantrue si la transacción fue revertida
onAutomaticReversalResponseresultMessageStringIndica si la transacción fue revertida o no
onAutomaticReversalResponseretrievalRefNoStringNúmero de referencia de recuperación de la transacción
onAutomaticReversalResponsesystemTraceNoStringNúmero de rastreo del sistema de la transacción

4. Diagramas generales del SDK

4.1 Proceso de inicialización del SDK

mermaid
sequenceDiagram participant App as Client Application participant Card as CardHolder participant SDK as T2P SDK participant Backend as FTT Backend App->>SDK: 1. Call initService SDK->>Backend: 2. Validate Device Integrity y retrieve merchant Data (request) Backend-->>SDK: 2. Respuesta de validación SDK-->>App: 3. onDeviceIdResponse (siempre) SDK-->>App: 3. onConnectingService (siempre) SDK--)App: 3. onGeneralException (si aplica) SDK--)App: 3. onCouldNotValidateIntegrity (si aplica) SDK--)App: 3. onServiceConnected (si aplica) SDK--)App: 3. onCouldNotConnectService (si aplica)
Pasos del proceso de inicialización:
  1. ftContactlessManager.getManager().initService debe llamarse antes que cualquier otro método del SDK; inicializa toda la información requerida.
  2. El SDK se conecta al backend para validar la integridad del dispositivo actual y recuperar la información del comercio asociada al serial de la aplicación.
  3. Cualquiera de los siguientes callbacks puede ser invocado por el SDK hacia la UI:
    • onDeviceIdResponse: devuelve el serial de la aplicación actual; se ejecuta siempre tras llamar a initService.
    • onConnectingService: indica que el SDK se está conectando con el backend.
    • onGeneralException: si se detecta algún problema interno, indica la descripción del mismo.
    • onCouldNotValidateIntegrity: si la validación de integridad determina que el dispositivo no es seguro.
    • onServiceConnected: se ejecuta al completarse la inicialización; el SDK devuelve un objeto TerminalData con los datos del comercio.
    • onCouldNotConnectService: si hay algún problema de comunicación con el backend.

4.2 Proceso de doTransaction

mermaid
sequenceDiagram participant App as Client Application participant Card as CardHolder participant SDK as T2P SDK participant Backend as FTT Backend App->>SDK: 1. Call doTransaction SDK--)App: 2. onGeneralException (si aplica) SDK--)App: 2. onNFCStateOff (si aplica) SDK--)App: 2. onProcessingCommand (si aplica) SDK--)App: 2. onPresentCardRequest (si aplica) Card->>SDK: 3. Usuario acerca la tarjeta SDK-->>App: 4. onReadingCardData SDK-->>App: 5. onUserCardPinRequest SDK--)App: 6. onUserCardPinCanceled (si aplica) SDK--)App: 7. onTransactionCancelled (si aplica) SDK-->>App: 8. onReturnCurrentTransactionInfo SDK-->>App: 9. onTransactionConfirmed SDK->>Backend: 10. Procesa la transacción Backend-->>SDK: 10. Resultado del procesamiento SDK-->>App: 11. onSendingTransactionAuthorization SDK-->>App: 12. onVoucherDataResponse App->>SDK: 13. Call sendVoucherData SDK-->>App: 14. onVoucherSent
Pasos del proceso doTransaction:
  1. Para iniciar un nuevo proceso de transacción, la UI debe llamar a doTransaction.
  2. La UI puede recibir, según corresponda:
    • onGeneralException: problema interno detectado, con su descripción.
    • onNFCStateOff: el NFC está apagado; debe encenderse para procesar la transacción.
    • onProcessingCommand: la transacción está en progreso.
    • onPresentCardRequest: el SDK indica que la tarjeta puede acercarse al lector NFC del dispositivo.
  3. El usuario acerca la tarjeta al dispositivo.
  4. onReadingCardData: una vez tocada la tarjeta, el SDK indica que la lectura está en progreso.
  5. onUserCardPinRequest: la transacción actual requiere ingreso de PIN; el SDK muestra el diálogo correspondiente.
  6. onUserCardPinCanceled: si se cancela el ingreso de PIN o el SDK pasa a segundo plano.
  7. onTransactionCancelled: si la transacción fue detenida con el comando stopTransaction.
  8. onReturnCurrentTransactionInfo: al completarse la lectura de la tarjeta, el SDK devuelve datos de la transacción en curso.
  9. onTransactionConfirmed: antes de enviar la transacción al backend para solicitar autorización.
  10. El SDK envía el paquete de la transacción al backend solicitando autorización, y recibe el resultado.
  11. onSendingTransactionAuthorization: indica que la transacción ya fue enviada.
  12. onVoucherDataResponse: al recibir la respuesta, el SDK la traslada a la UI mediante este callback.
  13. Desde la UI debe llamarse al método sendVoucherData.
  14. onVoucherSent: confirma que el voucher fue enviado.

4.3 Proceso de getHistoryTransactions

mermaid
sequenceDiagram participant App as Client Application participant Card as CardHolder participant SDK as T2P SDK participant Backend as FTT Backend App->>SDK: 1. Call getHistoryTransactions SDK--)App: 2. onGeneralException (si aplica) SDK-->>App: 3. onProcessingCommand SDK->>Backend: 4. Procesa la transacción Backend-->>SDK: 4. Resultado del procesamiento SDK-->>App: 5. onHistoryTransactionsResponse
Pasos del proceso getHistoryTransactions:
  1. Debe llamarse al método getHistoryTransactions.
  2. onGeneralException: si se detecta algún problema durante el proceso.
  3. onProcessingCommand: indica que el comando está siendo procesado.
  4. El SDK envía un comando al backend para recuperar todas las transacciones actuales no liquidadas.
  5. onHistoryTransactionsResponse: mediante este callback, el SDK devuelve a la UI toda la información recuperada.