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ć.