Getnet DocsGetnet Docs

QR Code Payment

This guide shows you how to initiate and process QR Code payments using Getnet’s App2App integration on Android terminals. QR Code payments provide a contactless payment option that customers can complete using their mobile wallets.

Before you begin

Before starting, ensure you have:

  • Polling completed: Perform a Polling call (getnet://payment/v1/polling) to verify the Getnet Payment App is properly connected and ready to receive commands.
  • Getnet application installed on the terminal.

Parameter limitations: Features like Tips (tip), Installments (installments), and Plan IDs (planId) are not supported in the QR flow and will be ignored by the Payment App if sent.

Step 1: Configure and send the payment Intent

To process a QR Code payment, configure the Intent with the required parameters and set the paymentMethod to "2" for QR Code.

The following table describes the parameters you need to include in the payment request:

ParameterTypeRequiredDescription
amountStringYesTransaction amount (with two implicit decimal places, e.g., “10000” = $100.00)
receiptCodeStringYesID printed on the receipt for merchant tracking.
callerIdStringNoUnique identifier to correlate request with response
paymentMethodStringYesSet to "2" to trigger QR Code payment flow
skipReceiptStringNoSet to "true" to suppress the customer receipt view screen after approval
allowPrintCurrentTransactionStringNoSet to "true" to let Getnet handle receipt printing (default), "false" to receive raw receipt data

Here’s the complete implementation:

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)
}

Step 2: Follow the terminal UI flow

When the intent is sent, the Getnet Payment App takes control of the UI. It is important to account for the following timeout behaviors:

  1. QR Display (Screen A): The terminal displays the QR Code for 180 seconds. If not scanned within this window, the transaction expires.

  2. Processing (Screen B): Once scanned, the app waits up to 60 seconds for the external wallet to authorize the payment.

Step 3: Extract the response

The Getnet terminal returns the transaction result via onActivityResult.

Here’s an example of a successful QR Code payment response:

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

Response Parameters

The response includes the following fields that contain important transaction information:

FieldDescription
resultTransaction status code: "0" (success), "1" (denied), "2" (canceled), "3" (error), "4" (unknown)
resultDetailsDetailed message about the transaction result (e.g., “APPROVED”, “TIMEOUT”)
paymentTypePayment method used. For QR Code payments, this will be "QRCODE"
nsuGetnet transaction authorization code (NSU). Store this for reconciliation and refunds
authorizationCodeAuthorization code provided by the payment processor
amountFinal processed transaction amount
gmtDateTimeGMT date and time when the transaction was processed (format: MMDDhhmmss)
callerIdEchoes back the unique identifier sent in the original request

Here’s how to extract these fields in your code:

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"
    }
}

Next steps

Now that you’ve implemented QR Code payments, you can: