Fórum OpenCart Brasil

Por um e-commerce livre, confiável e profissional

Suporte para extensões de Formas de Pagamento
#17705
Atenção a todos que usam o pagamento digital como uma das formas de pagamento:


Recentemente tomei um golpe em meu ecommerce (vendas de cd keys de games e sofwares)

Temos uma média de 15 a 30 encomendas por dia e temos um sistema de envio automatico por email dos CD KEYS dos games. Assim que alguem confirma o pagamento ele recebe o cd key por email em 5 minutos.

Ontem recebemos um pedido fraudulento:


Relato:
A pessoa pagou apenas 0,25 centavos para uma ORDEM de mais de 220,00 reais em CD KEYS e o PAGAMENTO DIGITAL confirmou o pagamento como APROVADO e teve o retorno automatico e mudança de status da ordem para PAGAMENTO CONFIRMADO (status que nossos serviço automatico de entregas de cd keys espera para enviar os games). O comprador recebeu mais de 5 cd keys pagando apenas 0,25 centavos!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


A loreane Brandizzi, nossa webmaster fez uma correção de segurança no MODULO DO PAGAMENTO DIGITAL para evitar este tipo de erros:


loreane [reply]

Ola Pessoal.

Aconteceu algo inesperado em uma loja que eu administro. Um cliente comprou um produto no valor de R$ 62,00 mas só pagou R$ 1,00 no pagamento digital. Acho que ele escolheu alguma opção de boleto ou transferência que permitia trocar o valor.

Então alterei nosso arquivo admin/catalog/payment/pagamento_digital.php, depois da linha 201 inseri a segiunte condição:


if ( $order['total'] == $valor_original){
$this->model_checkout_order->update($id_pedido[0], $this->config->get('pagamento_digital_order_concluido'), '', $update_status_alert);
}else{
$commentario = "FRAUDE - Valor pago no pagamento digital <b>".$valor_original."</b> diferente do valor total da ordem <b>".$order['total']."</b>.";
$this->model_checkout_order->update($id_pedido[0], $this->config->get('pagamento_digital_order_cancelado'), $commentario, $update_status_alert);
}



Agora ele testa se o valor Original (recebido via POST do pagamento digital) é igual ao total da ordem. Juliocesar757, não sei se essa é a melhor forma, mas está funcionando redondinho ;) sugiro atualizarem o módulo.

Foi decepcionante ser furtado assim, mas agora espero não ocorrer mais.

Detalhe, o pagamento digital mandou o retorno de "PAGAMENTO CONFIRMADO" embora o valor esteja incorreto, por isso foi tão sério. Acabamos enviando o produto mesmo o cliente não tendo pago tudo.
#17711
O Pagamento Digital não tem culpa. Para ele, o total do pedido era os R$ 0,25. O fraudador simplesmente abriu o código fonte do passo 6 e modificou o total do pagamento. Se ele usar firebug ou inspeção de código, nem precisa salvar o arquivo, ele prossegue com a fraude na mesma janela do navegador.
#20136
Só lembrando que a correção que o driverepin postou tem um pequeno problema nessa linha:
Código: Selecionar todos
if ( $order['total'] == $valor_original){ 
Pois a variável $order['total'] pode vir com 3 ou mais casas decimais de precisão e a variável $valor_original sempre terá 2 casas decimais de precisão.

O correto seria:
Código: Selecionar todos
if ( round($order['total'], 2) == $valor_original){
Até mais a todos.