Procesa una devolución
Esta guía te muestra cómo revertir una transacción completada previamente con el deeplink de devolución. Se admiten devoluciones parciales cuando el importe es menor que el de la transacción original.
Antes de comenzar
Antes de iniciar una devolución, asegúrate de contar con lo siguiente:
- El código de autorización (AUT) y la fecha de la transacción de la respuesta del pago original aprobado.
- El importe exacto o parcial que se va a revertir.
- La confirmación de que el terminal está listo mediante
getnet://payment/v1/polling.
Paso 1: Configura el Intent de devolución
Para iniciar la reversión, usa el URI getnet://payment/v1/refund.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
authorizationCode | String | Sí | Código de la transacción original que aparece como “AUT” en el comprobante. |
transactionDate | String | Sí | Fecha de la transacción original en formato dd/MM/yyyy. |
amount | String | Sí | Valor que se va a revertir; si es menor que el original, se realiza una devolución parcial. |
refundType | String | No | Tipo de devolución: "1" venta con retiro, "2" venta, "3" retiro. |
skipConfirmation | String | No | Configúralo en "true" para omitir la pantalla de confirmación del importe. |
skipReceipt | String | No | Define si se imprime el comprobante del cliente. |
allowPrintCurrentTransaction | String | No | Configúralo en "false" para recibir los datos del comprobante como automationSlip en lugar de imprimirlo. |
El código de autorización y la fecha de la transacción se devuelven en la respuesta de
onActivityResultcuando procesas un pago. Guarda estos valores después de cada transacción aprobada para usarlos más adelante en devoluciones.
Devoluciones parciales: si el importe es menor que el importe de la transacción original, se procesa una devolución parcial. Puedes hacer varias devoluciones sobre la misma transacción original hasta alcanzar el importe total.
Así configuras y envías el Intent de devolución:
private val REFUND_REQUEST_CODE = 2001
fun processRefund(authCode: String, transactionDate: String, amount: String) {
val intent = Intent(Intent.ACTION_VIEW, Uri.parse("getnet://payment/v1/refund")).apply {
putExtra("authorizationCode", authCode)
putExtra("transactionDate", transactionDate)
putExtra("amount", amount)
putExtra("refundType", "2")
}
startActivityForResult(intent, REFUND_REQUEST_CODE)
}Paso 2: Procesa la respuesta
El terminal procesa la reversión y devuelve el resultado a tu activity. La respuesta incluye result, resultDetails, authorizationCode, commerceCode, amount, gmtDateTime, callerId, nsuLastSuccesfullMessage, refundTransactionDate, refundOriginTerminal y automationSlip.
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == REFUND_REQUEST_CODE && resultCode == RESULT_OK) {
val extras = data?.extras
val result = extras?.getString("result")
if (result == "0") {
// Refund approved
} else {
val details = extras?.getString("resultDetails")
// Handle error
}
}
}Siguientes pasos
- Devolución y cancelación — Cómo el terminal gestiona las anulaciones del mismo día frente a las devoluciones ya liquidadas.
- Referencia de parámetros del deeplink — Campos completos de solicitud y respuesta de la devolución.