Establecer el estado del pedido personalizado para pagos completos del sitio web de PayPal ¿Pago estándar?

9

Estamos utilizando Magento EE 1.13.0.2 con el método de pago estándar de PayPal Website Payments . Lamentablemente, no es posible establecer un estado de pedido para los pedidos pagos de PayPal en el back-end.

Necesitamos establecer un estado de pedido personalizado cuando el pedido se ha pagado con éxito (y no parcial). Los tutoriales para modificar el estado de los pedidos de PayPal parecen ser trucos desactualizados, incorrectos o feos.

De lo que reuní:

  • las actualizaciones de pago serían manejadas por PayPal IPN.
  • Hay un método Mage_Paypal_Model_Ipn::_registerPaymentCapture()responsable de "Procesar el pago completado (total o parcial)".
  • En Mage_Paypal_Model_Ipn::_registerTransaction()la solicitud de PayPal se analiza y se compara el estado del pago Mage_Paypal_Model_Info::PAYMENTSTATUS_COMPLETED.

Para ser sincero, no estoy seguro de qué hacer con esta información. Puedo reescribir Mage_Paypal_Model_Ipn::_registerTransaction()y simplemente agregar mi código:

// paid
case Mage_Paypal_Model_Info::PAYMENTSTATUS_COMPLETED:
    $this->_registerPaymentCapture(true);
    // my code here
    break;

Por supuesto, un observador de eventos (por ejemplo, para uno de los eventos de pedido o estado de pedido) sería mucho mejor, pero no estoy seguro de si hay una manera 100% confiable de atrapar ese evento único cuando el pedido se paga por completo a través de PayPal .

¿Algunas ideas?

Actualizar

Elegimos modificar el flujo de estado de nuestro pedido y ya no necesitamos modificarlo. Dejaré la pregunta abierta por algún tiempo en caso de que alguien quiera responderla.

Matthias Zeis
fuente

Respuestas:

2

El gran problema es que ni siquiera hay un solo evento en todo el flujo de trabajo de PayPal.

Entonces hay dos opciones:

Reescribe cualquiera de estos modelos de Paypal

Como dijiste, solo reescribe el modelo, cambia el comportamiento y todo funciona como se espera, con suerte o ...

Enganchar en sales_order_save_before

Luego verifica el tipo de pago, que debe ser \Mage_Paypal_Model_Standard::$_codecon:

protected $_code  = Mage_Paypal_Model_Config::METHOD_WPS;

\Mage_Paypal_Model_Config
-> const METHOD_WPS         = 'paypal_standard';

Y luego, cuando se cambia el estado al que no desea, cámbielo al que desea.

Fabian Blechschmidt
fuente
Gracias Fabian, supongo que no obtendremos una mejor solución en Magento 1.x. :-)
Matthias Zeis
0

Terminé con otra solución. Después de luchar con este problema durante unas horas, me di cuenta de que en mi caso particular no importaba si solo los pedidos de PayPal tenían un estado particular (es para una conexión ERP, que busca pedidos en un estado particular).

PayPal no establece el estado del pedido. Simplemente captura el pago. Magento establece el estado del pedido en Procesamiento (ver Mage_Sales_Model_Order_Payment::registerCaptureNotification()) y establece el estado en el estado predeterminado dentro de ese estado.

Todo lo que tenía que hacer era cambiar el estado predeterminado dentro del estado Procesando al estado que necesitaba a través de la interfaz de administración ( Sistema »Estados de pedidos ).

¡Espero que esto ayude a alguien!

Mark van der Sanden
fuente