Getnet DocsGetnet Docs

Criar Pagamentos via QR Code Cartão Presente (Conta-para-Conta)

Este guia orienta você no processamento de um pagamento via QR Code conta-para-conta em um ambiente Cartão Presente usando a Getnet Regional API. Nesse fluxo, o terminal físico do estabelecimento solicita ao gateway um código QR EMV dinâmico, exibe-o ao cliente, e o cliente o lê com o aplicativo do seu banco para autorizar o pagamento diretamente da sua conta bancária.

Isso não é Pix. O fluxo de QR Code descrito aqui é um método de pagamento conta-para-conta processado por meio das redes Visa/Mastercard. Atualmente, está disponível apenas para o Chile. O suporte para países adicionais (Argentina via Transferencia 3.1, Brasil via Pix) será adicionado em versões futuras.

Requisitos

Antes de iniciar uma solicitação de QR code, certifique-se do seguinte:

  • Credenciais da API: Obtenha seu client_id e client_secret com a equipe de Suporte à Integração.
  • Autenticação: Gere um Bearer token por meio do endpoint de Autenticação.
  • Hardware do Terminal: Um dispositivo físico (POS/TEF) capaz de exibir imagens ou texto de alta resolução para a renderização do QR code.
  • Número de Série: O serial_number físico do dispositivo deve ser fornecido em cada requisição.
  • Bandeira do Cartão: Atualmente disponível exclusivamente para Visa e Mastercard.

Como Funciona

O fluxo de QR Code Cartão Presente tem três estágios:

EstágioAtorAção
1. GerarTerminal → APIO terminal envia uma requisição POST para o endpoint de QR Code e recebe um payload QR EMV (HTTP 201).
2. ExibirTerminal → ClienteO terminal renderiza a string do QR como uma imagem escaneável em sua tela. O cliente a lê com seu aplicativo bancário.
3. ConfirmarAPI → TerminalO pagamento é autorizado de forma assíncrona. O terminal confirma o status final via webhooks ou pelo endpoint Get Transaction.

Expiração: Códigos QR gerados via este endpoint expiram após 1 minuto e 50 segundos. Se o cliente não escanear e autorizar dentro deste intervalo, descarte o código e gere um novo.

Processo de Pagamento via QR Code

Passo 1: Criar a Requisição de QR Code

Envie uma requisição POST para o endpoint QR Code para gerar o payload do QR EMV.

Campos da Requisição

CampoTipoRestriçõesDescriçãoObrigatório
idempotency_keyString1–64 chars, alfanumérico + .-_Chave exclusiva para evitar requisições duplicadas.Sim
request_idString (UUID)36 charsIdentificador exclusivo para esta requisição.Sim
order_idString1–36 charsSua referência de pedido interno.Sim
amountInteiroEm centavosValor da transação (ex: 10000 = 100,00).Sim
currencyStringISO 4217Código da moeda (ex: CLP).Sim
payment_methodEnumPURCHASE, INVOICE, COLLECTIONO tipo de operação de pagamento.Sim
transaction_typeEnumNO_INTEREST, WITH_INTERESTSe juros de parcelamento se aplicam.Sim
serial_numberString—Número de série exclusivo do terminal físico.Sim
payment_idString (UUID)36 charsIdentificador de pagamento opcional, se pré-atribuído.Não
additional_data.fee.range_acquirerString—Código da faixa de taxa do adquirente.Não
additional_data.fee.range_issuerString—Código da faixa de taxa do emissor.Não

Exemplo de Requisição

curl --location --request POST 'https://api.pre.globalgetnet.com/dpm/payments-gwproxy/v2/payments/qrcode' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <ACCESS_TOKEN>' \
--header 'x-transaction-channel-entry: XX' \
--data-raw '{
  "idempotency_key": "cp-qr-visa-001",
  "request_id": "daac03dc-73db-453f-9bea-b1391669d5d3",
  "order_id": "ORDER-101",
  "amount": 10000,
  "currency": "CLP",
  "payment_method": "PURCHASE",
  "transaction_type": "NO_INTEREST",
  "serial_number": "CL00027L"
}'

Passo 2: Exibir o QR Code

Uma requisição bem-sucedida retorna HTTP 201 com um corpo JSON contendo a string EMV qr_code dentro de additional_data. Renderize esta string como uma imagem escaneável na tela do terminal.

Campos da Resposta

