Magento Grand Total ohne Steuern in 1.9 mit PHP7

17

Wir arbeiten in einer 1.9 & php7; Dieses Problem wurde aufgrund eines mutmaßlichen Betrugs mit Paypal festgestellt (aufgrund des Differenzbetrags).

Alles korrekt im Frontend (Steuern anwenden); Aber beim Bezahlen und Berechnen verwendet Magento die Gesamtsumme ohne Steuern.

Tatsächliche falsche Auftragsberechnung:

Produktpreis ohne Steuern + Versand mit Steuern = Gesamtbetrag zur Zahlung

Wechseln Sie zu PHP5 und die Berechnung ist korrekt.

Irgendeine Idee?

Vielen Dank!

Joan M
quelle
Ich habe das gleiche Problem. Bisher habe ich nur Folgendes gefunden: stackoverflow.com/questions/34281113/… Eine Lösung für dieses Problem wäre großartig.
Reinsch
Dies ist unabhängig von PHP 7 und wurde bereits früher berichtet, zum Beispiel 2012: Sortieralgorithmus: Magento-Kaufsummen falsch sortiert, was zu einer falschen Berechnung der Versandsteuer führt. Das angegebene interne Magento-Ticket lautet [MCACE-129].
Hakre

Antworten:

13

Lösung

Ich habe ein Magento-Modul erstellt, um Magento-Probleme mit der Summenberechnung für PHP7 zu lösen. Ich habe insbesondere festgestellt, dass der Gesamtsumme für die Bezahlung mit dem amazon- Modul auf der Checkout-Seite von amazonpayments zweimal Steuern hinzugefügt wurden .

Credits

