Acepta pagos
Realiza operaciones directamente con una terminal desde tu aplicación punto de venta móvil en Android.
Agrega el SDK a tu proyecto
Agrega el SDK en el archivo build.gradle
de tu proyecto.
allprojects {repositories {...maven {url 'https://billpocket.jfrog.io/artifactory/billpocket-public-mobile'}}}dependencies {implementation 'com.billpocket:sdk-android:2.7.8.3'}
Agrega los siguientes plugins en tu archivo build.gradle
.
plugins {id 'kotlin-parcelize'}
Agrega los siguientes repositorios en tu archivo settings.gradle
.
dependencyResolutionManagement {repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)repositories {...maven { url "https://billpocket.jfrog.io/artifactory/billpocket-public-mobile/" }maven { url 'https://jitpack.io' }maven {url 'https://gitlab.com/api/v4/projects/4128550/packages/maven'}}}
Inicializa el SDK
Es necesario inicializar el SDK configurando tu token de usuario y el ambiente de trabajo.
val sdkMode = InitBillpocketSDK.SdkMode.TESTval userToken = "yourToken"BillpocketSDK.initSDK(context, sdkMode, userToken, eventListener)
Propiedad | Tipo | Requerido | Descripción | Valores permitidos |
---|---|---|---|---|
context | Object | Sí | android.content.Context | |
sdkMode | Object | Sí | InitBillpocketSDK.SdkMode. | TEST , PRODUCTION |
userToken | String | Sí | Token de usuario. | |
listener | Object | Sí | EventListenerInitSDK |
Envía un objeto eventListener
el cuál implementa la interfaz EventListenerInitSDK
para escuchar el resultado de la inicialización.
override fun resultInitSdk(resultInitSdk: InitSDKResult<String>) {when(resultInitSdk){is InitSDKResult.Success -> {//callback if connection is successful}is InitSDKResult.Error ->//callback if connection resulted in error}}
Conecta un lector bluetooth
Vincula la terminal con tu dispositivo móvil vía bluetooth para que pueda ser visible a través del SDK. Obtén la lista de terminales disponibles utilizando el método getListBluetoothReaders
.
BluetoothReaderList.getListBluetoothReaders(context, eventListener)
Implementa el método resultListReaders
de la interfaz EventListenerConnection
para obtener el resultado.
override fun resultListReaders(readersList: BluetoothDevicesResult<List<BluetoothDevice>>) {when(readersList){is BluetoothDevicesResult.Success -> {//callback if devices are found//we suggest you to implement a UI selector//iterating through 'readersList.data'}is BluetoothDevicesResult.Error -> {//callback if any error occurred}}}
Para dispositivos con un nivel de API inferior a 31, deberás verificar los permisos bluetooth.
override fun resultListReaders(readersList: BluetoothDevicesResult<List<BluetoothDevice>>) {when(readersList){is BluetoothDevicesResult.Success -> {if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.S)) {if ((ActivityCompat.checkSelfPermission(this,Manifest.permission.BLUETOOTH_CONNECT) ==PackageManager.PERMISSION_GRANTED) || (Build.VERSION.SDK_INT >=Build.VERSION_CODES.P)) {val reader : BluetoothDevice = readersList.data.get(0)//callback if devices are found} else{//Check bluetooth permission}} else{if(readersList.data.isNotEmpty()){val reader : BluetoothDevice = readersList.data.get(0)//callback if devices are found}}} else{val errorMessage : String =readersList.toString()}}}
Implementa el método connectReader
para obtener el elemento seleccionado de la lista de dispositivos disponibles. Obtén los datos type
, macAddress
y name
del objeto BluetoothDevice
previamente seleccionado.
BluetoothReaderList.connectReader(context, type, macAddress, name,eventListener)
Implementa el método resultReaderConnect
de la interfaz EventListenerConection
para obtener el resultado de la conexión.
override fun resultReaderConnect(resultConnection: ReaderConnectionResult<DataReader>) {when(resultConnection){is ReaderConnectionResult.Success -> {//callback if connection is successful}is ReaderConnectionResult.Error -> {//callback if connection failed}}}
Modelo de datos de la solicitud
Estos son todos los parámetros que puedes configurar al momento de realizar una solicitud.
Propiedad | Tipo | Requerido | 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 latitud y longitud desde donde se realiza la operación. |
tip | Number | No | Monto de la propina. Dos decimales. |
listener | Object | Sí | Instancia de EventListenerTransaction . |
rotationSignature | Boolean | No | Configura la pantalla para firmar la transacción en horizontal (false ) o vertical (true ). |
Operaciones
Descubre todas las operaciones disponibles a través de integraciones por Terminal SDK.
Venta
Realiza una venta por un monto fijo (incluyendo impuestos) en tu comercio a través de una terminal. La terminal te permite leer la tarjeta de tu cliente y realizar operaciones implicadas en el proceso DUKPT. La responsabilidad de tu sistema punto de venta es obtener los datos leidos de la terminal y armar el mensaje con la información requerida para enviar una solicitud. Envía la información a Kushki para su procesamiento.
Utiliza el método doTransaction
para iniciar una transacción con la terminal. Debes enviar todos los parámetros requeridos en la solicitud.
BluetoothReaderList.doTransaction(context, amount, description, location, tip, eventListener,rotationSignature)
Envía un objeto eventListener
el cuál implementa la interfaz EventListenerTransaction
para escuchar eventos de transacción.
//called while attempting a connection with the readeroverride fun onBeforeTransaction(message: String) { }//called when obtaining a response from the readeroverride fun resultStartTransaction(resultTransaction:ReaderTransactionResult<String>) {when(resultTransaction){is ReaderTransactionResult.Success -> {//reader is ready for transaction}is ReaderTransactionResult.Error -> {//reader has a communication issue}}}//called when reader is waiting for a card to execute transactionoverride fun onReaderWaitingForCard(message: String) { }//called when card is in the readeroverride fun onCardRead(message: String) { }
Descubre cómo implementar pagos diferidos, desconectar una terminal, autenticar una transacción y otros métodos disponibles en la documentación del SDK.
Respuesta
La respuesta será devuelta como uno de los siguientes callbacks, dependiendo el resultado.
onTransactionSuccessful
Este callback es llamado cuando la transacción ha sido exitosa.
override fun onTransactionSuccessful(msj: String, transactionData:DataSuccessfulTransaction){//code when a transaction is successful}
onTransactionFinished
Este callback es llamado cuando se ha realizado un cobro con una tarjeta de banda magnética o se ha producido un error durante la transacción.
//callback if transaction had an erroroverride fun onTransactionFinished(message: String) { }//callback if transaction is successfuloverride fun onTransactionSuccessful(message: String, transactionData:DataSuccessfulTransaction) {//transactionData contains all the information about the transaction}
onTransactionAborted
Este callback es llamado cuando se cancela la operación. Por ejemplo, es llamado cuando se desconecta la terminal o se agotó el tiempo de lectura de la tarjeta.
//called when transaction is abortedoverride fun onTransactionAborted(message: String) { }
Revisa la referencia SDK para información más detallada.