Proteside Docs

Integridade de pagamento e Pix

Como o SDK valida Pix, boleto, cripto e cartão no checkout e como cadastrar recebedores confiáveis.

Além de vigiar scripts, o SDK confere se os dados de pagamento exibidos ao cliente são os da sua loja: o código Pix copia e cola, a linha digitável do boleto, o endereço cripto e o valor. Esta página explica como ele encontra esses dados, o que é validado e como fixar os recebedores confiáveis.

Como o SDK encontra o pagamento

Não é preciso marcação especial. Depois de iniciar, o SDK procura códigos de pagamento na página:

  1. em seletores conhecidos, como [data-pix-code], #pix-code, .pix-copia-cola, [data-pix-qr], [data-crypto-address], #crypto-address, .wallet-address, [data-payment-value] e [data-qr-value];
  2. em todo texto visível do <body> com 20 a 1.000 caracteres;
  3. em mudanças na página (por exemplo, quando o código Pix é inserido depois de o cliente escolher Pix);
  4. a cada 2 segundos, durante o primeiro minuto, como garantia.

O código é reconhecido pelo formato: BRCode do Pix (padrão EMV), linha digitável de boleto (47 ou 48 dígitos), endereços Bitcoin e Ethereum, VPA UPI e QR codes EMV de outros países (PayNow, PromptPay, DuitNow, QR Ph, HK FPS, Transferencias 3.0, CoDi e carteiras QR).

O código precisa estar em um texto da página

O SDK lê texto, não o valor de campos de formulário. Um Pix copia e cola exibido só em <input readonly value="000201…"> não é detectado, e o mesmo vale para um <textarea> preenchido por JavaScript. Exiba o código como texto, por exemplo <div id="pix-code">000201…</div>, ou informe o recebedor com Proteside.registerPaymentPayload().

Recomendado: código Pix como texto
<div class="pix">
  <img src="/qrcode/pedido-1234.png" alt="QR code Pix" />
  <div id="pix-code">00020126580014br.gov.bcb.pix0136…6304ABCD</div>
  <button type="button">Copiar código</button>
</div>

Validação do pagamento

A primeira leitura válida de cada método na página vira a referência daquele carregamento. A partir daí:

  • se o texto exibido mudar para outro código que não bate com a referência, o SDK emite o evento de adulteração do método (PIX_TAMPERED, BOLETO_TAMPERED, CRYPTO_ADDRESS_SWAP, UPI_TAMPERED ou QR_TAMPERED);
  • se o conteúdo copiado para a área de transferência for um código diferente da referência, o SDK emite CLIPBOARD_HIJACK;
  • quando a leitura é válida, o SDK emite PAYMENT_VALIDATED, que alimenta a página Integridade de Pagamento do dashboard.

PAYMENT_VALIDATED é enviado na primeira detecção, quando o código muda para o mesmo recebedor (por exemplo, um QR regerado) e, no máximo, a cada 60 segundos enquanto o cliente está na página. O evento nunca leva o código nem a chave: só o método, se o recebedor foi verificado e a quantidade de campos.

Cartão

O SDK não lê dados de cartão. Ele considera um pagamento com cartão validado quando:

  • encontra na página o iframe de um provedor de pagamento conhecido (Stripe, Adyen, Braintree, Mercado Pago, Pagar.me, PagBank, Iugu, Cielo e outros) e observa uma resposta de sucesso a uma requisição de cobrança; ou
  • encontrou o iframe e, em até 10 minutos, o cliente chega a uma página de confirmação com obrigado, sucesso, thank-you, success, confirmacao ou order-complete no caminho.

Para o segundo caso funcionar, o snippet precisa estar também na página de confirmação.

Recebedores confiáveis (Pix Key Pinning)

Sem uma lista de recebedores, um código de pagamento adulterado desde a primeira exibição viraria a referência, e nada pareceria errado. A lista de recebedores confiáveis resolve isso: o SDK confere o recebedor de cada código com as chaves que pertencem à sua loja.

Abra Proteção do pagamento

No dashboard, vá em Configurações → Proteção do pagamento, seção Recebedores confiáveis. Só proprietários e administradores podem cadastrar.

