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âmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
amount | String | Sim | Valor da transação (com duas casas decimais implícitas, ex.: “10000” = $100.00) |
receiptCode | String | Sim | ID impresso no comprovante para rastreamento do estabelecimento. |
callerId | String | Não | Identificador único para correlacionar a requisição com a resposta |
paymentMethod | String | Sim | Defina como "2" para disparar o fluxo de pagamento com QR Code |
skipReceipt | String | Não | Defina como "true" para ocultar a tela de visualização do comprovante do cliente após a aprovação |
allowPrintCurrentTransaction | String | Não | Defina 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:
-
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.
-
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:
| Campo | Descrição |
|---|---|
| result | Código de status da transação: "0" (sucesso), "1" (negada), "2" (cancelada), "3" (erro), "4" (desconhecido) |
| resultDetails | Mensagem detalhada sobre o resultado da transação (ex.: “APPROVED”, “TIMEOUT”) |
| paymentType | Meio de pagamento usado. Em pagamentos com QR Code, o valor é "QRCODE" |
| nsu | Código de autorização da transação Getnet (NSU). Guarde esse valor para conciliação e reembolsos |
| authorizationCode | Código de autorização fornecido pelo processador de pagamento |
| amount | Valor final processado da transação |
| gmtDateTime | Data e hora GMT em que a transação foi processada (formato: MMDDhhmmss) |
| callerId | Repete 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:
- Aprender a processar reembolso e cancelamento em transações com QR Code
- Implementar a impressão personalizada de comprovantes com o parâmetro
automationSlip - Conhecer os pagamentos em etapa única para acelerar o checkout