So funktioniert der Checkout-Prozess bei PrestaShop intern: Warenkorbregeln, Gutscheine und Steuerberechnungslogik

Jemand gibt 10 Dollar ein, aber 9.87 Dollar werden abgezogen. Niemand hat etwas falsch gemacht. Der Einkaufswagen funktioniert genau so, wie er soll. Der Grund dafür liegt nur ein paar Ebenen unter dem Bildschirm.

Wie funktioniert der Checkout-Prozess in PrestaShop? Die meisten Fragen laufen auf dieselbe Frage hinaus: Welche Prozesse werden ausgeführt und welche Priorität haben sie? Sobald man das weiß, erweisen sich zunächst fehlerhafte Summen als vorhersehbar. Im Folgenden wird der Ablauf des PrestaShop-Checkouts vom Warenkorb bis zur Bestellung anhand des ausgelieferten Codes und nicht anhand der Angaben in den Einstellungen nachgezeichnet.

1.0 Was geschieht intern während des PrestaShop-Bezahlvorgangs?

Fragt man einen Kunden nach dem Gesamtbetrag im Warenkorb, übergibt PrestaShop die Berechnung an eine Taschenrechnerklasse. Keine einzige Formel. Drei separate Durchläufe, immer in derselben Reihenfolge, wobei jeder auf dem vorherigen aufbaut.

Was geschieht intern während des PrestaShop-Bezahlvorgangs?

Erst die Reihen, dann die Gebühren, dann die Rabatte. Eine Umordnung ist nicht möglich.

Zuerst kommen die Artikelreihen. Jede Reihe hat einen eigenen Preis, eine eigene Menge und einen eigenen Steuersatz – diese Details erklären den Großteil des Folgenden. Danach folgen die Gebühren: Versand und Geschenkverpackung. Diese werden separat berechnet und bewusst von den Warenpreisen getrennt ausgewiesen, damit ein Gutschein eine der beiden Kostenarten entfernen kann, ohne die andere zu beeinflussen. Rabatte werden zuletzt aufgeführt.

Diese dritte Position ist entscheidend. Sie löst die meisten Probleme bei der Warenkorbberechnung in PrestaShop , da ein Gutschein die Originalpreise niemals verändert. Er gilt für den jeweiligen Zeileninhalt, einschließlich zuvor angewendeter Gutscheincodes.

2.0 Wie berechnet PrestaShop den Warenkorbwert?

Der Gesamtbetrag ist keine feste Zahl, die im Geschäft gespeichert wird. Er wird individuell berechnet, und der Anrufer gibt an, welche Teile er benötigt: nur die Produkte, nur die Rabatte, alles oder alles außer Versandkosten.

Das ist wichtig zu wissen, denn die Angaben stimmen nicht immer so überein, wie man es erwartet. Nehmen wir die Grenze für kostenlosen Versand. Dort wird der Gesamtbetrag ohne Versandkosten, aber mit bereits abgezogenen Rabatten, angegeben. Wenn Sie anders fragen, erhalten Sie eine andere Antwort. Beide sind korrekt.

Die angezeigten Werte können also von den Angaben im Bericht abweichen. Beides ist korrekt. Möglicherweise werden einfach unterschiedliche Teile desselben Wagens benötigt. Prüfen Sie daher, welches Teil gemeint ist, bevor Sie von einem Defekt ausgehen.

3.0 Wie funktionieren Warenkorbregeln in PrestaShop?

Die Warenkorbregeln von PrestaShop umfassen sowohl den vom Kunden eingegebenen Gutschein als auch die automatischen Rabatte, die ohne Code erfolgen. Im Backend sind beide ein und dasselbe Objekt. Daher teilen sie sich eine Ansicht im Backend und einen Pfad im Code.

Die Regeln werden nacheinander angewendet, sortiert nach Priorität, beginnend mit der niedrigsten. Die Priorität ist eine einfache Zahl, die Sie der Regel zuweisen. Sie dient nicht nur der Sortierung: Wenn zwei Regeln nicht kombiniert werden können, entscheidet die Priorität, welche Regel Anwendung findet.

