Ich versuche, ein benutzerdefiniertes Modul für Magento zu schreiben, das bei Bestellung bestimmter Artikel und Zahlung auf der Website unseres Bekleidungslieferanten Details zum bestellten Artikel, zur Lieferadresse und zu anderen Daten im XML- oder JSON-Format enthält.
Während ich einige Jahre Webentwickler war, habe ich noch nicht viel mit dem Magento-System gearbeitet und mich gefragt, ob mich jemand in die richtige Richtung weisen könnte.
Ich glaube, ich habe einen Hook gefunden (sales_order_invoice_save_after), der den Trick machen könnte, aber nicht sicher ist, ob er der richtige ist oder wie man mit dem Zusammenstellen des Codes beginnt!
Danke im Voraus
Antworten:
Wir haben derzeit einen Beobachter, der unsere Bestelldaten an unsere Oracle-Datenbank sendet. Es beobachtet
checkout_onepage_controller_success_action
und der Code formatiert die Bestellung in JSON und überträgt sie über einen Webdienst an unsere Oracle-Datenbank. Wir verwenden 1.0.4.1, daher bin ich mir nicht sicher, ob es mit Ihrer Version funktionieren würde. Wie auch immer, hier ist ein Skelett davon, ich habe das Fleisch herausgenommen ;-)Dies wird ausgelöst, wenn die Seite mit dem Auftragserfolg angezeigt wird.
Sie können dann Ihren JSON formatieren und cURL verwenden, um Ihre Bestelldaten genau wie wir zu senden.
Und hier ist die Konfigurationsdatei:
quelle
$observer
?Die Veranstaltung hängt von dem Moment ab, an dem Sie die Bestellung an den Lieferanten senden möchten.
Wenn die Bestellung aufgegeben wird, ist sales_place_order_after das beste.
Wenn die Bestellung bezahlt ist, können Sie sales_order_payment_pay verwenden.
Die sales_order_payment_pay wird nach Zahlungseingang versandt und aktualisiert die Zahlungssummen. So können Sie den Zahlungsbetrag mit dem Gesamtbestellbetrag vergleichen. Ein wichtiger Punkt ist, dass der insgesamt bezahlte Bestellbetrag derzeit nicht aktualisiert wird, da die Bestellsummen nach diesem Ereignis aktualisiert werden. Sie können dies im folgenden Code von Mage_Sales_Model_Order_Invoice :: pay überprüfen
Für eine optimale Leistung sollten Sie auch eine interne Warteschlange / Cron verwenden, um diese Daten asynchron an den Lieferanten zu senden. Wenn der externe Service nicht verfügbar ist, hat dies keine Auswirkungen auf Ihr Geschäft.
quelle
Das richtige Ereignis für diese Aufgabe ist
sales_place_order_after
. Sie können mit$observer->getEvent()->getOrder()
IIRC auf die Bestellung zugreifen (ich bin auf mobilem Geldautomaten). Wenn Sie weitere Fragen haben, fragen Sie einfach :)An den anderen aus der anderen Antwort (ich kann Ihren Namen momentan leider nicht sehen): Es gibt ein Tool auf Github, das Mageaudit heißt. Auf diese Weise können Sie die wichtigsten Änderungen identifizieren und diese beheben und Ihr System aktualisieren.
quelle
Ich denke, es ist völlig falsch , dafür einen Beobachter zu verwenden, der ein Ereignis im Frontend beobachtet . Welches Ereignis Sie auch hören, es findet statt, während der Kunde auf seine Erfolgsseite oder etwas anderes wartet.
Dies bedeutet, dass Ihre Kunden, wenn Ihr Webdienst defekt ist oder nur schlechte Leistungen erbringt, möglicherweise mehr als 30 Sekunden warten und nach Ihrer Auszeit endlich den gewünschten Hut bekommen.
Die Alternative besteht darin, entweder das Zahlungsereignis abzuhören, das durch IPN oder ähnliches ausgelöst wird, oder:
Queue / Cron implementieren
Fügen Sie der Bestellung einfach ein neues Attribut hinzu, führen Sie alle paar Minuten einen Cron aus und übertragen Sie alles, was noch nicht als übertragen markiert ist.
quelle