# Modifica un pago

En esta guía modificas el monto de una retención preautorizada existente con la Getnet Payment App. Puedes ajustar el monto de una retención ya autorizada en una tarjeta de crédito sin finalizar la venta. Es habitual en escenarios como el check-in de hoteles o el alquiler de autos, donde el total final puede cambiar antes de que el huésped se retire.

## Antes de comenzar

Antes de seguir los pasos, necesitas:

* La Getnet Payment App instalada en el terminal.
* El `authorizationRefCode` que recibiste al crear la preautorización. Lo envías de vuelta como `reservation_id`.
* El nuevo monto con dos decimales implícitos (por ejemplo, "10000" para \$100.00).

<Callout type="note">

solo puedes modificar preautorizaciones que aún no se confirmaron (capturaron) ni se eliminaron.

</Callout>

## Modifica el monto de la preautorización

Para actualizar el monto retenido en la tarjeta de crédito del cliente, crea un Intent con la operación de modificación (`operation` = `"1"`) e incluye el identificador de la preautorización.

La siguiente tabla lista los parámetros que envías en el Intent:

| Parámetro | Descripción | Obligatorio |
| :--- | :--- | :--- |
| `operation` | Define `"1"` para modificar el monto de la preautorización. | Sí |
| `reservation_id` | El `authorizationRefCode` recibido al crear la preautorización. | Sí |
| `amount` | El nuevo monto retenido con dos decimales implícitos (por ejemplo, "15000" para \$150.00). | Sí |
| `originalAmount` | Valor en moneda local para realizar la transacción. | Sí |
| `callerId` | Identificador para correlacionar la solicitud con la respuesta. | No |

El siguiente bloque de código muestra un ejemplo de cómo modificar una preautorización:

```kotlin
private val PREAUTH_UPDATE_CODE = 1002

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

    // Operation type
    intent.putExtra("operation", "1") // 1 = modify

    // Pre-authorization identifier
    intent.putExtra("reservation_id", reservationId)

    // New total amount
    intent.putExtra("amount", "15000") // $150.00
    intent.putExtra("originalAmount", "15000")

    intent.putExtra("callerId", "req_update_001")

    startActivityForResult(intent, PREAUTH_UPDATE_CODE)
}
```

Cuando se procesa la modificación, la Getnet Payment App devuelve el resultado a tu aplicación mediante `onActivityResult`.

El siguiente bloque de código muestra un ejemplo de cómo manejar la respuesta:

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

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

        if (result == "0") {
            // SUCCESS: Update successful
            val newAmount = extras?.getString("amount")
            Log.d("PreAuth", "Pre-authorization modified successfully")
            Log.d("PreAuth", "New amount: $newAmount")

            // Sync your local database with the new amount
        } else {
            // FAILURE: Handle error
            val errorDetails = extras?.getString("resultDetails")
            Log.e("PreAuth", "Modification failed: $errorDetails (Code: $result)")
        }
    }
}
```

## Siguientes pasos

* [Crea un pago preautorizado](/es/app2app/payment-guides-a2a/create-preauth-payment) — ciclo de vida completo de la preautorización (crear, confirmar, eliminar, consultar).
* [Parámetros de Deeplink](/es/app2app/reference-a2a/deeplink-parameters) — campos completos de solicitud y respuesta de la preautorización.