Jede Regel betrachtet den Warenkorb so, wie er von der vorherigen Regel hinterlassen wurde. Daher werden bei einem Warenkorbwert von 100 zwei 10%-Gutscheine nicht 20 abgezogen. Der erste Gutschein zieht 10 ab. Der zweite Gutschein zieht 10 % der verbleibenden 90 ab, sodass der Kunde 19 spart. Dies ist das übliche Verhalten und kein Rundungsfehler.

Die Bedingungen selbst sind den meisten Händlern bereits bekannt: Datumsbereiche, Mindestbestellwert, Limits pro Kunde und Ausschlüsse nach Land, Gruppe, Versandunternehmen oder Produkt. Die Dokumentation der Warenkorbregeln von PrestaShop beschreibt jedes Feld detailliert, daher erübrigt sich eine erneute Auflistung.

4.0 Wie werden Gutscheine in PrestaShop eingelöst?

Hier wird das Gutscheinsystem von PrestaShop interessant. Daher kommt auch die Zahl 9.87. Prozentuale und feste Rabatte werden nämlich ganz unterschiedlich gehandhabt, und der Unterschied ist nicht rein kosmetischer Natur.

Wie werden Gutscheine in PrestaShop eingelöst?

Prozentuale Rabatte sind einfach. Jede Zeile verliert diesen Prozentsatz von sich selbst, also reduziert ein 10%-Gutschein den Buchpreis um 10 % und den Preis der Kopfhörer ebenfalls um 10 %. Jede Zeile behält ihren eigenen Rabattsatz, ohne dass sich jemand darum kümmern muss.

Ein fester Betrag funktioniert so nicht, da der Warenkorb zunächst entscheiden muss, von welchen Positionen der Rabatt abgezogen werden soll. PrestaShop verteilt ihn proportional: Jede Zeile erhält einen Anteil des Rabatts, der ihrem Anteil am Warenkorb entspricht.

Wie werden Gutscheine in PrestaShop eingelöst?

Die 10 wird entsprechend dem Beitrag jeder einzelnen Zeile aufgeteilt, nicht gleichmäßig zwischen den Zeilen.

Das ist der Kern der Rabattberechnung bei PrestaShop für Gutscheine. Das hat eine wichtige Konsequenz: Jede Zeile behält ihren eigenen Steuersatz, daher hängt die abgezogene Steuer davon ab, auf welche Produkte der Rabatt angewendet wird. Verschiebt man denselben Betrag von 10 Artikeln in einen Warenkorb mit unterschiedlicher Gewichtung, ändert sich die Gesamtsteuer, obwohl der Kunde exakt denselben Betrag gespart hat.

Eine zweite Einstellung ist hier ebenfalls wichtig. Ist der Gutscheinbetrag inklusive oder exklusive Steuern angegeben? Diese Einstellung bestimmt, auf welcher Grundlage die Anteile berechnet werden. In der einen Variante werden die 10 von den Preisen inklusive Steuern abgezogen, in der anderen von den Preisen vor Steuern, und die Ersparnis für den Kunden fällt etwas anders aus.

Wie werden Gutscheine in PrestaShop eingelöst?

5.0 Wie berechnet PrestaShop die Steuern an der Kasse?

Die Steuerberechnung in PrestaShop erfolgt zeilenweise, nicht für den gesamten Warenkorb. Jedes Produkt ist einer Steuerregelgruppe zugeordnet; diese Gruppe legt den Steuersatz für die Lieferadresse fest, und die Zeile wird mit diesem Steuersatz besteuert.

Wie werden Gutscheine in PrestaShop eingelöst?

Ein Warenkorbwert setzt sich daher aus mehreren kleinen Steuerbeträgen zusammen. Die Steuer für diese Bestellung lässt sich nicht in einem Schritt berechnen. Deshalb kann die Steueraufschlüsselung auf einer Rechnung selbst bei kleinen Bestellungen mehrere Zeilen umfassen, und diese Zeilen sind selten gleichmäßig teilbar.

Die Versandkosten werden erneut separat besteuert. Dabei wird die Steuerregelung des Transportunternehmens und nicht die der Produkte angewendet. Dies führt dazu, dass Kunden in Warenkörben, in denen die Waren selbst steuerfrei sind, die Lieferung jedoch nicht, benachteiligt werden.

