Getnet DocsGetnet Docs

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ámetroTipoObligatorioDescripción
authorizationCodeStringSíCódigo de la transacción original que aparece como “AUT” en el comprobante.
transactionDateStringSíFecha de la transacción original en formato dd/MM/yyyy.
amountStringSíValor que se va a revertir; si es menor que el original, se realiza una devolución parcial.
refundTypeStringNoTipo de devolución: "1" venta con retiro, "2" venta, "3" retiro.
skipConfirmationStringNoConfigúralo en "true" para omitir la pantalla de confirmación del importe.
skipReceiptStringNoDefine si se imprime el comprobante del cliente.
allowPrintCurrentTransactionStringNoConfigú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 onActivityResult cuando 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