Backend, APIs e dados · Misto

Trabalhar com dinheiro: pagamentos e cobranças

Em uma linha: Nunca armazene dados de cartão, nunca confie em um valor que veio do cliente, e sempre mantenha um log imutável de eventos.

A divisão de responsabilidade

O provedor de pagamento cuida do cartão; você cuida do pedido. Os detalhes são inseridos no formulário do provedor ou em um componente isolado, e do seu lado só se guarda um identificador. Isso te mantém fora da maior parte do mundo pesado de conformidade.

O valor é calculado no servidor a partir dos seus preços. Um valor que veio do cliente é um pedido, não um fato.

Estados, não flags

Um pedido passa por estados definidos: criado, aguardando pagamento, pago, falhou, reembolsado. Cada transição é registrada com horário e motivo. Uma flag booleana 'pago' perde o histórico exatamente quando você precisa.

Notificações do provedor de pagamento chegam fora de ordem e às vezes duas vezes. Trate-as por identificador de evento, de forma segura para repetição.

Conciliação

Construa um processo diário que compare seus registros com o relatório do provedor. Discrepâncias sempre acontecem; a pergunta é se você as encontra ou o cliente.

Indo mais fundo

Armazene valores como inteiros na menor unidade, nunca como decimal de ponto flutuante, e sempre com um código de moeda. Armazene também a taxa de câmbio e o preço realmente exibido — são os dados necessários em qualquer disputa e em qualquer relatório.