Ustaw niestandardowy status zamówienia dla pełnej płatności za pośrednictwem witryny PayPal Płatności standardowe?

9

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ści Mage_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ć.

Matthias Zeis
źródło

Odpowiedzi:

2

Dużym problemem jest to, że nie ma ani jednego zdarzenia w całym przepływie pracy paypal.

Istnieją więc dwie opcje:

Przepisz dowolny z tych modeli Paypal

Jak powiedziałeś, po prostu przepisz model, zmień zachowanie i wszystko działa zgodnie z oczekiwaniami - mam nadzieję, że ...

Zaczep się sales_order_save_before

Następnie sprawdź typ płatności, który powinien być \Mage_Paypal_Model_Standard::$_codez:

protected $_code  = Mage_Paypal_Model_Config::METHOD_WPS;

\Mage_Paypal_Model_Config
-> const METHOD_WPS         = 'paypal_standard';

A następnie, gdy status zostanie zmieniony na ten, którego nie chcesz, zmień go na ten, który chcesz.

Fabian Blechschmidt
źródło
Dzięki Fabian, chyba nie uzyskamy lepszego rozwiązania w Magento 1.x. :-)
Matthias Zeis
0

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!

Mark van der Sanden
źródło