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.TEST
val userToken = "yourToken"
BillpocketSDK.initSDK(context, sdkMode, userToken, eventListener)
PropiedadTipoRequeridoDescripciónValores permitidos
contextObjectandroid.content.Context
sdkModeObjectInitBillpocketSDK.SdkMode.TEST, PRODUCTION
userTokenStringToken de usuario.
listenerObjectEventListenerInitSDK

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.

PropiedadTipoRequeridoDescripción
contextObjectandroid.content.Context
amountNumberMonto de la transacción.
descriptionStringDescripción de la transacción.
locationObjectInstancia del objeto android.location.Location con latitud y longitud desde donde se realiza la operación.
tipNumberNoMonto de la propina. Dos decimales.
listenerObjectInstancia de EventListenerTransaction.
rotationSignatureBooleanNoConfigura 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 reader
override fun onBeforeTransaction(message: String) { }
//called when obtaining a response from the reader
override 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 transaction
override fun onReaderWaitingForCard(message: String) { }
//called when card is in the reader
override 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 error
override fun onTransactionFinished(message: String) { }
//callback if transaction is successful
override 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 aborted
override fun onTransactionAborted(message: String) { }

Revisa la referencia SDK para información más detallada.


Datos de prueba
Realiza los ajustes necesarios en tu sistema con los datos de prueba.
Transacciones
Obtén la lista de transacciones con información relevante para tus operaciones.