Definir o status do pedido personalizado para pagamentos completos do site do PayPal Pagamento padrão?

9

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 a Mage_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.

Matthias Zeis
fonte

Respostas:

2

O grande problema é que não há sequer um evento em todo o fluxo de trabalho do paypal.

Portanto, existem duas opções:

Reescreva qualquer um desses modelos Paypal

Como você disse, basta reescrever o modelo, alterar o comportamento e tudo funciona como esperado - esperançosamente ou ...

Engate em sales_order_save_before

Em seguida, verifique o tipo de pagamento, que deve ser \Mage_Paypal_Model_Standard::$_codecom:

protected $_code  = Mage_Paypal_Model_Config::METHOD_WPS;

\Mage_Paypal_Model_Config
-> const METHOD_WPS         = 'paypal_standard';

E então, quando o status for alterado para o que você não deseja, altere para o que você deseja.

Fabian Blechschmidt
fonte
Obrigado Fabian, acho que não conseguiremos uma solução melhor no Magento 1.x. :-)
Matthias Zeis
0

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!

Mark van der Sanden
fonte