Benutzerdefinierten Bestellstatus für vollständige PayPal-Website festlegen Zahlungen Standardzahlung?


9

Wir verwenden Magento EE 1.13.0.2 mit der Zahlungsmethode PayPal Website Payments Standard . Leider ist es nicht möglich, einen Bestellstatus für bezahlte PayPal-Bestellungen im Backend festzulegen.

Wir müssen einen benutzerdefinierten Bestellstatus festlegen, wenn die Bestellung erfolgreich (und nicht teilweise) bezahlt wurde. Tutorials zum Ändern des PayPal-Bestellstatus scheinen veraltet, falsch oder hässlich zu sein.

Nach dem, was ich gesammelt habe:

  • Die Zahlungsaktualisierungen werden von PayPal IPN abgewickelt.
  • Es gibt eine Methode, Mage_Paypal_Model_Ipn::_registerPaymentCapture()die für "Abgeschlossene Zahlung (entweder vollständig oder teilweise) verarbeiten" verantwortlich ist.
  • In Mage_Paypal_Model_Ipn::_registerTransaction()der Anfrage von PayPal wird analysiert und der Zahlungsstatus mit verglichen Mage_Paypal_Model_Info::PAYMENTSTATUS_COMPLETED.

Um ehrlich zu sein, bin ich mir nicht sicher, was ich mit diesen Informationen anfangen soll. Ich kann umschreiben Mage_Paypal_Model_Ipn::_registerTransaction()und einfach meinen Code hinzufügen:

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

Natürlich wäre ein Ereignisbeobachter (z. B. für eines der Bestell- oder Bestellstatusereignisse) viel netter, aber ich bin mir nicht sicher, ob es eine 100% zuverlässige Möglichkeit gibt, dieses einmalige Ereignis zu erfassen, wenn die Bestellung vollständig über PayPal bezahlt wird .

Irgendwelche Ideen?

Aktualisieren

Wir haben uns entschieden, unseren Bestellstatusfluss zu ändern und müssen den Status nicht mehr ändern. Ich werde die Frage für einige Zeit offen lassen, falls jemand sie beantworten möchte.

Antworten:


2

Das große Problem ist, dass es nicht einmal ein einziges Ereignis im gesamten Paypal-Workflow gibt.

Es gibt also zwei Möglichkeiten:

Schreiben Sie eines dieser Paypal-Modelle neu

Wie Sie sagten, schreiben Sie einfach das Modell neu, ändern Sie das Verhalten und alles funktioniert wie erwartet - hoffentlich oder ...

Einhaken sales_order_save_before

Dann überprüfen Sie die Zahlungsart, die mit sein sollte \Mage_Paypal_Model_Standard::$_code:

protected $_code  = Mage_Paypal_Model_Config::METHOD_WPS;

\Mage_Paypal_Model_Config
-> const METHOD_WPS         = 'paypal_standard';

Wenn der Status in den gewünschten Status geändert wird, ändern Sie ihn in den gewünschten Status.


Danke Fabian, ich denke, wir werden in Magento 1.x keine bessere Lösung bekommen. :-)
Matthias Zeis

0

Am Ende hatte ich eine andere Lösung. Nachdem ich einige Stunden mit diesem Problem zu kämpfen hatte, stellte ich fest, dass es in meinem speziellen Fall keine Rolle spielte, ob nur PayPal-Bestellungen einen bestimmten Status erhielten (es handelt sich um eine ERP-Verbindung, die nach Bestellungen in einem bestimmten Status sucht).

PayPal legt den Status der Bestellung nicht fest. Es erfasst nur die Zahlung. Magento setzt den Auftragsstatus auf Verarbeitung (siehe Mage_Sales_Model_Order_Payment::registerCaptureNotification()) und setzt den Status auf den Standardstatus innerhalb dieses Status.

Alles, was ich tun musste, war, den Standardstatus innerhalb des Status Verarbeitung in den Status zu ändern , den ich über die Administrationsoberfläche benötigte ( System » Bestellstatus ).

Hoffe das hilft jemandem!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.