Crear un pago preautorizado
Esta guía le orientará en el procesamiento de una transacción de preautorización utilizando la aplicación Get Smart. La preautorización le permite bloquear un importe específico en la tarjeta de un cliente sin capturar los fondos de inmediato. Esto se utiliza habitualmente en hoteles, alquiler de vehículos o escenarios donde el precio final del servicio está pendiente.
Requisitos
Antes de comenzar, asegúrese de tener:
- Perfil de comercio con soporte para preautorizaciones - Contacte con el soporte de Get Smart para verificar que su cuenta admite este tipo de transacción
- Aplicación Get Smart instalada y configurada en el dispositivo Android
- Permiso para lanzar Intents externos en su aplicación
No todos los perfiles de comercio admiten preautorizaciones. Verifique con Get Smart que su cuenta está configurada para transacciones de preautorización antes de implementar esta funcionalidad.
Proceso de la transacción de preautorización
Esta sección le guía a través del proceso de dos pasos para preautorizar y confirmar un pago con la integración Get Smart App2App. El flujo de trabajo implica dos llamadas de Intent distintas: la preautorización para retener los fondos y la confirmación para capturarlos.
Paso 1: Ejecutar la preautorización
Una transacción de preautorización bloquea fondos en la tarjeta del cliente sin capturarlos de inmediato. Debe crear un Intent con el tipo de transacción 10 para iniciar la retención. La aplicación Get Smart procesa la preautorización y devuelve un ID de pedido (ORDER) que debe almacenar para su posterior confirmación.
La tabla siguiente enumera los parámetros que debe incluir en su Intent de preautorización:
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
amount | double | Sí | El importe a retener en la tarjeta |
type | int | Sí | Establecer en 10 para transacciones de preautorización |
invoice | String | No | Número de pedido o identificador opcional para el seguimiento |
El siguiente ejemplo de código muestra cómo crear y lanzar un Intent de preautorización:
// Define el código de petición para la gestión del resultado
static final int REQUEST_CODE_PREAUTH = 2001;
// Inicializa el Intent con la acción de Get Smart
Intent intent = new Intent("es.android.redsys.mPOS.movil.tpvAndroid_PAYMENT_REQUEST");
// Añade los parámetros de preautorización
intent.putExtra("amount", 100.00);
intent.putExtra("type", 10); // 10 = Preautorización
intent.putExtra("invoice", "PRE-AUTH-001");
// Lanza el Intent
try {
startActivityForResult(intent, REQUEST_CODE_PREAUTH);
} catch (ActivityNotFoundException e) {
// Gestionar la ausencia de la aplicación Get Smart
new AlertDialog.Builder(this)
.setTitle("App Get Smart no encontrada")
.setMessage("Por favor, instale y configure la aplicación Get Smart.")
.setPositiveButton("OK", null)
.show();
}Paso 2: Almacenar y confirmar la preautorización
Cuando la preautorización tiene éxito, la app Get Smart devuelve un parámetro ORDER a través del callback onActivityResult. Debe almacenar este ID de pedido para confirmar y capturar el pago más tarde. Las preautorizaciones suelen caducar entre 7 y 30 días, dependiendo del emisor de la tarjeta, por lo que debe confirmar la captura dentro de este plazo.
Para finalizar el pago, envíe una solicitud de confirmación utilizando el tipo de transacción 11 e incluya el ID del pedido original (original_order). El importe de la confirmación puede ser igual o inferior al importe preautorizado, dependiendo de la configuración de su contrato de comercio.
La tabla siguiente enumera los parámetros para el Intent de confirmación:
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
amount | double | Sí | El importe a capturar (igual o inferior al importe preautorizado) |
type | int | Sí | Establecer en 11 para Confirmación de preautorización |
original_order | String | Sí | El ID de pedido (ORDER) devuelto en la preautorización |
El siguiente ejemplo de código muestra cómo gestionar el resultado de la preautorización y, posteriormente, confirmar la captura:
// Gestionar el resultado de la preautorización
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_PREAUTH) {
if (resultCode == RESULT_OK && data != null) {
// Preautorización exitosa - almacenar el ID del pedido
String orderId = data.getStringExtra("ORDER");
String authCode = data.getStringExtra("AUTHORIZATION");
// Almacenar orderId para su posterior confirmación
savePreAuthOrderId(orderId);
}
} else if (requestCode == REQUEST_CODE_CONFIRM) {
if (resultCode == RESULT_OK && data != null) {
// Confirmación exitosa
String orderId = data.getStringExtra("ORDER");
// Procesar pago confirmado
}
}
}
// Más tarde, cuando esté listo para capturar los fondos
private void confirmPreAuthorization(String originalOrderId, double captureAmount) {
static final int REQUEST_CODE_CONFIRM = 2002;
Intent intent = new Intent("es.android.redsys.mPOS.movil.tpvAndroid_PAYMENT_REQUEST");
intent.putExtra("amount", captureAmount);
intent.putExtra("type", 11); // 11 = Confirmación de preautorización
intent.putExtra("original_order", originalOrderId); // Obligatorio
try {
startActivityForResult(intent, REQUEST_CODE_CONFIRM);
} catch (ActivityNotFoundException e) {
// Gestionar la ausencia de la aplicación Get Smart
}
}Algunas configuraciones de comercio permiten confirmar un importe inferior al autorizado originalmente (captura parcial). Consulte su contrato de comercio para verificar si esta funcionalidad está disponible para su cuenta.
Próximos pasos
Ahora que ha procesado con éxito una transacción de preautorización, puede explorar más funciones de la integración Get Smart App2App:
- Referencia de parámetros de respuesta - Especificaciones completas de los campos de respuesta
- Devolver un pago - Aprenda cómo revertir transacciones
- Referencia de parámetros de petición - Especificaciones completas de parámetros