Estamos usando o Magento EE 1.13.0.2 com o método de pagamento Padrão de pagamentos no site do PayPal . Infelizmente, não é possível definir um status de pedido para pedidos pagos do PayPal no back-end.
Precisamos definir um status de pedido personalizado quando o pedido for pago com sucesso (e não parcial). Os tutoriais para modificar o status do pedido do PayPal parecem estar desatualizados, incorretos ou feios.
Pelo que eu recolhi:
- as atualizações de pagamento seriam tratadas pelo IPN do PayPal.
- Existe um método
Mage_Paypal_Model_Ipn::_registerPaymentCapture()
responsável por "Processar pagamento concluído (total ou parcial)". - Na
Mage_Paypal_Model_Ipn::_registerTransaction()
solicitação do PayPal é analisado e o status do pagamento é comparado aMage_Paypal_Model_Info::PAYMENTSTATUS_COMPLETED
.
Para ser sincero, não sei o que fazer com essas informações. Posso reescrever Mage_Paypal_Model_Ipn::_registerTransaction()
e apenas adicionar meu código:
// paid
case Mage_Paypal_Model_Info::PAYMENTSTATUS_COMPLETED:
$this->_registerPaymentCapture(true);
// my code here
break;
É claro que um observador de eventos (por exemplo, um dos eventos do pedido ou do estado do pedido) seria muito mais agradável, mas não tenho certeza se existe uma maneira 100% confiável de capturar esse evento único quando o pedido é pago completamente via PayPal .
Alguma ideia?
Atualizar
Optamos por modificar o fluxo de status do pedido e não precisamos mais modificá-lo. Deixarei a pergunta em aberto por algum tempo, caso alguém queira responder.
fonte
Acabei com outra solução. Depois de lutar com esse problema por algumas horas, percebi que, no meu caso específico, não importava se apenas os pedidos do PayPal tinham um status específico (é para uma conexão ERP, que procura pedidos em um status específico).
O PayPal não define o status do pedido. Apenas captura o pagamento. O Magento define o estado do pedido como Processando (consulte
Mage_Sales_Model_Order_Payment::registerCaptureNotification()
) e define o status para o status padrão dentro desse estado.Tudo o que eu precisava fazer era alterar o status padrão dentro do estado Processing para o status que eu precisava através da interface administrativa ( Sistema » Status do pedido ).
Espero que isso ajude alguém!
fonte