Como o PayApp prova que um comprovativo é verdadeiro
Documento técnico. Explica o que o sistema faz, o que não faz, e porque é que consegue apanhar fraude sem guardar os dados de ninguém. Escrito para ser lido por quem decide e por quem integra.
O problema
Em Angola, a maior parte do comércio recebe por transferência bancária. O cliente paga, tira uma fotografia ou descarrega o comprovativo em PDF, e envia-o ao vendedor — normalmente por WhatsApp. O vendedor olha para o documento e decide, ali, se entrega a mercadoria.
Essa decisão é tomada a olho. E um comprovativo é trivial de forjar: basta abrir um PDF antigo, mudar o valor e o nome, e reenviar. O vendedor perde a mercadoria e o dinheiro, e só descobre dias depois, quando concilia o extracto.
O que verificamos
O PayApp não olha para o aspecto do documento. Olha para a sua assinatura criptográfica. Os comprovativos emitidos pelos bancos angolanos através da EMIS são assinados digitalmente (PKCS#7 / PAdES) com uma chave que só a entidade emissora possui.
A verificação faz quatro perguntas, por esta ordem, e qualquer uma delas chega para recusar:
- A assinatura é válida? Confere contra a chave fixada da entidade emissora. Se o ficheiro foi tocado depois de assinado, a assinatura quebra.
- O dinheiro foi para si? Confere o IBAN ou o número Multicaixa Express de destino contra as contas que a loja registou.
- O valor bate certo? Compara com o valor esperado da encomenda, quando este é enviado.
- Já foi usado? Compara a impressão digital da transacção com as anteriores da mesma loja.
Um comprovativo genuíno de uma transferência genuína para a conta certa passa nas quatro. Um PDF editado falha logo na primeira.
Porque é que não guardamos nada
Um comprovativo bancário contém o nome do seu cliente, o IBAN dele, o valor e a data. É dos documentos mais sensíveis que passam pelo seu negócio. Guardá-lo criaria, para si e para nós, um risco que não tem contrapartida nenhuma.
Por isso o PayApp foi construído ao contrário do habitual: o PDF é analisado em memória e descartado quando o pedido termina. Não é escrito em disco, não vai para armazenamento, não entra em cópia de segurança. O nome, o IBAN e o valor existem apenas dentro da resposta que lhe devolvemos.
Isto não é uma política — é uma propriedade do sistema. Não há definição que se possa mudar para começar a guardar, porque não existe o sítio onde guardar. Se nos pedissem os dados dos seus clientes, não teríamos o que entregar.
Como apanhamos repetidos sem guardar a transacção
Detectar um comprovativo reenviado exige lembrar que ele já passou. Guardar o número da transacção resolveria — e violaria a promessa. A solução é guardar algo que prova a repetição sem revelar o original:
Guardamos apenas essa impressão. É irreversível — de um resumo SHA-256 não se recupera o número de origem. E leva o identificador da loja lá dentro, por isso a mesma transacção produz impressões diferentes em lojas diferentes: nem sequer conseguimos cruzar clientes entre lojas.
Quando chega um comprovativo, calculamos a impressão e perguntamos se já existe. A resposta é sim ou não. É tudo o que precisamos, e é tudo o que sabemos.
A integração
Uma chamada, autenticada por chave de API. O ficheiro vai no corpo do pedido.
As respostas são sempre JSON com os mesmos campos, em português, sem abreviaturas crípticas. O campo motivo traz a explicação em linguagem humana quando a verificação falha — para poder mostrá-la directamente ao seu cliente.
Notificações
Cada verificação genuína dispara os avisos que a loja tiver configurado, em paralelo e sem atrasar a resposta:
Webhook — um POST no seu servidor, assinado com HMAC-SHA256. O cabeçalho x-payapp-signature traz v1=HMAC(segredo, timestamp + "." + corpo). Confirme-o antes de confiar no conteúdo; é isso que impede alguém de forjar um aviso de pagamento.
WebSocket — ligação permanente para painéis que têm de reagir sem recarregar. É o mesmo canal que alimenta o contador público na página inicial.
Email, SMS e WhatsApp — para quem não quer escrever código. Configura o contacto uma vez no painel.
Preço
Cem verificações por mês, grátis, sem prazo. A partir daí, 50 Kz por verificação, descontados de um saldo que se carrega por transferência. Sem mensalidade, sem contrato, sem valor mínimo mensal. Se num mês não vender nada, não paga nada.
O que isto não faz
O PayApp não move dinheiro. Não é uma carteira, não é um banco, não processa pagamentos e não toca nos seus fundos. O dinheiro vai directamente do seu cliente para a sua conta, como já vai hoje. O que fazemos é responder a uma pergunta: este comprovativo é verdadeiro?
Também não substitui a conciliação bancária. Um comprovativo genuíno prova que a transferência foi ordenada — a boa prática continua a ser confirmar a entrada no extracto para valores altos.
PayApp é um produto da Ferreira Korp · Luanda, Angola · +244 945 321 186