6.0 Warum berechnet PrestaShop einen anderen Warenkorbwert?

Zwei Summen weichen um einen Cent voneinander ab? Die übliche Ursache ist Rundung, und PrestaShop bietet Ihnen drei Möglichkeiten, dies zu tun.

Warum berechnet PrestaShop einen anderen Warenkorbwert?

Die gleichen drei Artikel ergeben je nach Einstellung zwei unterschiedliche Gesamtergebnisse.

Die Preise werden intern auf sechs Dezimalstellen genau gespeichert. Die einzige Frage ist also, wo die Rundung erfolgt. Wird jeder Artikel gerundet, wird der Einzelpreis vor der Multiplikation gerundet. Wird jede Zeile gerundet, bleibt die volle Genauigkeit bis zur Summenbildung erhalten. Wird die Summe gerundet, erfolgt keine weitere Rundung bis zum Schluss.

Keiner der drei Ansätze ist falsch. Sie stimmen nur nicht überein. Das Runden pro Zeile ist die übliche Empfehlung für Shops, deren Rechnungen exakt summiert werden müssen, da dies die interne Konsistenz jeder Zeile gewährleistet und gleichzeitig eine saubere Summe ermöglicht. Die Preisberechnungshinweise von PrestaShop erläutern die Gründe dafür ausführlicher.

Bevor man Rundungsfehler als Ursache vermutet, sollten einfachere Erklärungen ausgeschlossen werden. Eine Summe, die sich bei einer Adressänderung ändert, ist auf Steuern zurückzuführen, nicht auf Rundung. Eine Summe, die sich bei Hinzufügung eines Gutscheins ändert, ist auf die normale Bestellberechnung von PrestaShop zurückzuführen. Rundungsdifferenzen sind minimal. Alles, was darüber hinausgeht, hat eine andere Ursache.

7.0 Wie berechnet PrestaShop Rabatte und Steuern zusammen?

Die beiden Hälften werden zusammengeführt: Rabatte werden nach der Berechnung der Steuer pro Zeile angewendet, und ein Rabatt reduziert sowohl die Zeile als auch ihre Steuer proportional.

Diese Reihenfolge sorgt für die Vorhersagbarkeit der Checkout-Logik in PrestaShop . Die Steuer wird nach einem Rabatt nie neu berechnet. Jede Zeile kennt bereits ihren Steuersatz; wird also ein Teil der Zeile entfernt, wird auch der zugehörige Steueranteil entfernt.

Das beantwortet auch eine häufig gestellte Frage: Warum entspricht die Gesamtsteuer bei einer Bestellung mit Gutscheinen nicht einfach dem Steuersatz, der auf den rabattierten Gesamtbetrag angewendet wird? Weil es sich um die Summe der Beträge handelt, die in den einzelnen Zeilen enthalten waren, und diese Zeilen hatten ursprünglich unterschiedliche Steuersätze.

8.0 Ein Modul erstellen, das einen Rabatt gewährt

Früher oder später fragt jemand nach einem Rabatt, den PrestaShop nicht automatisch gewähren kann. Zum Beispiel ein Gratisprodukt ab einem bestimmten Einkaufswert, ein Treueprogramm oder etwas, das an einen Wert gebunden ist, den der Shop nicht erfasst. Die Versuchung ist groß, den Gesamtbetrag selbst zu berechnen und ihn dann an einer passenden Stelle abzuziehen.

Widerstehen Sie dieser Regel. Ein Rabatt, der außerhalb der Warenkorbregeln angewendet wird, ist für alle Systeme, die den Warenkorb auslesen, unsichtbar. Die Bestellübersicht erkennt ihn nicht, die Rechnung zeigt ihn nicht an, und die Steueraufschlüsselung ist fehlerhaft, da die Steuer zeilenweise berechnet wird und Ihre Subtraktion die Zeilen nicht erfasst hat.

Erstellen Sie stattdessen eine echte Warenkorbregel. Ihr Modul legt fest, wann und wie hoch der Rabatt ist und übergibt ihn anschließend als entsprechende Regel an PrestaShop. Alle nachfolgenden Prozesse funktionieren dann automatisch: die Zusammenfassung, die Rechnung, die Steuer pro Zeile und die Priorisierung der Sortierung gegenüber anderen Gutscheinen.

