claudiosanches / woocommerce-moip

WooCommerce Moip - WordPress Plugin
http://wordpress.org/plugins/woocommerce-moip/
28 stars 14 forks source link

Id Próprio já foi utilizado em outra Instrução #19

Closed dbiagi closed 8 years ago

dbiagi commented 8 years ago

Me deparei com esse erro ao desenvolver um ecommerce usando esse plugin do moip. Vi que isso é uma trava de segurança do próprio moip onde o mesmo não deixa criar outro token com o mesmo id próprio. No arquivo class-wc-moip-gateway.php linha 534, é gerado esse id próprio com base em um prefixo e o nº do pedido. Problema: caso o usuário de F5, ou caso ele demore para escolher o método de pagamento e o chrome tirar da memoria a página e depois de um tempo o cliente voltar, esse erro será mostrado para ele. E o mesmo não conseguirá comprar mais nada, uma vez que esse pedido será vinculado ao cliente, e toda vez que o cliente for fazer checkout o woocommerce nao cria um novo, mas pega esse em aberto, fazendo com que o plugin tente criar um outro token com um id proprio já usasdo.

Para resolver isso pensei em adicionar um time() na linha 534, fazendo com que cada token seja único:

'id_transacao' => $this->invoice_prefix . $order->id . '_' . time(),

Dai gostaria de saber se existe algum problema nisso. Tem algum razão para o id próprio não ter um número aleatório?

claudiosanches commented 8 years ago

Colocar esse time() é um problema bem grave, o ID deve ser unico e se por algum motivo não deu certo, precisa cancelar o pedido e começar de novo.

dbiagi commented 8 years ago

Colocando o time, o IdProprio continuaria sendo único, a diferença é que a cada vez que o usuário entrasse na tela de pagamento o IdProprio seria gerado novamente sem o problema de já haver outro igual. Não entendo o porquê disso ser um erro tão grave. Ficaria muito agradecido se, uma hora que tiver tempo, me explicasse melhor.

claudiosanches commented 8 years ago

Se quer fazer, pode fazer, o código é livre, mas não vou colocar isso no plugin. E já vou avisando que se fazer isso as notificações de pagamento vão parar de funcionar.