Getnet DocsGetnet Docs

Pagamento com QR Code

Este guia mostra como iniciar e processar pagamentos com QR Code usando a integração App2App da Getnet em terminais Android. O pagamento com QR Code é uma opção sem contato que o cliente conclui pela carteira digital do celular.

Antes de começar

Antes de começar, confirme que você tem:

  • Polling concluído: faça uma chamada de Polling (getnet://payment/v1/polling) para verificar se o Getnet Payment App está conectado corretamente e pronto para receber comandos.
  • Aplicativo Getnet instalado no terminal.

Limitações de parâmetros: recursos como gorjeta (tip), parcelamento (installments) e IDs de plano (planId) não são suportados no fluxo de QR Code. O Payment App ignora esses parâmetros se você enviá-los.

Passo 1: configure e envie o Intent de pagamento

Para processar um pagamento com QR Code, configure o Intent com os parâmetros obrigatórios e defina paymentMethod como "2".

A tabela abaixo descreve os parâmetros que você precisa incluir na requisição de pagamento:

ParâmetroTipoObrigatórioDescrição
amountStringSimValor da transação (com duas casas decimais implícitas, ex.: “10000” = $100.00)
receiptCodeStringSimID impresso no comprovante para rastreamento do estabelecimento.
callerIdStringNãoIdentificador único para correlacionar a requisição com a resposta
paymentMethodStringSimDefina como "2" para disparar o fluxo de pagamento com QR Code
skipReceiptStringNãoDefina como "true" para ocultar a tela de visualização do comprovante do cliente após a aprovação
allowPrintCurrentTransactionStringNãoDefina como "true" para a Getnet cuidar da impressão do comprovante (padrão), "false" para receber os dados brutos do comprovante

Veja a implementação 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)
}

Passo 2: acompanhe o fluxo de interface do terminal

Quando o Intent é enviado, o Getnet Payment App assume o controle da interface. Considere os seguintes comportamentos de tempo limite:

  1. Exibição do QR Code (Tela A): o terminal exibe o QR Code por 180 segundos. Se ninguém ler o código nesse período, a transação expira.

  2. Processamento (Tela B): após a leitura, o app aguarda até 60 segundos para a carteira externa autorizar o pagamento.

Passo 3: extraia a resposta

O terminal Getnet devolve o resultado da transação pelo método onActivityResult.

Veja um exemplo de resposta de um pagamento com QR Code aprovado:

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

Parâmetros de resposta

A resposta inclui os campos abaixo, com informações importantes da transação:

CampoDescrição
resultCódigo de status da transação: "0" (sucesso), "1" (negada), "2" (cancelada), "3" (erro), "4" (desconhecido)
resultDetailsMensagem detalhada sobre o resultado da transação (ex.: “APPROVED”, “TIMEOUT”)
paymentTypeMeio de pagamento usado. Em pagamentos com QR Code, o valor é "QRCODE"
nsuCódigo de autorização da transação Getnet (NSU). Guarde esse valor para conciliação e reembolsos
authorizationCodeCódigo de autorização fornecido pelo processador de pagamento
amountValor final processado da transação
gmtDateTimeData e hora GMT em que a transação foi processada (formato: MMDDhhmmss)
callerIdRepete o identificador único enviado na requisição original

Veja como extrair esses campos no seu 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"
    }
}

Próximos passos

Agora que você implementou pagamentos com QR Code, você pode: