Inicializar el TPV
La inicialización es el primer paso obligatorio en el ciclo de vida de la integración. Debes inicializar el TPV correctamente antes de realizar cualquier operación financiera (como pagos o devoluciones) o consultar datos de transacciones.
Durante la inicialización, la biblioteca se conecta al Get Smart SDK Payment Service para:
- Verificar la Configuración: Garantiza que el terminal esté configurado correctamente en el host de Getnet.
- Chequeos de Seguridad: Valida claves y protocolos de seguridad.
- Actualizar Parámetros: Descarga la configuración más reciente (p. ej., funciones activas, moneda, detalles del comercio) desde el host.
Realizar la inicialización
Para inicializar el dispositivo, utiliza el InitializationRepository.
El método principal es initTpv(). Esta es una función suspend que devuelve un RepositoryResult que contiene el objeto TpvInfo en caso de éxito.
Implementación
Llama a initTpv() dentro de un alcance de corrutina. Observa cómo accedemos a los datos del comercio a través de la lista virtualTerminalList.
suspend fun initializeDevice() {
// 1. Call the initialization method
val result = initializationRepository.initTpv()
// 2. Handle the result
when (result) {
is RepositoryResult.Success -> {
// Initialization successful
val tpvInfo: TpvInfo = result.data
// Accessing Configuration Flags
val isPreauthEnabled = tpvInfo.config.showPreauthorizations
val isQrEnabled = tpvInfo.config.showQrPayment
// Accessing Merchant Data (FUC, Terminal, Name)
// These are stored in the virtual terminal list
val terminalData = tpvInfo.virtualTerminalList?.firstOrNull()
println("Initialized Merchant: ${terminalData?.merchantName}")
println("Terminal ID: ${terminalData?.terminal}")
println("Currency Code: ${terminalData?.currency}")
// You can now proceed to payment screens
}
is RepositoryResult.ConnectionError -> {
// Handle network/service failure
showError("Connection failed. Check internet or Smart SDK Service.")
}
is RepositoryResult.ProtocolError -> {
// Handle logical errors (e.g., TPV_NOT_INITIALIZED or MAPPING errors)
showError("Protocol Error: ${result.type}")
}
is RepositoryResult.Cancelled -> {
// Handle cancellation (unlikely for initialization, but possible)
}
}
}Comprender TpvInfo
Cuando la inicialización tiene éxito, recibes un objeto TpvInfo. Esta data class contiene detalles cruciales sobre la identidad y las capacidades del terminal.
Propiedades Clave
El objeto se estructura en tres partes principales:
deviceInfo: Datos específicos del hardware/terminal.config(TpvConfig): Flags operativos y ajustes de funciones.showPreauthorizations: (Boolean) Si las preautorizaciones están habilitadas.noOriginal: (Boolean) Si se permiten “Devoluciones sin Original”.showQrPayment: (Boolean) Si los pagos por QR (Alipay/WeChat) están habilitados.showPlazox: (Boolean) Si Plazox (pagos fraccionados) está habilitado.isOffline: (Boolean) Si el TPV está funcionando actualmente en modo offline.
virtualTerminalList: Una lista de objetosTpvVirtualTerminalque contienen la identidad financiera.merchantName: El nombre comercial del comercio.fuc: El ID del Comercio (FUC).terminal: El Número de Terminal.currency: El código de moneda configurado (p. ej., 978 para EUR).csb/csbType: Códigos bancarios.
Gestionar la información del terminal
El InitializationRepository proporciona métodos adicionales para recuperar o actualizar la información almacenada del terminal sin activar una sincronización completa con el host.
Recuperar información en caché
Si necesitas acceder a la configuración del terminal más tarde en tu aplicación (p. ej., para mostrar el Nombre del Comercio en un encabezado) sin realizar una llamada de red, utiliza getTpvInfoRepositoryResult().
suspend fun getCachedConfig() {
val result = initializationRepository.getTpvInfoRepositoryResult()
if (result is RepositoryResult.Success) {
val cachedInfo = result.data
// Use cached data...
}
}Guardar información del terminal
En escenarios avanzados donde necesites actualizar manualmente el contexto de la información local del terminal, puedes usar saveTerminalInformation().
suspend fun updateLocalConfig(newInfo: TpvInfo) {
initializationRepository.saveTerminalInformation(newInfo)
}Próximos pasos
Una vez que el TPV se ha inicializado correctamente, estás listo para procesar transacciones:
- Crear un Pago Preautorizado: Aprende a procesar una transacción de preautorización.
- Crear un Pago a Plazos (Plazox): Aprende a realizar pagos fraccionados.
- Devolver un Pago: Flujos específicos para la devolución de fondos.