SFTP-REST-to-Shop (DE)

Allgemeines

Diese Dokumentation beschreibt die Übertragungsweise der REST-Schnittstelle für den Import von

  • Produkt- und Kategoriedaten

  • Kundendaten

  • Gutscheindaten

SFTP-Ãœbertragung

Die Importdateien selbst müssen zuvor per SFTP auf den Shop-Server übertragen werden. Sie erhalten hierzu von der WEBSALE AG einen gemeinsamen SFTP-Account für Produkt-, Kunden- und Gutscheindaten.

Import von Produktdaten

Übertragen Sie die Importdateien in das Unterverzeichnis „directimport“ auf dem Shop-Server und in entsprechende Unterverzeichnisse.

Beispiel für die PRD-Datei “100721.prd“, die sich im Verzeichnis “Deutsch_184.prd“ des Subshop-Verzeichnisses “Deutsch“ befindet:
../directimport/Deutsch/Deutsch_184.prd/100721.prd

Starten Sie dann den Import über das REST-Interface. Wenn das Verzeichnis nicht existiert, dann müssen Sie es anlegen. Als „scope“ (siehe unten) wird „products“ gesendet. Format und Inhalt der Importdateien werden in der Dokumentation beschrieben.

Bitte beachten Sie:
Bevor Produkt- oder Kategoriedaten importiert werden können, müssen die benötigten Subshops und freien Felder mit Hilfe des WSPManagers angelegt werden.

Import von Kundendaten

Übertragen Sie die Importdateien in das Unterverzeichnis „customerimport“ auf dem Shop-Server und starten Sie dann den Import über das REST-Interface. Wenn das Verzeichnis nicht existiert, dann müssen Sie es anlegen. Als „scope“ (siehe unten) wird „customers“ gesendet. Format und Inhalt der Importdateien werden in der Dokumentation beschrieben.

Import von Gutscheindaten

Übertragen Sie die Importdateien in das Unterverzeichnis „voucherimport“ auf dem Shop-Server und starten Sie dann den Import über das REST-Interface. Als „scope“ (siehe unten) wird „vouchers“ gesendet. Format und Inhalt der Importdateien werden in der Dokumentation beschrieben.

Authentifizierung

Die Authentifizierung bei den Funktionen dieser API erfolgt durch ein „Web Token“, das bei jedem Aufruf im HTTP-Header übergeben werden muss.

Um dieses Token zu erhalten, muss man sich mit dem folgenden Aufruf authentifizieren:

Action: POST
URL: https://www.websale.de/api/authent/login/<Shop-ID>
Request-Body: Login-ID und Passwort als JSON-Objekt
Beispiel:

{ "username": "websaleuser", "password": "meinpasswort" }

Die Antwort auf diesen Request enthält im Erfolgsfall ein JSON-Objekt mit dem benötigten Token:

{ "token": "TOKEN" }

Dieser Token muss bei allen folgenden Aufrufen im HTTP-Header mitgeschickt werden:
X-Authorization: Bearer TOKEN

Der generierte Token ist nur für einen Zeitraum von 30 Minuten gültig. Sobald dieser nicht mehr gültig ist, geben alle Anfragen den Statuscode 401 zurück. Ist dies der Fall muss ein neuer Token generiert werden.

Starten des Imports (start)

Das Kommando „Start“ startet den Import und liefert eine Import-ID zurück, mit der sich danach der Status des Imports abfragen lässt.

Action: POST
URL: https://www.websale.de/api/import/start
Folgende Parameter werden im Body als JSON-Objekt übergeben:

Name

Beschreibung

Pflichtfeld

Name

Beschreibung

Pflichtfeld

scope

Gibt an, welche Daten importiert werden sollen. Mögliche Werte sind „products“, "customers" und "vouchers", es kann jeweils nur einer dieser Werte angegeben werden.

ja

Beispiel-Request-Body:

{ "scope": "products" }

Beispiel-Response:

Im Erfolgsfall gibt die Funktion ein JSON-Objekt mit der Import-ID zurück, die für die Abfrage des Import-Status nötig ist.

Dass der Import erfolgreich gestartet wurde bedeutet nicht, dass auch erfolgreich Daten importiert wurden. Der Start des Imports erfolgt asynchron, d. h. die REST-Funktion kehrt zurück, bevor sich der Import beendet hat. Ob die Importdaten erfolgreich verarbeitet werden konnten, lässt sich zu diesem Zeitpunkt noch nicht feststellen.

Abfrage des Import-Status (status)

Dieses Kommando erlaubt es abzufragen, ob der Importprozess noch läuft, wie weit er fortgeschritten ist und welches Ergebnis (erfolgreich/abgebrochen) der Import hatte.

