Boa noite bruno, fui fazer um teste de um pagamento até o fim e creio que tenha achado um bug no modulo,
quando o cliente escolhe o metodo de pagamento, o pague seguro manda o status: Aguardando Pagamento, nessa você trava a geração de fatura, segundo code:
UOL/PagSeguro/Model/Standard.php - Linha 864:
} else { // Em espera/análise/aguardando pagamento(boleto) $changeTo = Mage_Sales_Model_Order::STATE_HOLDED; if ($order->canHold()) { $comment = utf8_encode($status . ' - ' . $post->TipoPagamento); $order->setState($changeTo, true, $comment, $notified = false); } $order->getPayment()->setPagseguroTransactionId($post->TransacaoID); $order->getPayment()->setPagseguroPaymentMethod($post->TipoPagamento); $order->getPayment()->save(); } if ($changeTo != "") { Mage::log("PAGSEGURO - Status do pedido atualizado: $changeTo"); }
quando um status vem como aprovado ou completo, primeiro vc vericar se ainda é possivel gerar boleto, sendo que esse boleto já foi gerado e pago, nisso você da uma mensagem de erro lá no pedido:
UOL/PagSeguro/Model/Standard.php - Linha 832
if (in_array(strtolower($status), array('completo', 'aprovado'))) { if (!$order->canInvoice()) { //lógica para quando a fatura não puder ser criada $order->addStatusHistoryComment('Erro na criação da fatura.'); Mage::log("PAGSEGURO - Fatura não criada"); } else { $order->getPayment()->setPagseguroTransactionId($post->TransacaoID); $order->getPayment()->setPagseguroPaymentMethod($post->TipoPagamento); $invoice = $order->prepareInvoice(); $invoice->register()->pay(); $invoice_msg = utf8_encode(sprintf('Pagamento confirmado (%s). Transação PagSeguro: %s', $post->TipoPagamento, $post->TransacaoID)); $invoice->addComment($invoice_msg, true); $invoice->sendEmail(true, $invoice_msg); $invoice->setEmailSent(true); Mage::getModel('core/resource_transaction') ->addObject($invoice) ->addObject($invoice->getOrder()) ->save(); $comment = utf8_encode(sprintf('Fatura #%s criada.', $invoice->getIncrementId(), $post->TipoPagamento)); $order->setState( Mage_Sales_Model_Order::STATE_PROCESSING, true, $comment, $notified = true ); Mage::log("PAGSEGURO - Fatura criada"); } }
o if da linha 833 retorn true pois não é possivvel criar a fatura(true) e vc inverte o if.
Bem, pela lógica da função Mage_Sales_Model_Order::canInvoice(), realmente a fatura nunca deveria ser criada. O estranho é que esse código está assim já há um bom tempo, e os retornos de minhas vendas sempre funcionaram OK.
Em todo caso, adicionei uma outra condição no if, para o caso do pedido estar em espera (a mesma solução utilizada no cancelamento). Assim, a criação da fatura ocorrerá sem problemas, e somente na devida situação.
Funcionou Bruno, aqui só fiz algumas modificações em relação ao endereço, seria legal se consegui-se mudar os identificadores dos modulos em relação ao original da visie, por exemplo, no momento estou usando o seu e o da visie em paralelo, foi não rolou aqui o modulo de entrega do pedroteixeira e nem o da noix, é o seu para pagamento e o da Visie para entrega, continuo com aquela alteração no resources sitada anteriormente para tudo correr bem.
Quais modificações nos endereços você fez, Édipo?
Eu deixei essa questão de uma maneira simples, sem adicionar campos e etc. Se for alguma melhoria que possamos implementar no módulo, gostaria de saber.
Em breve alterarei a estrutura do módulo, para que não haja problemas em usá-lo juntamente ao da Visie.
Em relação aos endereços, é algo mais customizado em relação a minha loja, dexei o primeiro campo como Rua, o Segundo como número e o terceiro como complemento, talvez pude-se ter algo que deixa-se isso configuravel no módulo, o campo numero é obrigatorio para o pag seguro, e provavelmente é enviado como sem numero na grande maioria das vezes.
Eu estou afim de fazer um modulo desse, mas não nesse momento pois estou bem atarefado, rs.
Sobre o funcionamento atual do modulo, o PagSeguro esta enviado um email de pagamento cancelado para o cliente, quando o mesmo não paga, mas o mesmo não é alterado no magento.
É, realmente a questão dos endereços depende bastante da loja, e fazer essas alteraçoes implica mais em customização do tema do que do módulo em si, por isso deixei utilizando o formato padrão de endereços do Magento.
Talvez seria bom incluir os campos adicionais (bairro, número e DDD) no banco de dados, através da instalação do módulo, e incluir uma escolha do padrão do endereço: Magento ou personalizado. No caso de personalizado, aí sim seriam necessárias as alteraçoes no tema utilizado.
Sobre o cancelamento, você teria os logs das transações para analisarmos o que pode estar ocorrendo de errado?
Até quando testei, deixando o PagSeguro cancelar o boleto, o cancelamento do pedido ocorreu normalmente também.
De qualquer forma, estou aguardando mais alguns boletos serem cancelados para ver o que acontece. Vou também instalar o servidor de testes do PagSeguro para ver se consigo agilizar isso.
Na parte do cancelameto, vc set a varivel changeTo com o valor da constante STATE_CANCELED, mas vc não chama o setState, embora vc chame outros metodos, que pelo nome deveriam fazer isso, coloquei o setState lá vou testar denovo e ver o que rola.
Bruno tudo bom?
MEu nome é Jost Dayan e gostaria de deixar um teste que fiz e que para mim funcionou.
Eu estava tendo problema com o modulo pagseguro tanto o seu como o da visie.
A primeira msg com o seu modulo falava que a minha conta no pagseguro não era compativel??.(uma coisa assim, não lembro direito).
E com o modulo da Visie falava que o carrinho estava vazio quando finalizava a compra.
Eu apaguei o modulo e instalei novamente, removendo todos os dados e limpando o sql.
Ai a msg do seu modulo mudou para a mesma do modulo da Visie, que o carrinho estava vazio.
Novamente eu apaguei todos os arquivos no server e limpei as tabelas, so que desta vez eu so mandei para o server a pasta code e etc do seu modulo.
E agora está funcionando perfeitamente.
Não sei se isso tem alguma coisa haver, mas está funcionando perfeitamente.
Eu estive reestudando os métodos da classe de pedido do Magento, e concluí que a “salada” que fiz para gerenciar o status precisava de uma melhorada.
Não utilizei diretamente o setState(), pois ele já existe e deve ser executado dentro do registerCancellation(), que por sua vez deve ser utilizado pelo cancel(). Dessa maneira, o código fica mais enxuto (KISS? =D).
E Jost, a limpeza dos caches e do banco de dados, em relação ao módulo da Visie, é altamente recomendada ao instalar este módulo, uma vez que ainda não é possível instalá-los em paralelo (pelo menos não sem alguns ajustes). Nas vezes que não deu certo, provavelmente faltou você fazer alguma parte importante. Mas obrigado pelo feedback, que bom que agora está funcionando!