CampoTipoDescrição
payment_idString (UUID)Identificador exclusivo para este pagamento. Use isso para consultar o status final.
seller_idString (UUID)Identificador da conta do vendedor.
request_idString (UUID)Ecoa o request_id enviado na requisição.
idempotency_keyStringEcoa a idempotency_key enviada na requisição.
order_idStringEcoa o order_id enviado na requisição.
amountInteiroValor da transação em centavos.
currencyStringCódigo de moeda ISO 4217.
statusEnumResultado da geração do código QR: APPROVED, DENIED, ERROR, ou ACCEPTED.
reason_codeString (2 chars)Código de retorno do gateway ou adquirente.
reason_messageStringMensagem de retorno legível do gateway.
additional_data.transaction_idStringIdentificador de transação gerado pelo gateway.
additional_data.creation_date_qrcodeString (ISO 8601)Timestamp de quando o código QR foi criado.
additional_data.expiration_date_qrcodeString (ISO 8601)Timestamp de quando o código QR expira (110 segundos após a criação).
additional_data.qr_codeStringA string do QR code EMV para renderizar como uma imagem escaneável.
additional_data.qr_code_emv_typeEnumTipo de código QR: static ou dynamic.
additional_data.third_party_qr_code_idStringIdentificador do código QR gerado pelo provedor terceirizado.
additional_data.third_party_order_idStringIdentificador do pedido gerado pelo provedor terceirizado.

Exemplo de Resposta (HTTP 201)

{
  "payment_id": "03ec0ede-3bc9-42dd-a71b-1c3a670b2b89",
  "seller_id": "e0ed6f00-fdc5-46d6-9557-6a2cac641b09",
  "request_id": "daac03dc-73db-453f-9bea-b1391669d5d3",
  "idempotency_key": "cp-qr-visa-001",
  "order_id": "ORDER-101",
  "amount": 10000,
  "currency": "CLP",
  "status": "APPROVED",
  "reason_code": "00",
  "reason_message": "TRANSACTION EXECUTED SUCCESSFULLY",
  "additional_data": {
    "transaction_id": "890005df15a2-0b1e-4c6e-8ece",
    "qr_code": "00020101021241260009cl.getnet98097605970315204...",
    "qr_code_emv_type": "dynamic",
    "creation_date_qrcode": "2026-02-19T14:48:00.000Z",
    "expiration_date_qrcode": "2026-02-19T14:49:50.000Z",
    "third_party_qr_code_id": "61260970G",
    "third_party_order_id": "61260970G"
  }
}

status: "APPROVED" significa que o código QR foi gerado com sucesso — não indica que o cliente pagou. Você deve verificar o status real da transferência de fundos separadamente usando o payment_id.

Para processar a resposta:

  1. Extraia additional_data.qr_code e renderize-o como uma imagem QR escaneável na tela do POS.
  2. Inicie um cronômetro de contagem regressiva usando expiration_date_qrcode para descartar automaticamente os códigos expirados.
  3. Armazene o payment_id para consultar o status de autorização final no Passo 3.

Passo 3: Verificar o Status da Transação

Depois que o cliente escanear o código QR, verifique se o pagamento foi concluído usando um destes métodos:

  • Webhooks: Configure sua integração para receber notificações assíncronas de status de pagamento.
  • Consulta (Polling): Chame o endpoint Get Transaction com o payment_id retornado no Passo 2.

Respostas de Erro

Código HTTPDescrição
400 Bad RequestRequisição malformada ou campos obrigatórios ausentes.
401 UnauthorizedBearer token inválido ou expirado.
404 Not FoundRecurso referenciado não encontrado.
422 Unprocessable EntityA requisição foi bem-formada, mas falhou na validação da lógica de negócio.
429 Too Many RequestsLimite de taxa excedido.
500 Internal ErrorErro inesperado no servidor.
503 Service UnavailableServiço temporariamente indisponível.
504 Gateway TimeoutO gateway não recebeu uma resposta em tempo hábil.

Próximos Passos

Agora que você entende os pagamentos via QR Code, explore estes recursos relacionados de Cartão Presente:

  • Pagamentos de Passo Único: Processe vendas padrão com chip e tarja magnética.
  • Pagamentos Pré-autorizados: Gerencie fluxos em dois passos para reservas e capturas atrasadas.
  • Cancelar um Pagamento: Estorne uma transação capturada anteriormente.
  • Requisitos do Terminal: Verifique se o seu dispositivo suporta capacidades de exibição de QR.
  • Fluxo Cartão Presente: Revise os diagramas de sequência de baixo nível para todos os fluxos.