Das Modul muss noch eine Frage beantworten, die der Kern nicht beantworten kann: Soll diese Regel weiterhin gelten? Eine von Ihrem Modul erstellte Regel sollte ihre Gültigkeit verlieren, sobald das Modul deaktiviert wird. PrestaShop weiß das nicht, denn für das System ist die Regel lediglich ein weiterer Eintrag in der Tabelle.

9.0 Überschreiben von checkValidity auf sichere Weise

Der entsprechende Hook hierfür ist `CartRule::checkValidity()` . PrestaShop ruft diese Funktion auf, wenn ein Gutschein hinzugefügt wird, und erneut bei `autoRemoveFromCart()` für Warenkörbe, die bereits Regeln enthalten. Dieser zweite Aufruf ist der entscheidende: Er gibt einen Fehler zurück, und die Regel wird automatisch aus dem Warenkorb entfernt.

Die Überschreibung ist also kurz. Prüfen Sie, ob die Regel zu Ihrem Modul gehört, prüfen Sie, ob Ihr Modul aktiviert ist, und falls nicht, geben Sie dies an. Alle anderen Regeln werden direkt an das übergeordnete Modul weitergeleitet.

Drei Dinge sind bei der Art und Weise, wie Sie es schreiben, wichtig.

Wenden Sie sich in allen anderen Fällen an die übergeordnete Komponente. Eine Überschreibung, die selbstständig antwortet, anstatt die Anfrage zu vertagen, ignoriert stillschweigend alle Prüfungen von PrestaShop: Datumsangaben, Mengenbegrenzungen, Mindestbestellwerte sowie Länder- und Versandbeschränkungen. Diese Informationen werden leicht vergessen und können teuer werden.

Handeln Sie ausschließlich nach Ihren eigenen Regeln. Kennzeichnen Sie diese durch ein dauerhaftes Merkmal, beispielsweise ein Code-Präfix Ihres Moduls oder einen Eintrag in Ihrer eigenen Tabelle. Eine Regelüberschreibung, die für alle Regeln im Shop gilt, stellt ein unternehmensweites Risiko dar, das zugunsten eines einzelnen Moduls eingegangen wird.

Beachten Sie das „alreadyInCart“-Flag. PrestaShop überspringt absichtlich die Prüfung auf Gültigkeit und Datum bereits angewendeter Regeln, damit ein Gutschein, der zum Zeitpunkt seiner Einlösung gültig war, nicht mitten im Bezahlvorgang verloren geht. Ihre Prüfung funktioniert anders: Ein deaktiviertes Modul sollte die Regel auch aus einem Warenkorb entfernen, in dem sie bereits vorhanden ist. Genau dafür ist die automatische Entfernungsfunktion gedacht.

Achten Sie auch auf die Rückgabeform. Die Methode gibt „false“ zurück, wenn eine Regel erfüllt ist, und eine Fehlermeldung, wenn dies nicht der Fall ist. Wird der falsche Wert zurückgegeben, interpretieren Aufrufer Ihre Ablehnung als Zustimmung.

10.0 Aufräumarbeiten und der Vorbehalt zur Überschreibung

Durch Deaktivieren des Moduls sollte auch die Erstellung neuer Regeln gestoppt werden. Die Überschreibung regelt laufende Vorgänge; das Modul selbst sollte keine neuen Regeln mehr generieren, solange es deaktiviert ist, und bei der Deinstallation die erstellten Regeln deaktivieren oder löschen, anstatt sie dem nächsten Benutzer zur weiteren Bearbeitung zu überlassen.

Ein wichtiger Hinweis vorab: Es kann immer nur eine Klassenüberschreibung aktiv sein. Wenn also zwei Module die Klasse `CartRule` überschreiben , entsteht ein Konflikt, und das zweite Modul verliert in der Regel. Falls sich Ihr Rabatt durch bereits vom Kernsystem unterstützte Bedingungen ausdrücken lässt, verwenden Sie diese und verzichten Sie auf die Überschreibung. Greifen Sie nur dann darauf zurück, wenn die Regel von etwas abhängt, das PrestaShop tatsächlich nicht erkennen kann.

