Crear una venta
La venta autoriza y captura el importe de la transacción en una sola operación. Este es el flujo estándar para transacciones en punto de venta donde el titular de la tarjeta está presente y el producto o servicio se proporciona inmediatamente.
Requisitos
Antes de poder procesar un pago, se deben completar los siguientes pasos del ciclo de vida:
- Configuración Global: El entorno y la licencia de la biblioteca deben estar configurados.
- Autenticación: Un inicio de sesión exitoso para obtener
RedCLSTerminalData. - Inicialización del PIN pad: El dispositivo físico debe estar conectado e inicializado (
inicializarPinpaddevolvió estado 0).
Paso 1: Preparar los datos de la transacción
El SDK utiliza la clase RedCLSOperativeWithCardData para definir los parámetros de la transacción. A diferencia de otros sistemas, el importe se pasa como una String con dos decimales (ej., \"10.00\").
import redcls.itpvpc.data.RedCLSOperativeWithCardData
// Definir el importe de la transacción y la referencia
val amount = "25.00"
val saleData = RedCLSOperativeWithCardData(amount).apply {
this.invoice = "INV-123456" // Número de referencia opcional
}Asegúrate de que la cadena del importe use un punto . como separador decimal y contenga exactamente dos posiciones decimales.
Paso 2: Ejecutar el pago
La transacción se realiza a través del método operativaConTarjeta de tu instancia de RedCLSPinPadManager. Esta operación es síncrona y maneja todo el flujo: detección de tarjeta, entrada de PIN (si corresponde) y autorización en línea.
// Esto debe ejecutarse en un hilo en segundo plano
Thread {
try {
val response = pinpadManager.operativaConTarjeta(saleData)
if (response.status == 0) {
val tx = response.transactionData
if (tx.result == "Autorizada") {
Log.i("GetMini", "¡Aprobado! Autorización: ${tx.autorizationNumber}")
} else {
Log.w("GetMini", "Denegado. Código: ${tx.responseCode}")
}
} else {
Log.e("GetMini", "Error del SDK: ${response.status} - ${response.msgKO}")
}
} catch (e: Exception) {
Log.e("GetMini", "Excepción de Pago: ${e.message}")
}
}.start()Paso 3: Manejar el resultado de la transacción
El objeto RedCLSTransactionData contiene toda la información necesaria para tus registros e impresión de recibos.
| Campo | Descripción |
|---|---|
result | El resultado de la autorización (ej., \"Autorizada\", \"Denegada\"). |
autorizationNumber | El código único proporcionado por el emisor (si se aprueba). |
responseCode | El código de autorización de la operación (si fue aceptada) o el código del motivo de denegación en caso contrario. |
identifierRTS | Un ID de referencia del SDK de 24 caracteres para la transacción. |
order | El número de pedido de la transacción, devuelto por el TPV PC para identificar la operación en el comercio/terminal. |
isPinAuthenticated | Indica si el titular de la tarjeta fue verificado mediante PIN. |
fun handleSuccess(tx: RedCLSTransactionData) {
when (tx.result) {
"Autorizada" -> {
Log.i("GetMini", "¡Aprobado! Autorización: ${tx.autorizationNumber}")
// Proceder a imprimir/mostrar recibo
}
"Denegada" -> {
Log.w("GetMini", "Transacción Denegada. Código: ${tx.responseCode}")
}
}
}Solución de problemas comunes de pago
- Tiempo de Espera Agotado: El PIN pad puede agotar el tiempo de espera si el usuario tarda demasiado en presentar la tarjeta o ingresar el PIN. Asegúrate de que el dispositivo sea accesible y que la batería sea suficiente.
- Tarjeta Denegada: Si el
resultes “Denegada”, el titular de la tarjeta debe contactar a su banco. Puedes encontrar el código de motivo específico entx.responseCode. - PIN pad Perdido: Si la conexión se cae durante el pago, el método devolverá un estado de error. Debes reinicializar la conexión antes de reintentar.
Siempre almacena el identifierRTS, el order y el importe (amount) de la transacción. Los necesitarás si tienes que procesar una Devolución más tarde.
Próximos pasos
Después de dominar la venta, puedes explorar tipos de transacciones avanzadas:
- Crear un pago preautorizado: Reserve fondos para captura posterior.
- Devolver un pago: Devuelva fondos a los clientes.
- Seguridad y enlace de dispositivos: Optimiza la seguridad de tu integración.