ouro.capital
||
pix

Idempotência em Transações Pix: O Segredo Técnico Contra Cobranças Duplicadas

2024-07-16·10 min read·Matheus Feijão

Ponto-chave

A idempotência garante que uma cobrança Pix enviada múltiplas vezes por erro de rede resulte em apenas uma transação financeira. Implementar chaves únicas (txid) e cabeçalhos de idempotência protege fintechs e e-commerces contra chargebacks, perda financeira e sanções regulatórias do Banco Central.

Imagine a cena. 23h59 de uma sexta-feira de Black Friday. O cliente tenta pagar um carrinho de R$ 4.500 na sua loja online. A internet dele oscila no 4G. Ele clica no botão "Pagar com Pix" três vezes seguidas, irritado com a lentidão da tela. Se a arquitetura do seu sistema financeiro não estiver devidamente preparada, você acabou de disparar três cobranças idênticas. O cliente paga uma, mas o sistema debita três vezes ou gera uma confusão de conciliação. O Procon vai bater na sua porta na segunda-feira pela manhã.

Esse é o pesadelo de qualquer operação de varejo, gateway de pagamento ou fintech. A solução técnica para evitar esse desastre tem um nome que parece saído de um livro de física quântica, mas que salva operações bilionárias todos os dias: idempotência.

Se você opera um e-commerce, processa pagamentos ou atua como um Participante Direto ou Indireto no Sistema de Pagamentos Instantâneos (SPI) do Banco Central, preste atenção aqui. O mercado hoje não tolera falhas primárias. No dia 5 de abril de 2024, o Banco Central registrou a marca histórica de 201,6 milhões de transações Pix em apenas 24 horas. Se a sua API converte ínfimos 0,01% desse volume em duplicidade por erro de processamento, estamos falando de mais de 20 mil clientes furiosos pedindo estorno em um único dia. A conta, financeira e reputacional, simplesmente não fecha.

O Que É Idempotência (E Por Que o Banco Central Exige Isso)

Vamos traduzir o jargão. Na matemática e na ciência da computação, uma operação é idempotente quando pode ser aplicada múltiplas vezes sem alterar o resultado além da aplicação inicial.

A analogia mais simples do cotidiano brasileiro é o botão do elevador. Você aperta o botão para chamar o elevador para o térreo. O botão acende. Se você, num ataque de ansiedade, apertar o mesmo botão mais dez vezes, o elevador não vai descer dez vezes. O sistema entende a intenção original e ignora as requisições repetidas. O estado final (o elevador chegando ao térreo) permanece exatamente o mesmo.

Na API Pix, regida pelo Manual de Padrões para Iniciação do Pix do BACEN, a lógica é idêntica. Uma requisição de criação de cobrança (cob) deve ser idempotente. O Banco Central desenhou a infraestrutura do Pix para ser resiliente por design. Quando o seu sistema envia um payload para o banco ou para o provedor de serviços de pagamento (PSP) exigindo a geração de um QR Code de R$ 100,00, a API precisa de uma garantia de que, se a mesma requisição chegar novamente um segundo depois, ela não criará uma segunda cobrança de R$ 100,00.

O Papel do TXID e do E2EID

Nossa análise técnica das regulações do BACEN mostra que a chave para essa trava de segurança reside em dois identificadores cruciais. O primeiro é o txid (Transaction ID), uma string alfanumérica gerada pelo recebedor (sua empresa) para identificar únicamente aquela cobrança. O segundo é o e2eid (End-to-End ID), gerado pelo sistema financeiro no momento em que a transação é efetivamente liquidada.

Se você envia uma requisição PUT para o endpoint /pix/api/v2/cob/{txid}, a presença do txid na URL atua como a chave primária daquela intenção de cobrança. Se o cliente clicar duas vezes, a segunda requisição baterá na API do banco com o mesmo txid. Um sistema bem implementado vai olhar para o banco de dados, ver que aquele txid já existe, e retornar os dados da cobrança original (geralmente com um HTTP Status 200 OK), em vez de criar uma nova (HTTP Status 201 Created).

A Anatomia de uma Falha de Pagamento Sem Idempotência

Por que as duplicidades acontecem? Quase sempre, a culpa é da rede, não do usuário. A comúnicação entre microserviços na internet é inerentemente falha.

