Getnet DocsGetnet Docs

Pago con QR Code

En esta guía aprendes a iniciar y procesar pagos con QR Code mediante la integración App2App de Getnet en terminales Android. El pago con QR Code es una opción sin contacto que el cliente completa desde su billetera móvil.

Antes de comenzar

Antes de comenzar, asegúrate de tener:

  • Polling completado: haz una llamada de Polling (getnet://payment/v1/polling) para verificar que la Getnet Payment App está bien conectada y lista para recibir comandos.
  • Aplicación de Getnet instalada en el terminal.

Limitaciones de parámetros: funciones como propinas (tip), cuotas (installments) e IDs de plan (planId) no son compatibles con el flujo QR. La Payment App las ignora si las envías.

Paso 1: Configura y envía el Intent de pago

Para procesar un pago con QR Code, configura el Intent con los parámetros obligatorios y define paymentMethod con el valor "2", que corresponde a QR Code.

Esta tabla describe los parámetros que debes incluir en la solicitud de pago:

ParámetroTipoObligatorioDescripción
amountStringSíMonto de la transacción (con dos decimales implícitos; por ejemplo, “10000” = $100.00)
receiptCodeStringSíID impreso en el comprobante para el seguimiento del comercio.
callerIdStringNoIdentificador único para correlacionar la solicitud con la respuesta
paymentMethodStringSíDefine "2" para activar el flujo de pago con QR Code
skipReceiptStringNoDefine "true" para omitir la pantalla del comprobante del cliente después de la aprobación
allowPrintCurrentTransactionStringNoDefine "true" para que Getnet imprima el comprobante (predeterminado); "false" para recibir los datos del comprobante sin procesar

Esta es la implementación completa:

private val REQUEST_CODE = 1001  

override fun onCreate(savedInstanceState: Bundle?) {      
    super.onCreate(savedInstanceState)
    
    val intent = Intent(Intent.ACTION_VIEW, Uri.parse("getnet://payment/v1/payment"))
    intent.putExtra("amount", "10000")           // $100.00
    intent.putExtra("receiptCode", "000123")
    intent.putExtra("callerId", "qr_payment_001")
    intent.putExtra("paymentMethod", "2")        // 2 = QR Code
    
    startActivityForResult(intent, REQUEST_CODE)
}

Paso 2: Sigue el flujo de la interfaz del terminal

Cuando envías el intent, la Getnet Payment App toma el control de la interfaz. Debes tener en cuenta los siguientes tiempos de espera:

  1. Visualización del QR (pantalla A): el terminal muestra el QR Code durante 180 segundos. Si nadie lo escanea en ese plazo, la transacción expira.

  2. Procesamiento (pantalla B): después del escaneo, la app espera hasta 60 segundos a que la billetera externa autorice el pago.

Paso 3: Extrae la respuesta

El terminal Getnet devuelve el resultado de la transacción mediante onActivityResult.

Este es un ejemplo de respuesta de un pago con QR Code exitoso:

{
  "result": "0",
  "resultDetails": "APPROVED",
  "amount": "10000",
  "nsu": "57003",
  "callerId": "qr_payment_001",
  "authorizationCode": "004433",
  "gmtDateTime": "0115164500",
  "paymentType": "QRCODE"
}

Parámetros de respuesta

La respuesta incluye los siguientes campos con información importante de la transacción:

CampoDescripción
resultCódigo de estado de la transacción: "0" (éxito), "1" (rechazada), "2" (cancelada), "3" (error), "4" (desconocido)
resultDetailsMensaje detallado sobre el resultado de la transacción (por ejemplo, “APPROVED”, “TIMEOUT”)
paymentTypeMedio de pago usado. En pagos con QR Code, el valor es "QRCODE"
nsuCódigo de autorización de la transacción de Getnet (NSU). Guárdalo para la conciliación y las devoluciones
authorizationCodeCódigo de autorización entregado por el procesador de pagos
amountMonto final procesado de la transacción
gmtDateTimeFecha y hora GMT en que se procesó la transacción (formato: MMDDhhmmss)
callerIdDevuelve el identificador único enviado en la solicitud original

Así extraes estos campos en tu código:

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")                // "0" = Success
        val resultDetails = extras?.getString("resultDetails")  // e.g., "APPROVED"
        val nsu = extras?.getString("nsu")                      // Getnet Reference
        val authCode = extras?.getString("authorizationCode")   // Authorization Code
        val paymentType = extras?.getString("paymentType")      // Will be "QRCODE"
    }
}

Siguientes pasos

Ahora que implementaste pagos con QR Code, puedes: