Zum Hauptinhalt springen
Hat ein Käufer seine Bestellung abgeschickt, will er wissen, wo das Paket gerade ist. Die Sendungsverfolgung holt diese Auskunft direkt beim Versanddienstleister und stellt sie im Template bereit. Vier Tags genügen dafür, und sie bauen aufeinander auf. Ein Tag stößt den Abruf an, ein zweites sagt, ob er geklappt hat, ein drittes nennt im Fehlerfall den Grund, und das vierte liefert die Antwort des Dienstleisters zur Weiterverarbeitung. Alle vier Tags sind auf allen Templates zulässig. Die Funktion muss im Shop freigeschaltet sein, und die Zugangsdaten je Dienstleister stehen im Abschnitt ShipTrack der Shopkonfiguration. Jeder Eintrag dort hat eine Kennung, über die Sie ihn im Template ansprechen.

Den Abruf auslösen

SHIPTRACK-Get() nimmt zwei Argumente entgegen: die Kennung des Konfigurationseintrags und die Sendungsnummer. Beide dürfen aus einem anderen Tag kommen.
Das Tag stößt eine Anfrage beim Versanddienstleister an und wartet auf dessen Antwort. Setzen Sie es genau einmal und nur dort, wo das Ergebnis gebraucht wird. Auf einer Übersichtsseite mit vielen Sendungen wird aus jedem Vorkommen eine eigene Anfrage.SHIPTRACK-Get() ist ausschließlich ein Einzel-Tag und braucht beide Argumente. Fehlt eines, oder ist eines nach der Tag-in-Tag-Auflösung leer, gilt das ganze Tag als ungültig und erzeugt eine Meldung im Template.
Übergeben Sie ein Tag als Argument, ersetzen Sie dessen Tilde-Zeichen durch Dollar-Zeichen, so wie im Beispiel. Das Shopsystem unterstützt drei Dienstleister: DHL, die österreichische Post und den Schweizer-Post-Anbindung. Welcher gemeint ist, steht am Konfigurationseintrag, nicht im Tag. Im Template ändert sich dadurch nichts außer der Kennung im ersten Argument.

War der Abruf erfolgreich

SHIPTRACK-OK gibt es nur als Klammerung. Es greift, wenn der letzte Abruf ohne Fehler durchgelaufen ist.
Die Reihenfolge im Template entscheidet. SHIPTRACK-OK, SHIPTRACK-LastErrorCode und SHIPTRACK-JSONResult beziehen sich auf den letzten Abruf und müssen deshalb hinter SHIPTRACK-Get() stehen. Davor hat noch kein Abruf stattgefunden.

Fehler nachvollziehen

SHIPTRACK-LastErrorCode gibt den Code des letzten Abrufs aus.
Die Codes 1, 4 und 5 weisen auf eine unvollständige Konfiguration hin, nicht auf ein Problem mit der Sendung. Ein Code ab 1000 kommt dagegen vom Dienstleister selbst, beispielsweise bei einer unbekannten Sendungsnummer, einer abgelehnten Anmeldung oder einer Zeitüberschreitung. Die Codes 2 und 3 erreichen Sie über ein Template praktisch nicht. Ein leeres Argument lässt SHIPTRACK-Get() bereits vorher als ungültiges Tag auflaufen, es kommt also gar nicht erst zum Abruf.
SHIPTRACK-LastErrorCode greift als Klammerung, wenn ein Fehler vorliegt, also bei einem Code über null. Die negative Klammerung bedeutet damit nicht “kein Code verfügbar”, sondern “kein Fehler”, und ist gleichbedeutend mit SHIPTRACK-OK.

Die Antwort auswerten

SHIPTRACK-JSONResult liefert die vollständige Antwort des Dienstleisters als JSON. Diese übergeben Sie an die JSON-Schnittstelle und greifen dort auf die einzelnen Angaben zu.
Der Aufbau der Antwort kommt vom Dienstleister und unterscheidet sich je nach Anbieter. Bei DHL steht der zuletzt gemeldete Zustand im Kopf des Datensatzes, darunter folgt die Liste der einzelnen Ereignisse.
DHL antwortet in XML. Das Shopsystem wandelt die Antwort vor der Ausgabe in JSON um. Daher die führenden Bindestriche an den Schlüsseln, sie kennzeichnen ehemalige XML-Attribute. Die österreichische Post liefert bereits JSON, dort fehlen diese Bindestriche.
Werten Sie SHIPTRACK-JSONResult nur innerhalb von SHIPTRACK-OK aus. Ohne einen vorangegangenen erfolgreichen Abruf ist die Ausgabe nicht brauchbar.
Die Feldnamen innerhalb der Antwort legt der Dienstleister fest, nicht das Shopsystem. Sie können sich ändern, ohne dass sich im Shop etwas ändert. Fangen Sie fehlende Felder deshalb mit den Prüftags der JSON-Schnittstelle ab, statt sich auf ihr Vorhandensein zu verlassen. Referenz: EJD- (JSON-Schnittstelle)

Die Tags im Überblick

Alle vier Tags sind auf allen Templates zulässig. Die letzten drei setzen einen vorangegangenen SHIPTRACK-Get() voraus.

Verwandte Themen