Vamos destrinchar o fluxo de um erro clássico. O aplicativo do cliente envia a requisição de pagamento para o seu gateway. O seu gateway processa, valida o saldo ou o limite, e envia a ordem para a API do banco parceiro (como Itaú, BTG, Nubank ou Banco do Brasil). O banco processa a ordem com sucesso no SPI do Banco Central.

Até aqui, tudo perfeito. O dinheiro mudou de mãos.

Mas, no exato milissegundo em que o banco tenta devolver a resposta de "Sucesso" para o seu gateway, um roteador no meio do caminho sofre uma oscilação. Ocorre um "Timeout". O seu gateway fica esperando a resposta por 10 segundos, desiste, e lança um erro 504 Gateway Timeout.

O cliente vê uma tela vermelha de erro no celular: "Falha ao processar pagamento. Tente novamente".

O que o cliente faz? Ele tenta novamente.

Se o seu gateway tentar gerar uma nova cobrança sem usar uma chave de idempotência atrelada à tentativa anterior, o banco receberá a nova ordem como se fosse uma transação completamente nova. O cliente será debitado uma segunda vez. A primeira transação ocorreu no limbo da rede; a segunda ocorreu com sucesso na tela do usuário. A bomba-relógio da duplicidade está armada.

O Padrão Retry e o Efeito Avalanche

Sistemas modernos útilizam bibliotecas que fazem "retry" automático. Se uma requisição HTTP falha, o código tenta de novo silenciosamente. Se você configura o seu sistema para fazer 3 retries em caso de falha de rede sem implementar a idempotência no cabeçalho da requisição, um único gargalo de rede pode gerar quatro transações financeiras reais.

Gigantes como Mercado Pago, Stone e PagSeguro processam milhares de transações por segundo (TPS). Eles não confiam na estabilidade da rede. Eles confiam na arquitetura de software. A idempotência é a única barreira que impede que um instabilidade de 30 segundos na AWS ou no Azure cause um rombo milionário na conta de liquidação da empresa.

Padrões de Implementação na API Pix

Como blindar o seu sistema na prática? Observamos que as melhores equipes de engenharia financeira do Brasil adotam uma abordagem em múltiplas camadas para garantir a idempotência.

1. O Cabeçalho Idempotency-Key

O padrão ouro na indústria de pagamentos (popularizado pela Stripe e amplamente adotado no Brasil) é o uso do HTTP Header Idempotency-Key (RFC 8946). Quando o cliente inicia o checkout, o front-end gera um UUID (Universally Unique Identifier) v4. Esse UUID é enviado no cabeçalho de todas as requisições referentes àquela tentativa de pagamento.

O servidor de back-end recebe a requisição e, antes de fazer qualquer cálculo ou chamada externa, verifica esse UUID em uma camada de cache ultrarrápida (como Redis).

Se a chave não existe, o servidor a registra com o status "em processamento" e segue o fluxo. Se a chave já existe e o status é "concluído", o servidor aborta o processamento atual e simplesmente devolve o payload da resposta original que estava guardado no banco de dados.

2. Constraints de Banco de Dados (Unique Keys)

Nunca confie apenas na camada de aplicação. O seu banco de dados relacional (seja PostgreSQL, MySQL ou Oracle) precisa ser a última linha de defesa. A tabela que armazena as transações Pix deve ter uma restrição de unicidade (Unique Constraint) para a coluna txid ou para a coluna idempotency_key.

Se duas requisições concorrentes passarem pelo gargalo do cache ao mesmo tempo (uma condição de corrida ou "race condition"), o banco de dados lançará uma exceção de violação de chave única ao tentar inserir a segunda linha. O seu código captura essa exceção e trata a requisição como duplicada. É um hard-stop arquitetural.

3. TTL (Time to Live) Adequado

Chaves de idempotência não precisam viver para sempre. No contexto de pagamentos de e-commerce, manter a chave válida por 24 horas é geralmente suficiente. O manual do BACEN sugere regras específicas para a expiração de cobranças e QR Codes, e a sua chave de idempotência deve refletir a jornada do usuário. Guardar chaves infinitamente apenas infla o seu banco de dados e encarece a sua infraestrutura na nuvem.

O Custo Oculto da Duplicidade para Fintechs e E-commerces