Die Antwort von archigrafix in diesem Beitrag ( /magento//a/97107/35665 ) löste meine Probleme - das ist also einfach der Fix, der in ein Modul gepackt ist.

Modul:

https://github.com/hartmut-ltd/magento-php7-totals-fix

Hartmut
quelle
Es klappt !!! Lösung empfehlen
jruzafa
9

Ich weiß wirklich nicht, ob dies in irgendeiner Weise helfen wird, aber es gibt etwas zu untersuchen.

Es ist möglich, dass Ihre collecttotalsModellbestellung anders ist und die Steuer nach grand_total bestellt / angewendet wird

Sie können wie folgt testen, ob dies das Problem ist. (Beachten Sie, dass dies das Anpassen einer Core-Datei beinhaltet, um einige Debug-Informationen zu erhalten. Bitte versuchen Sie dies nicht auf einer Live-Site!)

Bearbeiten Sie die Methode in:

Mage_Sales_Model_Quote_Address::collecttotals

und fügen Sie der Methode eine Zeile hinzu, damit Sie die Modelle während der Verarbeitung ausgeben können.

public function collectTotals()
    {
        Mage::dispatchEvent($this->_eventPrefix . '_collect_totals_before', array($this->_eventObject => $this));
        foreach ($this->getTotalCollector()->getCollectors() as $model) {
            mage::log($model->getCode()); // <===== ADD THIS LINE
            $model->collect($this);
        }
        Mage::dispatchEvent($this->_eventPrefix . '_collect_totals_after', array($this->_eventObject => $this));
        return $this;
    }

Stellen Sie sicher, dass die Protokollierung aktiviert ist.

Schließen Sie die Protokolldatei über die Konsole: tail -f system.log

Reproduzieren Sie das Problem über das Frontend.

Sie erhalten Einträge wie folgt in Ihrem Protokoll (dies stammt aus einer Vanille 1.9.2.2 - möglicherweise haben Sie andere Einträge)

2015-12-21T05:54:12+00:00 DEBUG (7): nominal
2015-12-21T05:54:12+00:00 DEBUG (7): subtotal
2015-12-21T05:54:12+00:00 DEBUG (7): msrp
2015-12-21T05:54:12+00:00 DEBUG (7): freeshipping
2015-12-21T05:54:12+00:00 DEBUG (7): tax_subtotal
2015-12-21T05:54:12+00:00 DEBUG (7): weee
2015-12-21T05:54:12+00:00 DEBUG (7): shipping
2015-12-21T05:54:12+00:00 DEBUG (7): tax_shipping
2015-12-21T05:54:12+00:00 DEBUG (7): discount
2015-12-21T05:54:12+00:00 DEBUG (7): tax
2015-12-21T05:54:12+00:00 DEBUG (7): grand_total

Sie werden sehen, dass es sich wiederholt. Sehen Sie also einfach, wo es beginnt und endet. Das Muster sollte leicht zu erkennen sein

Beachten Sie die letzten beiden Einträge oben: Steuer kommt vor grand_total. Es kann möglich sein , diese Reihenfolge ist aus dem Gleichgewicht geraten, und Steuer nach grand_total wird erscheinen, so grand_total nicht Steuern hat angewandt.

BEARBEITEN:

Ok, also ich habe nicht gesehen, dass die angesprochene Frage tatsächlich auf die Sortierung der Collectotals hinweist, um das Problem zu sein. Ich vermutete, dass dies das Problem sein könnte, habe dies jedoch nicht selbst in PHP7 getestet

Es gibt eine Lösung, aber es ist nicht sehr schön. Jede neue Erweiterung, die im Geschäft platziert wird und Modelle in den Collector einfügt, muss notiert und zusätzlich zur Sortierung hinzugefügt werden, da sonst möglicherweise noch mehr Probleme auftreten. Kann ein Wartungsproblem für die Zukunft sein.

Erzwingen Sie einfach die Sortierreihenfolge, indem Sie ein bestimmtes <sort_order>Element in die Summenkonfiguration einfügen. Sie können dies über Ihre eigene Erweiterung tun, die nur eine config.xml hat, in der Sie die Reihenfolge für jeden Kollektor angeben.

In der config.xml haben Direktive als solche:

<sales>
   <quote>
      <totals>
         <nominal>
           <sort_order>100</sort_order>
        </nominal>
        <subtotal>
           <sort_order>200</sort_order>
        </subtotal>
        <msrp>
           <sort_order>300</sort_order>
        </msrp>
        <freeshipping>
           <sort_order>400</sort_order>
        </freeshipping>

        ......
        insert each collector model with a sort directive
        ......

     </totals>
   </quote>

Verwenden Sie große Lücken zwischen den einzelnen Sortieranweisungen, damit zukünftig zusätzlicher Platz eingefügt werden kann.

Wie bereits erwähnt, nicht sehr elegant, kann aber Ihr unmittelbares Problem lösen.

Beachten Sie auch, dass das System andere Collector-Direktiven enthält, sodass diese möglicherweise auch falsch sind oder angepasst werden müssen

Überprüfen Sie die Hauptvertriebserweiterung config.xml und suchen Sie nach <totals>

Dort finden Sie:

<order_invoice>
<order_creditmemo>
<pdf>

Es kann andere in anderen Erweiterungen geben, sei es Core / 3rd Party

Ich hoffe, das hilft.

PS: Ich habe nichts davon in PHP7 getestet. Ich weiß, dass das Platzieren der sort_order-Direktive unter php5.x funktioniert

ProxiBlue
quelle
Die Sortierung hat sich in PHP7 geändert. Sie müssen eindeutige Sortierreihenfolgen explizit definieren, da mehrere identische Sortierreihenfolgen (dh Stufe 5 für drei verschiedene Elemente) zu seltsamen Ergebnissen führen können. stackoverflow.com/questions/34281113/…
Fiasco Labs
Ich habe der Antwort eine Bearbeitung hinzugefügt.
ProxiBlue
Vielen Dank ProxiBlue; wir werden prüfen. Wir stellen ein Problem mit dem Neuindex fest. In einigen Fällen wird dieses Problem reproduziert. Gehen Sie zur TAX-Konfiguration, speichern Sie einige "keine Änderung" und TAX kehrt zurück.
Joan M
8

Auf Magento 1.6.2 und PHP 7.0.2 habe ich das folgendermaßen gelöst:

1 - Zuerst eine lokale config.xml erstellt: /app/code/core/Mage/Sales/etc/config.xml in /app/code/local/Mage/Sales/etc/config.xml kopiert

2 - Änderte es so Bildbeschreibung hier eingeben

Jetzt rechnet es richtig:

Bildbeschreibung hier eingeben

Archigrafix
quelle
1
Sie können keine XML-Dateien im lokalen Code-Pool überschreiben (nur automatisch geladene PHP-Klassen), daher muss dies Teil der config.xml eines tatsächlichen benutzerdefinierten Moduls sein.
Fabian Schmengler
1
Wie erklärt wurde dies mit einer lokalen config.xml gemacht.
Archigrafix