Abacus bietet seit einiger Zeit eine gut dokumentierte REST API Schnittstelle an, die für die Kommunikation von Drittsystemen mit Abacus eingesetzt wird. Dank dieser APIs ist auch die Ablösung vom ehemaligen AbaShop durch eine moderne Shoplösung gut möglich. Die Abacus APIs sind im dafür erstellten API Hub von Abacus dokumentiert.
Als Webshop ist sowohl für den B2B als auch den B2C Bereich das Thema «Preis» sehr wichtig. Jedes Produkt braucht den korrekten Preis zum korrekten Zeitpunkt für den jeweiligen Kunden, der den Shop gerade betrachtet. In diesem Blogpost gehe ich auf diese «Pricing API» von Abacus ein und versuche diese verständlich zu erläutern.
1 Welches System hat die Preishoheit?
Ganz grundsätzlich ist zuerst zu klären, welches System denn verantwortlich ist für den Preis. Wir haben dazu eine klare Meinung: Die Preisfindung ist eine Kernaufgabe vom ERP. Deshalb sollten, wenn immer irgendwie möglich, sämtliche Preisdaten über das ERP gesteuert werden. Jedes ERP hat seine Eigenheiten und bildet teils Geschäftsmodelle sehr gut ab, andere können etwas umständlicher sein. Unserer Erfahrung nach lohnt es sich aber eigentlich immer, die eigene Preislogik und die internen Prozesse rund um die Preise so weit wie möglich mit den Möglichkeiten des ERP abzustimmen.
Wenn ein neues Projekt, wie z.B. ein neuer Webshop in Anbindung an ein ERP System wie Abacus in Angriff genommen wird, bedeutet dass aber immer auch, das womöglich noch Hausaufgaben im ERP System gemacht werden müssen und Daten zu bereinigen sind.
2 Die Pricing API Endpoints von Abacus
Gehen wir in die Details. Abacus bietet drei verschiedene API Endpoints an, die wir verwenden.
/FindProductPrice
/FindProductsPriceOverview
/FindProductsPriceShoppingCart
Diese Endpoints werden von einem Drittsystem (z.B. Shopware) genutzt, um von Abacus den korrekten Preis zu erhalten. Eine solche Anfrage nach einem Preis beinhaltet immer:
- die Produktnummer,
- das Datum,
- die Mengenangabe,
- die Währung
- sowie optional die Kundennummer.
Abacus führt dann eine interne Preisfindung durch und berücksichtigt sämtliche Abacus-internen Möglichkeiten zur Preissetzung und zur Rabattdefinierung. Am Schluss erhalten wir den aktuell gültigen Preis für das gewünschte Produkt in der angefragten Menge, der gewünschten Währung und gegebenenfalls unter Berücksichtigung einer Kundennummer (kundenspezifische Preise). Der Shop lagert damit die ganze Preisfindung an Abacus aus, und Preisänderungen sind immer aktuell.
Die aufgeführten Endpoints /FindProductPrice und /FindProductsPriceOverview unterscheiden sich nur darin, dass der eine Endpoint nur ein Produkt entgegennimmt während letzterer mehrere Produkte auf einmal verarbeitet und den aktuellen Preis der ganzen Produktliste pro Produkt retourniert.
Der Endpoint für /FindProductsPriceShoppingCart ist speziell, da dieser auch auftragsbezogene Rabattierungen berücksichtigt. Zum Beispiel folgende Situation: Produkt X und Produkt Y haben einzeln einen definierten Preis, wenn aber beide zusammen im Auftrag inkludiert sind, ist Produkt X nochmals 10% günstiger. Dieser Endpoint wird deshalb immer bei Warenkorbanpassungen aufgerufen.
3 Implementierung in Shopware
Unsere Shopware Abacus Integration deckt bereits den vollen Funktionsumfang der Pricing API ab. Die Implementierung hat ein paar spannende Challenges, die ich kurz skizziere.

Grundlage für den Pricing API Request ist die Produktnummer, deshalb braucht es zuerst einen aktiven Produktsync. Das läuft entweder direkt von Abacus ins Shopware oder aber über ein PIM System, wie z.B. Pimcore. Der Produktsync beinhaltet einen Produktpreis. Dieser ist notwendig, da Shopware zwingend einen Produktpreis benötigt und diesen Preis nutzen wir als «Backup-Preis», sofern eines Tages das Abacus System unerwartet nicht erreichbar und «down» ist. Alternativ kann in so einem Szenario auch automatisch eine Meldung im Shop aufgeschaltet werden.
Zusätzlich empfiehlt sich, zu jeder Shopware Instanz auch einen eigenen Redis Cache aufzusetzen. Redis ist ein Zwischenspeicher, der Daten blitzschnell zur Verfügung stellt und damit die Shop Performance deutlich erhöht.
Der Prozess funktioniert nun so: Ein Besucher öffnet den Webshop. Sämtliche Produkte, die in dieser Seite eingeblendet sind, werden im Hintergrund automatisch an die Abacus Pricing API geschickt, damit der korrekte Preis angezeigt werden kann. Sofern der Besucher eingeloggt ist und es sich um ein Bestandskunde mit vorhandener Kundennummer handelt, wird bei der Abacus Pricing API Anfrage die Kundennummer mitgeschickt, damit die kundenspezifischen oder kundengruppenspezifischen Konditionen berücksichtigt werden.
Die Antwort von Abacus, also die Preise der Produkte, werden im Redis Cache für eine Stunde zwischengespeichert. Wenn der Kunde nun dasselbe Produkt auf einer anderen Unterseite des Shops wieder sieht, kann der Preis direkt vom Zwischenspeicher verwendet werden und es erfolgt kein weiterer API Request an Abacus. Das macht das Nutzererlebnis flüssiger und spart im Hintergrund Ressourcen.
Wenn Produkte in den Warenkorb hinzugefügt oder gelöscht werden, wird der Warenkorbpreis dieser Produkte jeweils aktualisiert, damit auch auftragsbezogene Rabattierungen berücksichtigt sind.
4 Fazit
Mit der Abacus Pricing API können wir im Webshop jederzeit den richtigen Preis für den jeweiligen Kunden darstellen, ohne uns über Preislogiken oder Import und Export von grossen Preislisten Gedanken zu machen. Diese smarte Lösung überlasst die ganze Preisfindung Abacus und der Webshop fokussiert sich auf andere Sachen: dem Kunden möglichst ein tolles Einkaufserlebnis zu bieten.
Kommentare (0)
Hinterlasse einen Kommentar