Informe o recebedor

Escolha o Método (Pix, Bitcoin, Ethereum, UPI ou Boleto (banco)), preencha a Chave e, se quiser, um Rótulo.

  • Pix: CPF, CNPJ, e-mail, telefone (+55…) ou chave aleatória.
  • Boleto: o código do banco emissor (3 dígitos) ou a linha digitável completa.

Clique em Adicionar

O recebedor é salvo na hora e chega ao SDK pela configuração remota. O dashboard guarda só o hash SHA-256 e uma máscara da chave.

O SDK recebe apenas os hashes. Para comparar, ele normaliza o recebedor lido no checkout (e-mail em minúsculas, telefone só com dígitos, boleto pelos 3 primeiros dígitos) e calcula o mesmo hash.

SituaçãoResultado
Recebedor do código está na listaO código vira a referência e PAYMENT_VALIDATED sai com o recebedor verificado. O dashboard mostra Recebedor confere com a lista confiável.
Recebedor não está na listaO SDK emite o evento de adulteração do método com o motivo "recebedor não confiável" e não aceita o código como referência. No modo Bloquear, o texto do código é trocado por ⚠︎.
Nenhum recebedor cadastrado para o métodoSem verificação de recebedor. Vale só a comparação com a primeira leitura.

Limites da neutralização no modo Bloquear

O SDK neutraliza só o texto que ele leu. A imagem do QR code, campos <input value> e outras cópias do código na página continuam como estão, e uma nova renderização do checkout pode restaurar o texto. Trate o alerta como incidente mesmo com o modo Bloquear ligado.

Limitações

  • Pix dinâmico. Um BRCode dinâmico traz uma URL de cobrança em vez da chave do recebedor. Sem chave no código, não há verificação de recebedor; continua valendo a comparação com a primeira leitura.
  • Boleto de arrecadação (linha de 48 dígitos, de concessionárias e tributos) não tem código de banco e fica sem verificação de recebedor.
  • Pix em campo de formulário não é lido (veja o aviso no início desta página).
  • Carteiras QR e pagamentos instantâneos de outros países são reconhecidos e validados, mas não aceitam recebedor cadastrado.

Valor esperado e recebedor da sessão

Se o seu checkout sabe o valor e a chave do pedido, informe ao SDK com Proteside.expectPayment():

// Antes de exibir o código Pix do pedido
Proteside.expectPayment({ method: 'pix', amount: '19,90', key: 'pix@minhaloja.com.br' })
  • amount habilita AMOUNT_TAMPERED: se o valor do código for diferente do esperado, o SDK alerta. Aceita 19.9, '19,90' ou 'R$ 19,90', comparados com duas casas decimais.
  • key adiciona um recebedor confiável só para esta página. Só o hash fica em memória.

Chame expectPayment antes de o código aparecer na página e só depois que o SDK terminar de iniciar. Veja como esperar o SDK.

Métodos de pagamento

Em Proteção do pagamento → Métodos de pagamento você marca os métodos que a loja oferece. No navegador, essa lista só define o que aparece em getStatus().paymentMethodsMonitored e quando o SDK para de procurar códigos.

Desmarcar um método não desliga a detecção

A tela diz que desmarcar métodos reduz ruído e que, sem nenhum método marcado, a verificação ficará desativada. No código, o SDK reconhece e valida todos os métodos, marcados ou não, e uma lista vazia é tratada como Pix e cartão.

Páginas de pagamento

As páginas de pagamento (padrões de URL, com modo e métodos por página) são cadastradas pela API, não pelo dashboard. Elas servem para contar as pageviews de páginas de pagamento no uso do plano e para os relatórios de conformidade.

O modo e os métodos definidos por página não chegam ao SDK. O SDK roda igual em todas as páginas em que o snippet estiver, com o modo e os métodos da loja.

No dashboard

A página Integridade de Pagamento mostra um cartão por método com o status NÃO CONFIGURADO, AGUARDANDO (nenhum pagamento observado ainda), ÍNTEGRO ou ADULTERADO, e a situação do recebedor. Veja Integridade de pagamento.

Próximos passos

Nesta página