Getnet DocsGetnet Docs

Crea un pago preautorizado

En esta guía procesas una transacción de preautorización con la Getnet Payment App. La preautorización retiene fondos de forma temporal en la tarjeta de crédito del cliente para una captura posterior. Se usa en reservas de hotel o alquiler de autos, donde el monto final puede variar.

Antes de comenzar

Antes de seguir los pasos, necesitas:

  • La Getnet Payment App instalada en el terminal.
  • Conocer los códigos de los planes de cuotas, si aplica.

Cómo funciona

Todas las acciones de preautorización usan el URI getnet://payment/v1/pre-auth. El parámetro operation selecciona la acción:

operationAcciónDescripción
"0"CrearReserva fondos en la tarjeta.
"1"ModificarActualiza una preautorización existente.
"2"EliminarCancela una preautorización.
"3"ConfirmarCaptura los fondos reservados.
"4"ConsultarLista las preautorizaciones pendientes.

la operación de creación devuelve un authorizationRefCode. Ese valor es el identificador de la preautorización. Lo envías de vuelta como reservation_id para modificar, confirmar o eliminar la preautorización. Guárdalo después de cada creación.

Paso 1: Crea una preautorización

Para reservar un monto en la tarjeta del cliente, envía un Intent con operation en "0".

Parámetros de solicitud

ParámetroDescripciónObligatorio
operationDefine "0" para crear la preautorización.Sí
originalAmountValor en moneda local para realizar la transacción.Sí
amountValor que se va a reservar. Los dos últimos dígitos son la parte decimal (por ejemplo, "10000" = $100.00).No
installmentsCantidad de cuotas de la transacción de crédito.No
plan_idPlan de cuotas que se va a usar. Consulta Reglas de cuotas.No
interestIndica si el plan incluye interés (true) o es sin interés (false).No
operationMode"0" para manual (calcula el terminal) o "1" para calculado (calcula la app).No
skipReceiptDefine "true" para omitir la pantalla del comprobante del cliente.No
skipConfirmationDefine "true" para omitir la pantalla de confirmación del detalle de cuotas.No
callerIdIdentificador único para correlacionar la solicitud con la respuesta.No
allowPrintCurrentTransactionDefine "false" para recibir los datos del comprobante como automationSlip.No

Este bloque de código muestra cómo crear una preautorización:

private val REQUEST_CODE = 1001

private fun createPreAuth() {
    val intent = Intent(Intent.ACTION_VIEW, Uri.parse("getnet://payment/v1/pre-auth"))

    intent.putExtra("operation", "0") // 0 = create
    intent.putExtra("amount", "10000") // $100.00
    intent.putExtra("originalAmount", "10000")
    intent.putExtra("installments", "1")
    intent.putExtra("plan_id", "plan_emisor")
    intent.putExtra("operationMode", "0")
    intent.putExtra("skipReceipt", "true")

    startActivityForResult(intent, REQUEST_CODE)
}

Parámetros de respuesta

ParámetroDescripciónObligatorio
resultEstado de la transacción; "0" indica éxito.Sí
resultDetailsInformación adicional cuando la transacción falla.No
amountValor procesado para la retención de la preautorización.Sí
authorizationRefCodeIdentificador de la preautorización. Guárdalo: lo envías como reservation_id para modificar, confirmar o eliminar la preautorización.No
inputTypeMétodo de lectura de la tarjeta (chip, contactless o banda magnética).Sí
authorizationCodeCódigo de autorización de la transacción entregado por el emisor.No
nsuCódigo de autorización de la transacción de Getnet para el terminal.No
cardLastDigitsÚltimos 4 dígitos de la tarjeta usada.No
brandMarca de tarjeta (por ejemplo, Visa, Mastercard).No
gmtDateTimeMarca de tiempo de la transacción en UTC 0 (MMDDhhmmss).No
automationSlipDatos del comprobante en formato JSON cuando allowPrintCurrentTransaction es "false".No

Este es un ejemplo de cómo manejar la respuesta de la creación:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
        val extras = data?.extras
        val result = extras?.getString("result")

        if (result == "0") {
            // SUCCESS: store the pre-authorization identifier
            val reservationId = extras?.getString("authorizationRefCode")
            val amount = extras?.getString("amount")

            // Store authorizationRefCode - you send it as reservation_id later
            saveReservationId(reservationId)
        } else {
            val errorDetails = extras?.getString("resultDetails")
            Log.e("PreAuth", "Pre-authorization failed: $errorDetails (Code: $result)")
        }
    }
}

Guarda el authorizationRefCode de la respuesta. Este identificador es obligatorio para confirmar, modificar o eliminar la preautorización. Si no lo envías en las operaciones siguientes, los fondos se liberan automáticamente cuando vence el período de retención.

Paso 2: Confirma una preautorización

Después de entregar el servicio o el producto, confirma la preautorización para convertir la retención temporal en un pago final. Esta operación captura los fondos y completa la transacción.

Parámetros de solicitud

ParámetroDescripciónObligatorio
operationDefine "3" para capturar los fondos preautorizados.Sí
reservation_idEl authorizationRefCode recibido en el paso 1.Sí
amountMonto final actualizado que se va a capturar. Si lo omites, la app usa el valor retenido original.No
private fun confirmPreAuth(reservationId: String, finalAmount: String? = null) {
    val intent = Intent(Intent.ACTION_VIEW, Uri.parse("getnet://payment/v1/pre-auth"))

    intent.putExtra("operation", "3") // 3 = confirm
    intent.putExtra("reservation_id", reservationId)

    finalAmount?.let { intent.putExtra("amount", it) }

    startActivityForResult(intent, REQUEST_CODE)
}

Confirma el éxito verificando que result sea igual a "0" en onActivityResult.

Modifica una preautorización

Para actualizar el monto retenido antes de la captura, envía operation en "1" junto con el reservation_id. Consulta Modifica un pago para ver el flujo completo.

Elimina una preautorización

Para cancelar una preautorización y liberar los fondos retenidos, envía operation en "2" junto con el reservation_id.

private fun removePreAuth(reservationId: String) {
    val intent = Intent(Intent.ACTION_VIEW, Uri.parse("getnet://payment/v1/pre-auth"))

    intent.putExtra("operation", "2") // 2 = remove
    intent.putExtra("reservation_id", reservationId)

    startActivityForResult(intent, REQUEST_CODE)
}

Consulta las preautorizaciones pendientes

Para listar las preautorizaciones pendientes, envía operation en "4". Puedes acotar los resultados con los parámetros de filtro filterReservationId, filterInitialDate, filterFinalDate, filterAuthorizationCode, filterCardLastDigits y filterAllowedBrands. La respuesta devuelve una lista pendingAuthorizations con hasta las 30 preautorizaciones pendientes más recientes. Consulta Parámetros de Deeplink.

Siguientes pasos