Używamy Magento EE 1.13.0.2 ze standardową metodą płatności w witrynie PayPal . Niestety nie jest możliwe ustawienie statusu zamówienia dla płatnych zamówień PayPal w back-endie.
Musimy ustawić niestandardowy status zamówienia, gdy zamówienie zostało opłacone pomyślnie (a nie częściowo). Samouczki dotyczące modyfikowania statusu zamówienia PayPal wydają się być nieaktualne, złe lub brzydkie hacki.
Z tego, co zebrałem:
- aktualizacje płatności będą obsługiwane przez PayPal IPN.
- Istnieje metoda
Mage_Paypal_Model_Ipn::_registerPaymentCapture()
odpowiedzialna za „Przetwarzanie płatności zakończonej (pełnej lub częściowej)”. - W
Mage_Paypal_Model_Ipn::_registerTransaction()
żądaniu z PayPal jest analizowany i porównywany jest status płatnościMage_Paypal_Model_Info::PAYMENTSTATUS_COMPLETED
.
Szczerze mówiąc, nie jestem pewien, co zrobić z tymi informacjami. Mogę przepisać Mage_Paypal_Model_Ipn::_registerTransaction()
i po prostu dodać mój kod:
// paid
case Mage_Paypal_Model_Info::PAYMENTSTATUS_COMPLETED:
$this->_registerPaymentCapture(true);
// my code here
break;
Oczywiście obserwator zdarzeń (np. W przypadku jednego ze zdarzeń zamówienia lub stanu zamówienia) byłby znacznie ładniejszy, ale nie jestem pewien, czy istnieje 100% niezawodny sposób na uchwycenie tego jednorazowego zdarzenia, gdy zamówienie zostanie całkowicie opłacone przez PayPal .
Jakieś pomysły?
Aktualizacja
Zdecydowaliśmy się zmodyfikować przepływ statusu naszego zamówienia i nie musimy już modyfikować statusu. Pozostawię pytanie otwarte na jakiś czas, na wypadek, gdyby ktoś chciał na nie odpowiedzieć.
źródło
Skończyło się na innym rozwiązaniu. Po kilku godzinach zmagania się z tym problemem, zdałem sobie sprawę, że w moim konkretnym przypadku nie miało znaczenia, czy tylko zamówienia PayPal mają określony status (dotyczy połączenia ERP, które wyszukuje zamówienia o określonym statusie).
PayPal nie ustawia statusu zamówienia. Po prostu rejestruje płatność. Magento ustawia stan zamówienia na Przetwarzanie (patrz
Mage_Sales_Model_Order_Payment::registerCaptureNotification()
) i ustawia status na domyślny status w tym stanie.Wszystko, co musiałem zrobić, to zmienić domyślny status w stanie Przetwarzanie na wymagany przez interfejs administratora ( System » Status zamówienia ).
Mam nadzieję, że to komuś pomoże!
źródło