Pular para o conteúdo principal

Inicialização do Terminal

Com o merchantId em mãos, inicialize o terminal. Isso carrega as tabelas EMV e as configurações do adquirente. O resultado do carregamento de tabelas chega também por onTablesLoaded(ok).

import com.tupifintech.apossdk.sdk.api.model.TerminalInitializationRequest

val initResponse = posPinpad.terminalInitialization(
request = TerminalInitializationRequest(merchantId = merchantId)
)

// Dados do estabelecimento (header, recibo, senha de acesso)
val merchant = initResponse.merchant

Para verificar o estado depois:

val ready = posPinpad.isTerminalInitialized()
val tables = posPinpad.getTablesInfo() // versões das tabelas EMV por adquirente

Coordenadas do Teclado PIN

Importante: as coordenadas do teclado PIN não são configuradas antecipadamente. O SDK as solicita de forma reativa, durante o pagamento, pelo callback onStartGetPinCoordinates. O app deve medir as posições dos botões na tela e devolvê-las pela função recebida.

override fun onStartGetPinCoordinates(setPinCoordinates: (List<String>) -> Unit) {
// Exiba a tela de PIN, meça os botões e chame setPinCoordinates(coords)
showPinScreen(onCoordinatesReady = { coords -> setPinCoordinates(coords) })
}

Formato e ordem da lista

Cada item é uma string "left,top,right,bottom" em pixels (posição na janela). A ordem esperada é:

ÍndiceTecla
0–8Números 1 a 9
9Número 0
10CANCELAR
11OK / Confirma
12Backspace

No Compose, as coordenadas podem ser obtidas com onGloballyPositioned + positionInWindow(). Veja o exemplo completo em Exemplos.

Informações do Dispositivo

val info = posPinpad.getDeviceInfo()
Log.d("YBY", "Modelo: ${info.hardwareModel}")
Log.d("YBY", "Serial: ${info.serialNo}")
Log.d("YBY", "Firmware: ${info.firmwareVersion}")

Health Check

val health = posPinpad.checkInternetConnection()
if (!health.isConnected) {
showError(health.errorMessage ?: "Sem conexão")
}

Boas Práticas

Tratamento de erros

Implemente os callbacks de erro (onAppError, onNetworkConnectionError, onUnauthorizedError, onSessionExpired, etc.). Veja Callbacks.

override fun onAppError(error: SdkErrorCode, message: String) {
Log.e("YBY", "Erro ${error.name} (${error.code}): $message")
showErrorDialog(message)
}

override fun onNetworkConnectionError() {
showErrorDialog("Sem conexão com a internet")
}

Dados sensíveis

Nunca registre em log dados de pagamento (PAN, PIN, track) nem a accessPassword do merchant.