Action: GET
URL: https://www.websale.de/api/import/status/<Import-ID>
Im Erfolgsfall werden die Status-Informationen als JSON-Objekt im Body der Response übermittelt.

Felder, die in jedem Fall zurück geliefert werden:

Name

Wert

Name

Wert

state

0: Import läuft
1: Import (aufgrund eines Ausnahmefehlers) abgebrochen
2: Import (eventuell mit Fehlern oder Warnungen) beendet

progress

Der Fortschritt des Imports in Prozent, als ganze Zahl, z. B. „42“

Felder die nur zurück geliefert werden, wenn der Import beendet ist:

Name

Wert

Name

Wert

errorcount

Die Anzahl der „minder schweren“ Fehler, die beim Import aufgetreten sind, z. B. „123“

warncount

Die Anzahl der Warnungen, die beim Import aufgetreten sind, z. B. „328“

errors

Ein Array mit den beim Import aufgetretenen Fehlern

warnings

Ein Array mit den beim Import aufgetretenen Warnungen

addedcustomers

Ein Array mit den Userindizes, Kundennummern und eMail-Adressen der Kunden, die bei dem Import angelegt wurden

Beispiel 1:

Beispiel 2:

Fehlerbehandlung

Fehler bei der Authentifizierung

Status-Code

Status-Text

Beschreibung

Status-Code

Status-Text

Beschreibung

400

Bad Request

Ãœbergabe ist nicht korrekt (Formatierungsfehler/fehlende Felder) oder unbekannte Aktion

401

Unauthorized

User hat keine Berechtigungen für die angegebene ShopID

403

Forbidden

Unbekannte bzw. falsche Login-Daten

423

Locked

User wurde wegen mehrfachen fehlerhaften Logins zeitweise auf die Sperrliste gesetzt

Fehler beim Starten des Imports oder bei der Abfrage des Status

Zusätzlich zum HTTP-Statuscode kann bei diesen Fehlern im Body ein JSON-Objekt mit weiteren Informationen zum Fehler mitgeschickt werden.

Status-Code

Status-Text

Beschreibung

Status-Code

Status-Text

Beschreibung

401

Unauthorized

Es wurde kein Token im „X-Authorization“ Header gesendet, das Token ist ungültig oder es ist abgelaufen.

404

Not Found/ not found

Für die angegebene Status-ID existiert kein Import.

503

Service Unavailable/ service currently unavailable

Die angeforderte Funktion steht derzeit nicht zur Verfügung. Versuchen Sie es später nochmal oder setzen Sie sich mit dem Support der WEBSALE AG in Verbindung.

Beispiel für Zusatzinformationen im Body der Response:

„error“ enthält einen „Fehler-Code“, der für die Auswertung durch das aufrufende Programm gedacht ist. Für einen HTTP-Statuscode kann es mehrere „error“ Codes geben.

„detail“ enthält eine Fehlermeldung, die etwas ausführlicher ist als „error“ und die für einen menschlichen Leser gedacht ist.

„paramErrors“ ist ein Spezialparameter, der nur bei dem Fehler „invalidParams“ zurückgegeben wird. Der Wert des Parameters ist ein Objekt, jedes Feld innerhalb dieses Objektes entspricht einem ungültigen Parameter, der an die REST-Schnittstelle geschickt wurde. Für jedes Feld kann es mehrere Fehler geben, deshalb ist der Wert dieses Feldes ein Array. Jeder Eintrag des Arrays hat mindestens das Feld „kind“, das die Art des Fehlers angibt. Je nach „kind“ kann es noch weitere Felder mit zusätzlichen Informationen zu dem Fehler geben.

Fehler, die über die „status“-Funktion zurückgegeben werden

Allgemeine Bemerkungen zu „Fehlern“ und „Warnungen“

(Schwere) Fehler haben zur Folge, dass es keine andere Möglichkeit gibt, als den Import abzubrechen bzw. er gar nicht erst gestartet werden kann.
So ein Fall liegt z. B. vor, wenn in einer Produkt-Importdatei die Spalte mit dem Pflichtfeld „ProdIndex“ komplett fehlt.
(Minder schwere) Fehler führen dazu, dass einzelne Datensätze nicht importiert werden können.

Das passiert z. B., wenn in einer Produkt-Importdatei die Spalte „ProdIndex“ zwar vorhanden ist, aber für einzelne Produkte keinen Wert enthält.
Es gäbe auch in diesem Fall im Prinzip gute Argumente dafür, den Import abzubrechen und die Daten gar nicht einzulesen, schließlich wird das Ergebnis des Imports offensichtlich nicht dem beabsichtigten Ergebnis entsprechen. Die Erfahrung hat aber gezeigt, dass es den meisten Kunden wichtiger ist, dass der Import durchläuft, als dass 100 % aller Produkte/Kunden importiert wurden.

