Devolver un pago
El Get Mini Android SDK te permite devolver fondos a la tarjeta de un cliente para transacciones previamente autorizadas. En este SDK, las devoluciones son típicamente referenciales (basadas en los identificadores de transacción originales) y se procesan como una operación de red, aunque también se admite una “Devolución sin original” con tarjeta presente como alternativa.
Requisitos
Antes de procesar una devolución, asegúrate de:
- El SDK está inicializado y el comercio ha iniciado sesión.
- Tienes los Datos del Terminal (
RedCLSTerminalData) obtenidos durante el inicio de sesión. - Tienes los Datos de la Transacción Original (
identifierRTS,order, etc.).
Paso 1: Preparar los datos de la devolución
Para realizar una devolución estándar, debes usar el objeto RedCLSTransactionData recibido durante la venta original u obtenido a través de una operación de consulta.
Siempre que sea posible, usa el objeto RedCLSTransactionData devuelto por la venta original o por una operación de consulta. La instanciación manual debe usarse solo cuando el objeto original no esté disponible. El campo amount en el RedCLSTransactionData pasado al gestor de devoluciones debe contener el importe específico que deseas devolver (que puede ser un importe parcial).
import redcls.itpvpc.data.RedCLSTransactionData
import redcls.itpvpc.data.RedCLSRefundData
// 1. Preparar los datos de la transacción original
// PREFERIDO: Usa el objeto devuelto por una venta o consulta anterior.
// ALTERNATIVA: Si el objeto original no está disponible, instáncialo manualmente.
val originalTx = RedCLSTransactionData().apply {
order = "12345"
identifierRTS = "012345678901234567890123"
amount = "10.00" // El importe a devolver
}
// 2. Envolverlo en un objeto RefundData con tu configuración de terminal
val refundData = RedCLSRefundData(merchantTerminalData, originalTx)Devolución entre comercios del mismo grupo
Si la transacción original fue procesada bajo un comercio diferente (dentro del mismo grupo), debes usar el constructor alternativo de RedCLSRefundData que no requiere un objeto de transacción:
val interMerchantRefundData = RedCLSRefundData(
merchantTerminalData, // Tus datos de terminal actuales
"987654321", // originalMerchantFuc
"123456", // originalOrder
"10.00", // amountToRefund
"20231027", // originalDate (yyyyMMdd)
"999999" // originalAutorizationNumber
)Paso 2: Ejecutar la devolución
Las devoluciones son manejadas por el RedCLSRefundManager. Esta es una operación de red y típicamente no requiere que se inserte una tarjeta a menos que se realice una “Devolución sin original”.
import redcls.itpvpc.managers.RedCLSRefundManager
Thread {
val response = RedCLSRefundManager.peticionDevolucion(context, refundData)
if (response.status == 0) {
// La devolución fue procesada exitosamente por el host
Log.d("GetMini", "Devolución aprobada. Identificador: ${response.getIdentificadorRTS()}")
} else {
Log.e("GetMini", "Devolución fallida: ${response.msgKO}")
}
}.start()Paso 3: Devolución sin original (lectura de tarjeta)
Si no tienes los identificadores de la transacción original (por ejemplo, para transacciones heredadas o datos perdidos), debes realizar una devolución con tarjeta presente. Esto requiere que el cliente presente la tarjeta en el PIN pad.
// Usando el PinPadManager en lugar del RefundManager
// NOTA: Este método espera un Double para el importe
val response = pinpadManager.devolucionSinOriginal(10.00, "INV-REF-001")
if (response.status == 0) {
Log.d("GetMini", "Devolución con tarjeta presente aprobada")
}Mejores prácticas
- Devoluciones parciales: Puedes realizar múltiples devoluciones parciales siempre que el total acumulado no exceda el importe de la transacción original.
- Referenciar el original: Vincula siempre la devolución en tu sistema al
ordereidentifierRTSoriginales para una contabilidad más limpia y soporte al cliente. - Recibos: El
RedCLSRefundResponseincluye una cadena XML de “Response”. Asegúrate de que tu lógica de recibo extraiga el camporesultadopara confirmar la autorización al cliente.
Próximos pasos
- Crear una venta: Revisa la operación de venta base.
- Crear un pago preautorizado: Aprende cómo cancelar reservas.
- Crear un pago con plazos: Aprende sobre cuotas.