Não encare a idempotência apenas como um preciosismo de engenheiros de software. Trata-se de uma métrica direta de risco financeiro e conformidade regulatória.

Quando uma cobrança duplicada ocorre no Pix, a reversão não é tão simples quanto num cartão de crédito. O Pix é um pagamento instantâneo e irrevogável por natureza. O dinheiro sai da conta A e cai na conta B em menos de 3 segundos, 24 horas por dia, 7 dias por semana.

Para devolver esse dinheiro, a sua operação precisa iniciar um processo de devolução (refund) através da própria API do Pix. Isso consome processamento, gera taxas operacionais junto ao seu PSP e, pior, destrói a confiança do consumidor. O cliente que vê o saldo bancário sumir em dobro vai imediatamente ao Reclame Aqui, ao Procon e ao Banco Central (via Registrato).

O Banco Central possui índices rigorosos de qualidade para os participantes do SPI. Um volume alto de transações revertidas por falhas sistêmicas acende um alerta vermelho no Departamento de Competição e de Estrutura do Mercado Financeiro (Decem) do BACEN. A sua instituição pode sofrer auditorias, limitação de volumetria e, em casos extremos, a desconexão do diretório do Pix.

Além disso, existe o risco de fraude. Cibercriminosos testam ativamente APIs de fintechs buscando falhas de concorrência. Se eles descobrem que a sua API de saque não é idempotente, podem disparar dezenas de requisições simultâneas para sacar o mesmo saldo múltiplas vezes antes que o banco de dados atualize o limite da conta. A falta de idempotência é a porta de entrada para ataques de "Double Spending" (Gasto Duplo).

Implicações Práticas: Como Blindar Sua Operação Hoje

Se você lidera uma operação técnica ou financeira, precisa fazer as perguntas difíceis para a sua equipe agora mesmo:

  1. O nosso gateway de pagamento aceita requisições idênticas em um intervalo de 100 milissegundos?
  2. O que acontece se o PSP parceiro não responder em 5 segundos?
  3. Temos alertas configurados no Datadog, New Relic ou Grafana para picos de erros 409 Conflict ou violações de Unique Key?

Na prática, a sua equipe de engenharia precisa implementar middlewares de idempotência em todas as rotas que alteram estado financeiro (POST, PUT, PATCH).

A regra de ouro é separar a geração da intenção de pagamento da execução do pagamento. Quando o cliente clica em "Pagar", crie um registro no seu sistema em estado "Pendente". Apenas um processo (um worker) deve ser responsável por pegar esse registro pendente e tentar efetivar no banco. Se o cliente clicar dez vezes, ele apenas receberá o status do mesmo registro pendente, sem gerar novas ordens de liquidação.

Visão de Futuro: Pix Automático e a Nova Era da Confiabilidade

O mercado brasileiro está prestes a passar por outro abalo sísmico com a chegada oficial do Pix Automático, projetada pelo Banco Central. Essa modalidade permitirá cobranças recorrentes (como contas de luz, academias, assinaturas de software) debitadas diretamente da conta do usuário sem necessidade de autenticação a cada transação.

Se a idempotência já é crítica em transações únicas de e-commerce, no Pix Automático ela se torna o oxigênio da operação. Um erro de cronjob (tarefa agendada) no seu servidor que dispare o lote de cobranças de assinaturas duas vezes no mesmo dia pode esvaziar a conta corrente de milhares de clientes de forma automática. As multas regulatórias para falhas no Pix Automático serão implacáveis.

A tecnologia financeira no Brasil evoluiu de forma brutal. O Pix tirou o país da idade da pedra do TED/DOC que funcionava apenas em horário comercial e nos colocou na vanguarda global, superando até mesmo modelos europeus (PSD2) e se equiparando ao UPI da Índia em volume e adoção.

Essa modernidade cobra o seu preço em excelência técnica. A idempotência deixou de ser um diferencial competitivo de grandes bancos e passou a ser o requisito básico de sobrevivência para qualquer empresa que movimenta dinheiro no Brasil. Proteger o seu sistema contra falhas de rede é, no fim das contas, proteger o patrimônio do seu cliente e a reputação da sua marca.

Perguntas Frequentes

MF

Matheus Feijão

CEO & Fundador — ouro.capital

Especialista em fintech e criptoativos desde 2002. CEO da ouro.capital.