Closed dbiagi closed 7 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.
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.
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.
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?