# Referencia del resultado de la transacción

`TransactionResultCallback` entrega el resultado de `initSale` e `initRefund`. Se invoca una vez por operación, justo antes de que se cierre la Activity del SDK. El contrato no lanza excepciones al integrador: las fallas se reflejan en el valor y el mensaje del resultado.

## Campos del resultado

| Campo | Tipo | Descripción |
| :--- | :--- | :--- |
| `result` | `String?` | Código de resultado corto y estandarizado. |
| `resultMessage` | `String?` | Descripción legible del resultado. |
| `payload` | `Any?` | Datos específicos de la operación. Haz el cast al tipo de la operación. |

## Códigos de resultado

| Código | Significado |
| :--- | :--- |
| `"00"` | Transacción aprobada. |
| `"1-*"` | Error del terminal (POS). |
| `"33-*"` | Error del host: un error HTTP del servicio de pago (SEP) o un rechazo del emisor. |

Trata `"00"` como aprobación y cualquier otro valor como una no aprobación, mostrando `resultMessage` cuando esté disponible. Los terminales antiguos pueden seguir devolviendo el prefijo heredado `"4-*"` para los errores del host: trata `"4-*"` y `"33-*"` como equivalentes. Para el catálogo completo de errores, consulta [Referencia de códigos de error](/es/getnet-toolbox/sdk-white-label/reference-sdk/error-codes); para saber cómo reaccionar a cada falla, consulta [Solución de problemas](https://docs.globalgetnet.com/es/products/in-store-payments/getnet-toolbox?doc=sdk-wl-troubleshooting).

## Payload por operación

Haz el cast de `payload` al tipo que corresponde a la operación. Acceder a los campos sin el cast puede provocar una `ClassCastException`.

### Pagos — `IPaymentResponse`

Lo devuelve `initSale` (crédito, débito, voucher, Pix). Campos principales:

| Campo | Tipo | Descripción |
| :--- | :--- | :--- |
| `paymentId` | `String?` | Identificador único de la transacción. Guárdalo para habilitar un reembolso directo. |
| `orderId` | `String?` | Identificador del pedido. |
| `amount` | `String?` | Monto de la transacción. |
| `currency` | `String?` | Moneda. |
| `status` | `String?` | Estado de la transacción. |
| `paymentMethod` | `String?` | Método de pago usado. |
| `authorizationCode` | `String?` | Código de autorización. |
| `authorizedAt` | `String?` | Fecha y hora de la autorización. |
| `acquirer` | `String?` | Adquirente. |
| `transactionId` / `acquirerTransactionId` | `String?` | Identificadores de la transacción. |
| `reasonCode` / `reasonMessage` | `String?` | Código y mensaje del motivo. |
| `emv` | `String?` | Datos EMV. |

### Reembolsos — `ICancelPaymentResponse`

Lo devuelve `initRefund`. Campos principales:

| Campo | Tipo | Descripción |
| :--- | :--- | :--- |
| `paymentId` | `String?` | Identificador de la transacción original que se reembolsó. |
| `amount` | `Int?` | Monto reembolsado. |
| `status` | `String?` | Estado del reembolso. |
| `authorizationCode` | `String?` | Código de autorización del reembolso. |
| `traceNumber` | `Int?` | Número de traza. |
| `canceledAt` | `String?` | Fecha y hora de la cancelación. |
| `reasonCode` / `reasonMessage` | `String?` | Código y mensaje del motivo. |

## Ejemplo

```kotlin
val onResult = TransactionResultCallback { result ->
    when (result.result) {
        "00" -> when (val payload = result.payload) {
            is IPaymentResponse -> { /* handle an approved payment */ }
            is ICancelPaymentResponse -> { /* handle an approved refund */ }
            else -> { /* ... */ }
        }
        else -> { /* non-approval — show result.resultMessage */ }
    }
}
```