Warnungen treten auf, wenn Importdaten nicht der Spezifikation entsprechen, der Import sie aber trotzdem mit hoher Wahrscheinlichkeit richtig interpretiert und eingelesen hat.

Beispiel: Als Produktpreis wird der Wert „0,99“ importiert. Dieser Wert entspricht nicht der Spezifikation, weil statt eines Punktes ein Komma als Dezimaltrenner verwendet wird. Der Import wird in diesem Fall das Komma durch einen Punkt ersetzen und eine Warnung loggen.

Fehlermeldung

Beschreibung

Fehlermeldung

Beschreibung

EI001 Keine Importdaten vorhanden

Auf dem Shop-Server sind keine Importdaten vorhanden.

EI002 Import läuft bereits

Für den Shop läuft bereits ein Importprozess.

EI003 Ein anderer Prozess greift bereits auf die Shopdaten zu

Ein anderer Prozess schreibt oder liest bereits Produktdaten des Shops. Um Inkonsistenzen bei den Daten zu vermeiden, kann deshalb kein Import gestartet werden.

Folgende Prozesse können diese Meldung verursachen:

Export von Daten durch den PricePush Feed Engine

Datenübertragung durch den WSPManager

Aktualisierung von Glossardaten

EI004 Artikelimport Pro nicht freigeschaltet

Für den Shop ist der Artikelimport Pro nicht freigeschaltet

EI005 Ungültige Shop Version (VX erforderlich)

Der Import ist zwar freigeschaltet, aber das aufgerufene SOAP-Interface passt nicht zur Version des Shops (z. B. V7 statt V8)

EI006 Kundendatenübertragung nicht freigeschaltet

Der Import ist zwar freigeschaltet, aber die Ãœbertragung von Kundendaten ist nicht eingerichtet.

EI007 Interner Fehler

Der Import wurde aufgrund eines Ausnahmefehlers abgebrochen. Versuchen Sie es später nochmal oder setzen Sie sich mit der WEBSALE AG in Verbindung.

Fehler beim Kundendatenimport:

Fehlermeldung

Beschreibung

Fehlermeldung

Beschreibung

EC001

Weder 'UserIndex' noch 'CustomerID' vorhanden

EC002

Weder 'TableIndex' noch 'ExternalID' vorhanden

EC003

Sowohl 'CustomerID' als auch 'UserIndex' sind leer

EC004

Sowohl 'ExternalID' als auch 'TableIndex' sind leer

EC005

'CustomerID' und 'UserIndex' leer oder nicht in der Datenbank vorhanden

EC006

Der angegebene TableIndex ist bereits vergeben

EC007

Datensatz ohne eMail-Adresse

EC008

eMail-Adresse wird bereits verwendet

EC009

'CustomerID' wird bereits verwendet

EC010

CharsetImport ohne CharsetShop wird ignoriert

EC011

CharsetShop ohne CharsetImport wird ignoriert

EC012

Datensatz konnten nicht fehlerfrei in den Zielzeichensatz konvertiert werden

EC013

Ungültiger Zeichensatz

EC014

Es sind sowohl verschlüsselte als auch mit SFTP übertragene Daten vorhanden

EC015

Feld 'UserIndex' nicht vorhanden

EC016

UserIndex ... existiert nicht

EC017

TableIndex wurde ersetzt

EC018

Mehr als eine Rechnungsadresse vorhanden

EC019

In der Datei fehlt das Pflichtfeld ...

EC020

Das Pflichtfeld ... ist leer

EC021

Ungültiger Datentyp ... im Feld ...

Datenimport aus verschiedenen Systemen

Im Prinzip ist es möglich, z. B. die Produktdaten von einem System aus zu importieren und Kundendaten von einem anderen System aus. Es muss dabei jedoch sichergestellt sein, dass Übertragung und Import nicht gleichzeitig erfolgen. Jeder Versuch, einen Import zu starten, während bereits ein anderer Import läuft, führt zu einem "EI002 Import läuft bereits"-Fehler.

Kritischer als der Start des Imports ist die Übertragung der Daten, da diese per SFTP erfolgt und keine Trennung der Importverzeichnisse für verschiedene Systeme vorgesehen ist. Dass die Übertragung per SFTP erfolgt bedeutet, dass eine gleichzeitige Übertragung von verschiedenen Systemen aus durch die Import-Software nicht verhindert werden kann.

Dass die Importverzeichnisse nicht getrennt sind bedeutet, dass ein System eventuell den Import von Daten startet, die ein anderes System übertragen hat.

URL

Die derzeitige Basis-URL zum Aufruf der REST-Schnittstelle für den Import lautet

https://www.websale.de/api/...

Die URL kann sich in Zukunft ändern, stellen Sie also sicher, dass sie sich bei Ihnen ohne größeren Aufwand ändern lässt.