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 pagoMage_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.
fuente
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!
fuente