11.0 Was hat sich zwischen PrestaShop 1.7 und 9 geändert?

Es ist gut zu wissen, wenn man einer älteren Anleitung folgt oder Forenbeiträge liest, die vor Jahren verfasst wurden. Einiges davon ist noch immer gültig, anderes nicht.

Der oben beschriebene Rechner wurde in Version 1.7 eingeführt, und die dreistufige Berechnungsreihenfolge hat sich seitdem nicht geändert. Ein direkter Vergleich des Codes in Version 8.2 und 9 zeigt, dass die Abfolge identisch ist. Die Regeln werden weiterhin in der Reihenfolge ihrer Priorität angewendet. Die Abschläge werden weiterhin proportional verteilt. Die drei Rundungsmodi verhalten sich nach wie vor wie gewohnt.

Verändert hat sich die Benutzeroberfläche. PrestaShop 9 migriert weiterhin die Backend-Seiten zu Symfony, daher wurden die Benutzeroberflächen neu gestaltet und einige Felder befinden sich nun an anderen Stellen. Die Menüpfade für Rabatte sind unverändert. Ein Screenshot aus einem Tutorial der Version 1.7 entspricht jedoch nicht dem, was Sie auf Ihrem Bildschirm sehen: Hinweise zu den Berechnungen gelten weiterhin, Hinweise zum Klicken hingegen möglicherweise nicht mehr.

12.0 Herausfinden, warum eine Summe falsch aussieht

Hier ist eine kurze Reihenfolge, um alles zu überprüfen. Jeder Schritt schließt die nachfolgenden aus, wodurch man sich die Suche nach einer Rundungseinstellung erspart, wenn die Antwort ein automatischer Rabatt ist, an den sich niemand erinnert hat.

Beginnen Sie mit den Warenkorbregeln der Bestellung. Welche Regeln wurden angewendet und in welcher Reihenfolge? Die häufigste Antwort auf diese Frage ist, dass jemand vergessen hat, dass eine Regel automatisch ausgeführt wird.

Prüfen Sie anschließend, ob es sich bei dem Gutschein um einen Prozentsatz oder einen festen Betrag handelt. Handelt es sich um einen festen Betrag, prüfen Sie, ob die Steuer enthalten oder exklusive Steuern angegeben sind. Allein diese Angabe erklärt viele Meldungen, dass der Rabatt leicht abweicht.

Schauen Sie sich als Nächstes die Steuersätze der einzelnen Produkte an, anstatt den Gesamtbetrag im Warenkorb zu betrachten. Unterschiedliche Steuersätze in einem Warenkorb sind völlig normal. Sie lassen die Berechnung nur komplizierter erscheinen, als sie tatsächlich ist.

Erst dann sollten Sie über eine Rundung nachdenken. Und auch nur dann, wenn die Differenz nur ein oder zwei Cent beträgt, denn eine größere Differenz deutet auf ein anderes Problem hin. Überprüfen Sie den Rundungsmodus in Ihren Einstellungen und vergleichen Sie ihn mit dem erwarteten Rechnungsbetrag.

13.0 Die Kurzfassung

Der Checkout-Prozess bei PrestaShop ist vorhersehbarer als er aussieht. Zuerst werden Preise und Steuern für die einzelnen Zeilen berechnet. Gebühren folgen im Anschluss, Rabatte zuletzt, und jeder Rabatt wird auf den Restbetrag des vorherigen Rabatts angewendet.

Gutscheine mit festem Betrag werden gewichtet auf die Zeilen verteilt, sodass jede Zeile ihren eigenen Steuersatz behält. Prozentuale Beträge sind einfacher und werden direkt auf jede Zeile angewendet. Und wenn sich zwei Summen um einen Cent unterscheiden, liegt das in der Regel an der Rundungseinstellung und nicht an einem Fehler.

Danke fürs Lesen.

Haben Sie Fragen zur Performance Ihrer Website oder benötigen Sie Unterstützung bei deren Migration? Unsere Experten helfen Ihnen gerne. Kontaktieren Sie das Knowband-Team noch heute unter [email protected] für zuverlässige E-Commerce-Plugins, die perfekt auf Ihre Bedürfnisse zugeschnitten sind.

Schreiben Sie bitte einen Kommentar.