Acepta pagos presenciales a través de una terminal directamente desde tu app de Android. El SDK de Android te permite comunicarte de forma segura con una terminal y ejecutar distintas operaciones, con control total de la interfaz de usuario de tu aplicación.A diferencia de la integración App to App, la integración por SDK no requiere que tengas instalada la app POS en tu dispositivo.
Si usas una versión anterior a 2.8.1 y planeas actualizar la versión del SDK en tu app, ten en cuenta el permiso anterior para evitar problemas al inicializar el SDK.
Vincula la terminal con tu dispositivo móvil por Bluetooth para que el SDK pueda encontrarla.Obtén los lectores disponibles con el método getListBluetoothReaders:
Implementa el método resultListReaders de la interfaz EventListenerConnection para escuchar el resultado:
Permisos de Bluetooth en Android con API level inferior a 31#
En dispositivos con un API level de Android inferior a 31, debes verificar los permisos de Bluetooth:
Nota
El método resultListReadersno está disponible para las terminales Ultra y Ultra P.
Cuando selecciones un lector entre las opciones devueltas, usa el método connectReader. Obtén los parámetros type, macAddress y name del objeto BluetoothDevice que seleccionaste antes.
Implementa el método resultReaderConnect de la interfaz EventListenerConnection para escuchar el resultado de la conexión:
Usa el método doTransaction para iniciar una transacción con la terminal. Debes establecer los parámetros obligatorios al momento de hacer la solicitud.
Propiedad
Tipo
Obligatorio
Descripción
context
Object
SÍ
android.content.Context.
amount
Number
SÍ
Monto de la transacción.
description
String
SÍ
Descripción de la transacción.
location
Object
SÍ
Instancia del objeto android.location.Location con la latitud y la longitud del origen de la transacción.
tip
Number
NO
Propina de la transacción (si aplica).
listener
Object
SÍ
Instancia de EventListenerTransaction.
rotationSignature
Boolean
NO
Usa true para mostrar la pantalla de firma en vertical o false para mostrarla en horizontal.
Para usar este método, asegúrate de incluir primero el siguiente import:
Envía una solicitud a la terminal para iniciar una transacción:
Define eventListener como un objeto que implemente la interfaz EventListenerTransaction para escuchar los eventos de la transacción:
Existen otros métodos que te permiten cubrir correctamente los distintos flujos de pago.
El SDK lo llama para indicar que la tarjeta se leyó por banda magnética, así que debes invocar el método onContinueTransactionWithMagneticCard() para continuar con el flujo de pago:
El SDK llama automáticamente al método doOnTransaction después de invocar onMagneticCardFound para continuar la transacción.
Si la tarjeta leída tiene más de una opción de pago, el SDK llama al método selectAplication con la lista de opciones disponibles para que selecciones una y continúes la operación:
Para continuar con la transacción, llama a BluetoothReaderTransaction.continueWithAppIndex(itemSelected) enviando la opción seleccionada.
Si la venta es mayor o igual a $300 MXN, se llama al callback onMsiDefined con la lista de todas las opciones Q6Descriptor disponibles para diferir la transacción.
Nota
Debes implementar este callback aunque no planees ofrecer la opción de diferido, para poder continuar el flujo de pago durante una transacción.
Si no quieres diferir una venta, elige la última opción devuelta en la lista Q6Descriptor (Q6Descriptor{installments=0, minAmount=0, commission=0}).Ejemplo de valores Q6Descriptor devueltos
Continúa el proceso llamando al método continueTransactionWithMSI una vez que hayas seleccionado la opción de diferido correcta:
Autentica al tarjetahabiente con su número de identificación personal (PIN) o con una firma electrónica para procesar la transacción. El tipo de autenticación depende de la tarjeta.
Implementa el callback startForActivityResult(intent, code) o activityResultLauncher.Launch(intent) para realizar la autenticación con firma electrónica:
Implementa la función BluetoothReaderTransaction.continueTransactionWithSignature(result.data) para obtener el resultado de la activity.
Si la operación se aborta —por ejemplo, porque la terminal se desconectó o se agotó el tiempo de lectura de la tarjeta—, se ejecuta el callback onTransactionAborted para indicar el resultado de la operación.