checkout umfasst alles, was den Bestellprozess in der Storefront steuert: von der einfachen Gast- oder Schnellbestellung über eigene Eingabefelder bis zur Rundung von Zwischensummen. Er ermöglicht zudem eine schnelle Artikelerfassung per Artikelnummer, prüft bei Bedarf Warenkorbinhalte gegen Regeln (z. B. Pflichtzubehör), verwaltet Versandarten inklusive Preislogik und bindet Paketverfolgung an.
checkout* - Grundstruktur
Nachfolgend der Grundaufbau des Knotens checkout
Parameterübersicht
| Parameter | Beschreibung |
|---|---|
checkout | Übergreifende Checkout-Einstellungen für den Bestellprozess. |
voucher | Einstellungen für die Gutscheinverwendung im Bestellprozess. |
directOrder | Konfiguration für Direktbestellungen. |
productDependency | Regeln für Produktabhängigkeiten im Checkout. |
bankInfoField | Steuerung von Bankdatenfeldern. |
shippingMethod | Einstellungen zu Versandarten. |
shippingMethodGroup | Gruppen, zu denen Versandarten zusammengefasst werden können. |
shipTrack | Optionen für die Sendungsverfolgung. |
fieldErrorVisibility | Steuert, wann Feldfehler im Checkout angezeigt werden. |
checkout.checkout - Bestellablauf
Dieser Abschnitt bündelt die Einstellungen für den Checkout. Hier wird festgelegt, wie der Bestellprozess abläuft, welche Zusatzfelder angezeigt werden und wie beispielsweise Versandoptionen standardmäßig gewählt werden. Zudem lassen sich Regeln für Gutschein-Berechnungen, länderspezifische Versandfreiheit und optional für die Paketverfolgung definieren.
Beispielkonfiguration checkout.checkout
Parameterübersicht
| Parameter | Typ | Beschreibung |
|---|---|---|
allowGuestAccounts | bool | Erlaubt Bestellungen ohne Kundenkonto (Gastbestellung). Default: true |
allowGuestOrderWithRegisteredEmail | bool | Legt fest, ob eine Gastbestellung mit einer bereits registrierten E-Mail-Adresse erlaubt ist. Default: true |
subtotalRounding | object | Rundung der Zwischensumme vor weiteren Berechnungen (z.B. vor Versand / Gutscheinen). |
active | bool | Aktiviert die Rundungslogik. Default: true |
decimalPlaces | uint | Anzahl der Nachkommastellen für die Rundung. Default: 2 |
voucherAppliesPerItem | bool | Steuert, ob Gutscheine pro Position (statt auf den Gesamtwarenkorb) angewendet werden. |
minOrderValueCalculation | enum | Legt fest, wie der Mindestbestellwert berechnet wird, ab dem ein Gutschein angewendet werden kann. Mögliche Werte: sum - die Mindestbestellwerte aller verwendeten Gutscheine werden addiert. Hat z.B. Gutschein A einen Mindestbestellwert von 20€ und Gutschein B von 30€, muss der Warenkorb mindestens 50€ erreichen. max - es gilt nur der höchste Mindestbestellwert aller verwendeter Gutscheine. Bei Gutschein A (20€) und Gutschein B (30€) reichen 30€ im Warenkorb aus. |
minOrderValueIgnoreVoucherReduction | bool | Bestimmt, welcher Warenwert für die Prüfung des Mindestbestellwertes herangezogen wird. Mögliche Werte: true - nur der reine Warenwert zählt.false - der Warenwert abzüglich bereits angewandter Gutscheine wird verwendet. |
freeShippingCountries(zukünftiges Feature, noch nicht vollständig implementiert!) | multiAssoc | Länder, in denen versandkostenfrei geliefert wird. Target: general.country |
allowFastOrder | bool | Erlaubt die Bestellung per Express-Checkout. Default: true |
defaultFreeShippingMethod | singleAssoc | Legt die Standard-Versandart fest, die für Berechnungen zu “kostenlosem Versand” verwendet wird (z.B. Anzeige “noch 45€ bis zum kostenlosen Versand”). Target: checkout.shippingMethod |
deliveryRequiredForOrder | bool | Gibt vor, ob eine Versandart ausgewählt sein muss, damit die Bestellung abgeschlossen werden kann. true - Checkout nur mit gewählter Versandart möglich. false - Bestellung ohne Auswahl einer Versandart zulässig. Default: true |
freeFields | list (object) | Konfigurierbare Zusatzfelder im Checkout (z.B. Hinweise, Kundennotizen). Jedes Objekt beschreibt ein Feld. |
id | string | Eindeutige Kennung des Zusatzfeldes. |
name | string | Anzeigename / Label im Checkout |
required | string | Markiert das Feld als Pflichtfeld. Default: false |
type | oneOf | Feldtyp und Detailkonfiguration. |
text | object | Textfeld-Konfiguration. |
checkbox | object | Checkbox-Konfiguration. |
defaults | object | Definiert Standardwerte für Felder im Checkout. |
defaultBillCountry | singleAssoc | Standardland für die Rechnungsadresse. Wird beim Anlegen einer neuen Adresse im Checkout vorausgefüllt - bei Nutzung der Draft-Adresse (draftBillAddress) sowie bei Gastbestellungen. Target: general.country |
defaultShippingCountry | singleAssoc | Standardland für die Lieferadresse. Wird beim Anlegen einer neuen Adresse im Checkout vorausgefüllt - bei Nutzung der Draft-Adresse (draftShippingAddress) sowie bei Gastbestellungen. Target: general.country |
defaultPaymentMethod | singleAssoc | Zahlungsart, die im Checkout standardmäßig vorausgewählt wird. Target: payment.payment |
defaultShippingMethod | singleAssoc | Liefermethode, die im Checkout standardmäßig vorausgewählt wird. Target: checkout.shippingMethod |
autoSelectSingleOption | bool | Wenn aktiviert, wird automatisch eine Versandmethode oder Zahlungsart ausgewählt, sofern nur eine gültige Option verfügbar ist. Default: true |
prevSelectionInvalidAutoSelect | enum | Steuert, ob eine bereits gewählte Versand- oder Zahlungsart automatisch ersetzt wird, wenn sie durch eine Änderung des Bestellkontexts (z.B. Wechsel des Lieferlandes) ungültig wird. Gilt für Versand- und Zahlungsarten (keine getrennte Option je Art). Mögliche Werte: disabled - keine automatische Neuauswahl durch diese Option; die Auswahl wird als ungültig markiert und der Kunde wählt neu (autoSelectSingleOption greift weiterhin).ifSingleOption - bleibt genau eine gültige Art übrig, wird diese automatisch gewählt (auch wenn autoSelectSingleOption deaktiviert ist); bleiben mehrere gültig, erfolgt keine automatische Auswahl.always - es wird immer eine gültige Ersatz-Art gewählt: bevorzugt die konfigurierte Standard-Art (defaultShippingMethod bzw. defaultPaymentMethod), sofern gültig; andernfalls die einzige verbleibende gültige Art.Default: disabled |
defaults:
Wenn mehrere Quellen (z.B. Benutzerauswahl oder Kundenpräferenzen) einen Wert für ein Feld in defaults liefern, gilt folgende Rangfolge der Priorisierung:
- Aktive Benutzerauswahl in der aktuellen Sitzung - wird niemals automatisch überschrieben.
- Gespeicherte Kundenpräferenzen eines eingeloggten Kunden (sofern unterstützt).
- Händler-Konfiguration - die hier definierten
defaults-Werte. - System-Fallback - z.B. automatische Auswahl bei nur einer verfügbaren Option oder erste gültige Option nach Sortierung (siehe
autoSelectSingleOption).
Neuauswahl, wenn eine gewählte Art nachträglich ungültig wird:Die Prioritätslogik oben gilt für die Erstauswahl. Wird dagegen eine bereits getroffene, aber inzwischen ungültige Auswahl behandelt - etwa weil der Kunde das Lieferland wechselt und die gewählte Versandart dort nicht angeboten wird -, steuert
prevSelectionInvalidAutoSelect, wie der Shop reagiert (siehe Tabelle oben). autoSelectSingleOption bleibt dabei in allen Modi als Rückfallebene aktiv.Hinweis zum Rundungsverhalten bei positionsbasierter Gutschein-Berechnung:
Wenn „
Wenn „
voucherAppliesPerItem” auf „true” gesetzt ist und ein prozentualer Gutschein mit einem konfigurierten Maximalbetrag verwendet wird, kann der gewährte Rabatt diesen Maximalbetrag um bis zu 0,01 € überschreiten. Grund dafür ist, dass der Rabatt pro Position einzeln gerundet wird und die Summe dieser Rundungen minimal vom erwarteten Gesamtbetrag abweichen kann.checkout.voucher - Einstellungen für Gutscheine
In diesem Abschnitt werden die Einstellungen für die Verwendung von Gutscheinen im Bestellprozess gebündelt. Hier wird unter anderem festgelegt, wie viele Gutscheine ein Kunde gleichzeitig einlösen kann und wie Rabattbeträge bei prozentualen Gutscheinen rechnerisch gerundet werden.
Beispielkonfiguration checkout.voucher :
Parameterübersicht
| Parameter | Typ | Beschreibung |
|---|---|---|
maxNumberVouchersPerOrder | uint | Maximale Anzahl an Gutscheinen, die pro Bestellung angewandt werden können. Mögliche Werte: 1 - 20Default: 1 |
roundPercentalVoucherInBasketItem | enum | Legt fest, wie Rabattbeträge aus prozentualen Gutscheinen pro Artikel gerundet werden, wenn mehrere Gutscheine gleichzeitig aktiv sind. Mögliche Werte: sum - Der Rabatt jedes einzelnen Gutscheins wird pro Artikel zunächst ungerundet berechnet. Alle Rabattbeträge werden addiert und das Ergebnis erst am Ende gerundet.single - Der Rabattbetrag jedes Gutscheins wird pro Artikel sofort einzeln gerundet. Weil jede Rundung einen kleinen Fehler einführen kann, weicht die Gesamtersparnis je nach Artikelpreis und Gutscheinhöhe um wenige Cent vom sum-Ergebnis ab. |
checkout.directOrder - Onlinebestellschein
Ermöglicht eine schnelle Erfassung von Artikeln per Artikelnummer - beispielsweise für große oder wiederkehrende Bestellungen. Festgelegt wird, welche Spalten pro Zeile sichtbar sind (z.B. Artikelnummer, Menge). Auf Wunsch merkt sich das System die zuletzt verwendete Zeilenanzahl über saveCountInSession.
Beispielkonfiguration checkout.directOrder
Parameterübersicht
| Parameter | Typ | Beschreibung |
|---|---|---|
fields | multiAssoc | Legt fest, in welchen Produktfeldern gesucht wird, um ein Produkt zu finden (z.B. content.productField.id, content.productField.itemnumber).Beispiel: Wenn id oder itemNumber konfiguriert sind, kann der Nutzer entweder die Produkt-ID oder die Artikelnummer eingeben. Target: [content.productField], [content.customProductField] |
initialNumber | int | Anzahl der Zeilen, die beim ersten Laden sichtbar sind. Default: 5 |
itemNumberFields | list (object) | Eingabefelder pro Zeile für die Artikelnummer-Erfassung - definiert Spalten / Felder und Beschriftungen (z.B. Reihenfolge, Label, Platzhalter). |
maximalNumber | int | Obergrenze der insgesamt zulässigen Eingabezeilen. Default: 1000 |
refreshedNumber | int | Anzahl der verfügbaren Zeilen, die bei Klick auf den Button “Zeilen hinzufügen” hinzugefügt werden. Default: 5 |
saveCountInSession | bool | Speichert die aktuelle Zeilenanzahl in der Session, damit sie beim nächsten Aufruf wiederhergestellt wird. default: true |
checkout.productDependency - Produktabhängigkeiten
Dieser Abschnitt legt fest, wann bestimmte Schritte oder Optionen im Checkout erlaubt sind. Er prüft dazu die Inhalte des Warenkorbs - etwa Eigenschaften wie Größe, Farbe oder ob ein Zusatzfeld ausgefüllt ist - und kann bei Nichterfüllung einen Hinweis anzeigen oder die Aktion sperren. Typische Einsatzfälle sind beispielsweise Pflichtzubehör oder das Verhindern verbotener Kombinationen im Checkout.
Beispielkonfiguration checkout.productDependency
Auswertungslogik
Die Regelgruppen und Bedingungen werden nach einem festen Schema ausgewertet:dependencyGroupssind ODER-verknüpft: Es genügt, wenn eine der Gruppen vollständig erfüllt ist.dependenciesinnerhalb einer Gruppe sind UND-verknüpft: Innerhalb einer Gruppe müssen alle Bedingungen erfüllt sein.- Ob eine einzelne Bedingung als erfüllt gilt, steuert zusätzlich
basketBehavior: BeimatchOncemuss mindestens eine Warenkorb-Position die Bedingung erfüllen, beimatchAllalle Positionen, bei denen das geprüfte Feld einen Wert liefert.
camel und eine Position mit leerem Freifeld engraving im Warenkorb) oder die zweite Gruppe (eine Position mit Größe S, M oder L).
Parameterübersicht
| Parameter | Typ | Beschreibung |
|---|---|---|
id | string | Eindeutige Kennung der Produktabhängigkeit, die selbst gewählt werden kann. Die id wird in den Validierungen shippingMethodValidation.productDependency (Versandarten) und paymentValidation.productDependency (Zahlungsarten) angegeben. Mehr dazu unter: Validierungs- und Prüfservices |
disabledText | string | Hinweis-/Fehlermeldung, die angezeigt wird, wenn Bedingungen nicht erfüllt sind. Bei Versandarten wird der Text im Frontend über $wsCheckout.getShippingMethodDisabledErrors() ausgegeben. |
dependencyGroups | list (object) | Enthält eine oder mehrere Regelgruppen. Die Gruppen sind ODER-verknüpft (siehe Auswertungslogik oben). |
dependencies | list (object) | Liste einzelner Bedingungen innerhalb einer Gruppe. Die Bedingungen sind UND-verknüpft. Jede Bedingung legt fest, welches Feld geprüft wird, wie geprüft wird und welcher Vergleichswert ggf. nötig ist. |
target | oneOf | Definiert, welches Feld geprüft wird. (Pflichtfeld) |
field | singleAssoc | Referenz auf ein Produktfeld, das geprüft wird. Target: content.productField, content.customProductField |
freeField | string | Name eines freien Feldes (z.B. Freifeld am Produkt/Warenkorb), das geprüft wird. (Alternativ zu field) |
type | enum | Pflichtfeld Vergleichsart der Bedingung. Die möglichen Werte sind in der Tabelle „Prüfarten” unten beschrieben. |
input | oneOf | Vergleichswert der Bedingung. (nur erforderlich, wenn der type einen Vergleichswert benötigt). Z.b. nicht erforderlich bei filled / empty. |
text | object | Textbasierter Vergleichswert. |
value | string | Wert für textbasierte Vergleiche. (z. B. bei value, prefix, matchsimplewildcard) |
list | object | Werteliste für Listenvergleiche (z. B. bei inlist, includedinlist). |
value | list (string) | Werteliste für den Vergleich. |
basketBehavior | enum | Legt fest, wie viele Warenkorb-Positionen die Bedingung erfüllen müssen: matchOnce = mind. eine Position matchAll = alle Positionen, bei denen das geprüfte Feld einen Wert liefert. Default: matchOnce |
Prüfarten (type)
| Wert | Beschreibung |
|---|---|
filled | Das Feld ist gefüllt. Kein input erforderlich. |
empty | Das Feld ist leer. Kein input erforderlich. |
value | Der Wert des Feldes entspricht dem in input angegebenen Wert. |
notvalue | Der Wert des Feldes entspricht nicht dem in input angegebenen Wert. |
inlist | Der Wert des Feldes ist in der in input angegebenen Liste enthalten. |
notinlist | Der Wert des Feldes ist nicht in der in input angegebenen Liste enthalten. |
prefix | Der Wert des Feldes beginnt mit dem in input angegebenen Präfix. |
notprefix | Der Wert des Feldes beginnt nicht mit dem in input angegebenen Präfix. |
greater | Der Wert des Feldes ist (numerisch) größer als der in input angegebene Wert. |
smaller | Der Wert des Feldes ist (numerisch) kleiner als der in input angegebene Wert. |
includedinlist | Der in input angegebene Wert ist in der Werte-Liste des Produktdatenfeldes enthalten (für Felder, die mehrere Werte enthalten). |
notincludedinlist | Der in input angegebene Wert ist nicht in der Werte-Liste des Produktdatenfeldes enthalten. |
matchsimplewildcard | Der Wert des Feldes stimmt mit dem in input angegebenen Muster überein. Als Platzhalter stehen ? (genau ein beliebiges Zeichen) und * (beliebig viele beliebige Zeichen) zur Verfügung; beide können mehrfach und an beliebiger Position verwendet werden. |
notmatchsimplewildcard | Der Wert des Feldes stimmt nicht mit dem in input angegebenen Muster überein. |
checkout.shippingMethod - Versandarten
Definiert verfügbare Versandarten und deren Verhalten im Checkout. Neben Aktivierung, Name und Bestellhinweisen lassen sich Preisstaffeln nach Gewicht (weightCost) und nach Warenkorb-Zwischensumme (basicCost) konfigurieren. Über Validierungen (validations) können Bedingungen wie zulässige Länder, nur physische Produkte oder weitere Regeln hinterlegt werden. Ergänzend sind Beschreibung, Bild/Icon und externer Link (z. B. Carrier-Info) möglich. Über das Feld group lässt sich eine Versandart zudem einer Versandarten-Gruppe zuordnen. So entstehen klar benannte, regelkonforme Versandoptionen mit transparenter Preislogik und optionalen Einschränkungen.
Beispielkonfiguration checkout.shippingMethod
Parameterübersicht
| Parameter | Typ | Beschreibung |
|---|---|---|
active | bool | Aktiviert / deaktiviert die Versandart im Shop. |
id | string | Eindeutige Kennung der Versandart. |
name | string | Anzeigename der Versandart. |
orderText(zukünftiges Feature / befindet sich noch in Entwicklung) | text | Bestell- / Hinweistexte zur Versandart. |
validations | multiService | Liste von Prüf- / Freigaberegeln (z.B. Länder - / Produktbeschränkungen). |
link(zukünftiges Feature / befindet sich noch in Entwicklung) | text | Externer Link mit Zusatzinfos. |
description(zukünftiges Feature / befindet sich noch in Entwicklung) | string | Kurze Beschreibung der Versandart. |
image(zukünftiges Feature / befindet sich noch in Entwicklung) | string | Bild- / Icon-URL der Versandart. |
weightCost | object | Staffelpreise nach Gewicht. |
basicCost | object | Staffelpreise nach Warenkorb-Zwischensumme. |
taxable | bool | Legt fest, ob auf die Versandkosten Steuern berechnet werden. Bei false wird der Versandkosten-Steuersatz in der Bestellung mit 0 ausgewiesen. |
type | enum | standard oder pickup.Bei standard handelt es sich um einen “normalen” Versand über einen Versender wie DHL, UPS etc. pickup kennzeichnet, dass es sich um “Click and Collect” und somit um eine Abholung in einem Store, Markt oder einer Filiale handelt. Für die Auswahl im Bestellablauf wird die Aktion CheckoutStoreIdSelect verwendet. Wurde kein Markt ausgewählt wird Standardmäßig der Markt aus der allgemeinen Auswahl verwendet. |
group | singleAssoc | Ordnet die Versandart einer Versandarten-Gruppe zu. Target: checkout.shippingMethodGroup |
checkout.shippingMethodGroup - Versandarten-Gruppen
Definiert Gruppen, zu denen Versandarten zusammengefasst werden können (z. B. nach Anbieter oder Lieferart). Eine Versandart wird über ihr Feld group einer Gruppe zugeordnet. Je Gruppe lassen sich Name, Beschreibung, Bild und ein Link hinterlegen - etwa, um im Frontend mehrere Versandarten gebündelt und einheitlich darzustellen.
Beispielkonfiguration checkout.shippingMethodGroup
Parameterübersicht
| Parameter | Typ | Beschreibung |
|---|---|---|
id | string | Eindeutige Kennung der Versandarten-Gruppe. |
name | text | Anzeigename der Gruppe. |
description | text | Beschreibung der Gruppe. |
image | string | Bild- / Icon-URL der Gruppe. |
link | string | Externer Link mit Zusatzinfos zur Gruppe. |
Im Template werden die Gruppen über
$wsConfig.shippingMethodGroups gelesen. Die einer Versandart zugewiesene Gruppe steht dort im Feld group der Versandart.checkout.shipTrack - Paketverfolgung
Konfiguriert die Anbindung an Versanddienstleister zur Sendungsverfolgung. Hinterlegt werden Provider-Kennung und Zugangsdaten (API-User/Token) sowie ein Sprachcode für Provider-Antworten und Labeling. Auf Basis dieser Daten lassen sich Tracking-Links und Statusinformationen im Checkout bzw. im Kundenkonto bereitstellen und automatisiert in Benachrichtigungen verwenden.
Beispielkonfiguration checkout.shipTrack
Parameterübersicht
| Parameter | Typ | Beschreibung |
|---|---|---|
id | string | Eindeutige Kennung der Versand-Tracking-Konfiguration. |
provider | string | Anbieter-Kennung. Derzeit wird ausschließlich DHL unterstützt - der Wert muss exakt so geschrieben werden (Groß-/Kleinschreibung beachten), sonst kann die Tracking-Integration nicht zugeordnet werden. |
username | string | API-Benutzername / Zugang für den Provider. |
password | string | API-Passwort / Token für den Provider. |
languageCode | string | Sprachcode für Labels / Antworten des Providers (ISO, z.B. de, en). Leer = bei DHL wird de verwendet. |
checkout.fieldErrorVisibility - Fehleranzeige
Legt fest, wann Fehlermeldungen im Checkout angezeigt werden, z.B. ob ein Hinweis auf ein fehlendes Pflichtfeld sofort erscheint, auch ohne dass der Kunde das Feld berührt hat, oder erst, wenn der Kunde auf “Kaufen” klickt.
Beispielkonfiguration checkout.fieldErrorVisibility
Parameterübersicht
| Parameter | Typ | Beschreibung |
|---|---|---|
showMissingBeforeSubmit | bool | Wenn true, werden “Pflichtfeld fehlt”-Felder bereits angezeigt, bevor der Kunde auf “Kaufen” klickt. Wenn false, erscheinen diese erst nach dem Klick auf “Kaufen”. |
showInvalidBeforeSubmit | bool | Wenn true, werden Validierungsfehler (z.B. ungültige PLZ, fehlerhaftes Datumsformat) sofort nach der Eingabe angezeigt. Wenn false, erscheinen diese erst nach dem Klick auf “Kaufen”. |
showIncompatibleBeforeSubmit | bool | Wenn true, werden Inkompatibilitätsfehler (z.B. Zahlart für dieses Land nicht verfügbar) sofort angezeigt. Wenn false, erscheinen diese erst nach dem Klick auf “Kaufen”. |
Nach dem Klick auf “Kaufen” werden standardmäßig alle Fehler angezeigt, unabhängig von dieser Einstellung.Im Checkout gibt es grundsätzlich zwei Arten von Fehlern:
- Fehler, die das System selbst erkennt (z.B. “Pflichtfeld leer”, “ungültige PLZ”):
Diese werden über $wsCheckout.problems.* bereitgestellt und lassen sich vollständig über dieshow*BeforeSubmit-Parameter steuern. - Fehler, die der Server zurückmeldet (z.B. nach dem Klick auf “Kaufen”):
Hier greifen die Einstellungen dershow*BeforeSubmit-Parameter nur teilweise. Bei Kundendaten und Draft-Adressen steht$wsCheckout.problems.*nicht zur Verfügung, deshalb werden die Serverfehler dort stattdessen über dieshow*BeforeSubmit-Parameter gefiltert. In allen anderen Bereichen des Checkouts (z.B. bei der Zahlungsart) werden Serverfehler immer sofort angezeigt, unabhängig von der Konfiguration.
