Shopify Sync
Synchronisiert Bestände und optional komplette Produktdaten aus deiner JTL-Wawi automatisch zu Shopify. Lokal, über deine eigene Shopify-App, nichts läuft über sql2rest.com.
Überblick und Screenshots ansehen →
Was ist das?
Der Shopify-Sync ist ein Add-on von SQL2REST und läuft direkt neben deiner JTL-Wawi. Er berechnet je Lager den verfügbaren Bestand (Lagerbestand minus reservierte offene Aufträge und optional minus Puffer) und schreibt ihn per SKU in regelmäßigen Abständen an die passenden Shopify-Standorte. So verkauft Shopify nichts, was in der Wawi schon reserviert ist, und Doppelverkäufe werden vermieden. Geschrieben wird ausschließlich nach Shopify, deine Wawi-Datenbank bleibt unberührt (Read-only).
Voraussetzungen
- Eine laufende SQL2REST-Instanz und das installierte Shopify-Sync-Add-on.
- Ein Shopify-Store mit Zugang zum Shopify Dev Dashboard (als Store-Inhaber hast du den automatisch).
- Rund 5 Minuten für das einmalige Anlegen der eigenen App.
Verbinden über eine eigene Shopify-App
Du legst eine eigene Shopify-App an und trägst Client ID und Schlüssel in SQL2REST ein. Der Zugriff bleibt komplett auf deinem Server.
- App im Dev Dashboard anlegen: öffne dev.shopify.com, melde dich an und lege eine neue App an (Typ "API-only" reicht).
- Berechtigungen über eine Version setzen (nicht auf der Einstellungsseite). Öffne "Bereiche auswählen" und hake genau diese drei an, dann "Veröffentlichen":
read_inventorywrite_inventoryread_locationsAchtung: es gibt viele ähnlich klingende Bereiche (read_inventory_shipments, read_inventory_transfers). Die brauchst du nicht. read_locations steht in der Gruppe Locations, nicht unter Inventory.Nur für Artikeldaten-Sync (optional)
Wenn du den Artikeldaten-Sync aktivierst, brauchst du zusätzlich diese zwei Bereiche. Wer nur Bestände synchronisiert, kann sie weglassen.
write_productswrite_filesDu trägst diese Bereiche in deiner eigenen Shopify-App ein, wenn du Artikeldaten aktivierst. Es ist kein neuer OAuth-Antrag nötig, da du deine eigene App verwendest und die Bereiche dort direkt setzen kannst.
- App auf deinem Store installieren: im Dev Dashboard "App installieren", deinen Store wählen und den Zustimmungsdialog bestätigen. Landest du danach auf einer "Example Domain"-Seite, das ist normal, schließ den Tab einfach.
- Zugangsdaten kopieren: unter Einstellungen, Bereich Anmeldedaten, die Client-ID und den Schlüssel (das Client Secret). Den Schlüssel über das Augen-Symbol einblenden. Den Knopf "Rotieren" nicht drücken, er macht ein bereits eingetragenes Secret ungültig.
- In SQL2REST eintragen: im Setup-Schritt "Shopify verbinden" die Shop-Domain, Client ID und das Client Secret eingeben und "Verbinden und Standorte laden" klicken. SQL2REST prüft die Daten direkt bei Shopify und speichert sie verschlüsselt (DPAPI) auf deinem Server.
JTL-Lager den Shopify-Standorten zuordnen
Nach dem Verbinden ordnest du die Lager zu. Schalte die JTL-Lager ein, die du synchronisieren willst (in der Wawi inaktive Lager sind standardmäßig aus) und ordne jedem einen Shopify-Standort zu. Ein Standort kann dabei nur von genau einem aktiven Lager belegt werden. Die Artikel werden automatisch über die SKU abgeglichen, du musst keine Produkte einzeln zuordnen.
Sync-Optionen und Puffer
Vor dem Aktivieren legst du Intervall und Puffer fest. Reservierte offene Aufträge werden immer abgezogen, der Puffer kommt optional obendrauf.
- Intervall: Der Sync läuft als Hintergrunddienst in einem festen Intervall (Standard 15 Minuten, je nach Tarif kürzer). Übertragen werden nur geänderte Bestände (Delta), das schont die Shopify-API.
- Pufferquelle je Lager: Zusätzlich zum Abzug der reservierten Aufträge wählst du je Lager die Pufferquelle. JTL-Wert nimmt den Mindestbestand je Lager aus der Wawi (Standard), Eigener Wert zieht eine feste Menge ab. So verkauft Shopify nie in deinen Sicherheitsbestand.
Produktdaten-Sync (Artikeldaten)
Zusätzlich zum Bestand kann der Shopify-Sync auf Wunsch komplette Produktdaten aus deiner JTL-Wawi nach Shopify übertragen: Titel, Beschreibung, Preise, Varianten und Bilder sowie SEO-Felder, Kurzbeschreibung, Merkmale und Kategorien. Vater-Kind-Artikel werden als Shopify-Varianten mit eigenem Preis, eigener EAN und eigenem Bild angelegt, bestehende Produkte werden aktualisiert statt doppelt angelegt.
Der Produktdaten-Sync ist optional und wird getrennt vom Bestandsabgleich eingeschaltet. Er läuft auf einem eigenen, ruhigeren Zeitplan (standardmäßig stündlich) und überträgt nur geänderte Produkte, unveränderte Artikel kosten kein Shopify-Kontingent. Der erste Komplett-Abgleich läuft in Paketen und nimmt nach einer Unterbrechung dort wieder auf, wo er aufgehört hat.
Wird ein Artikel in JTL deaktiviert oder entfernt, setzt der Sync das zugehörige Shopify-Produkt automatisch auf Entwurf (inaktiv), es wird nicht gelöscht. Kehrt der Artikel in JTL zurück, wird das Produkt wieder aktiv. Ein Schutzmechanismus bricht den Vorgang ab, falls ein einzelner Lauf ungewöhnlich viele Produkte auf einmal deaktivieren würde.
Für den Produktdaten-Sync brauchst du in deiner eigenen Shopify-App zusätzlich die zwei Bereiche write_products und write_files (siehe Schritt 2). Wer nur Bestände synchronisiert, lässt sie weg.
Unterstützte Metafeld-Typen
Beim MetafeldSync werden deine JTL-Werte in das Format des jeweiligen Shopify-Feldtyps gebracht. Unterstützt werden:
- Text (ein- und mehrzeilig)
- Rich-Text (HTML wird automatisch umgewandelt)
- Ganze Zahlen und Dezimalzahlen (auch deutsche Schreibweise, z. B. 1.234,56)
- Ja/Nein
- Datum und Datum/Uhrzeit (deutsch und ISO)
- URL, Farbe (Hex) und JSON
Ist für ein Feld in Shopify bereits ein Typ festgelegt, richtet sich der Sync nach diesem Typ. Typen, die sich nicht aus einem einfachen Textwert ableiten lassen (Verweise, Listen, Bewertung, Maße/Gewicht/Volumen, Geld), werden übersprungen.
Artikel ohne Bestand übertragen
Der automatische Abgleich richtet sich nach der Einstellung "Nur Artikel mit Bestand synchronisieren": ist sie aktiv, werden Artikel ohne Bestand übersprungen. Möchtest du einen einzelnen Artikel ohne Bestand trotzdem übertragen (zum Beispiel als Vorbestellung), überträgst du ihn gezielt in der Vorschau über "Dieses Produkt übertragen". Das funktioniert unabhängig vom Bestand und sendet auch die Bilder mit. Über den 0-Bestand-Filter in der Vorschau steuerst du, ob Artikel ohne Bestand in einer gefilterten Übertragung enthalten sind.
Zusammenspiel mit dem JTL-Connector
Aufträge und Kundendaten laufen immer über den JTL-Connector, die übernimmt SQL2REST nicht. Für Artikel, Preise, Bilder und Bestände legst du fest, wer sie an Shopify sendet, damit sich Connector und SQL2REST nicht gegenseitig überschreiben:
| Mit SQL2REST synchronisiert | Im JTL-Connector einstellen |
|---|---|
| Nur Bestand | Nur "Bestände" deaktivieren. Artikel, Preise und Bilder sendet weiterhin der Connector. |
| Bestand und Artikeldaten | "Daten zum Onlineshop senden" komplett deaktivieren. SQL2REST übernimmt dann Artikel, Preise, Bilder und Bestände. |
Aufträge und Kunden bleiben in beiden Fällen im JTL-Connector aktiv.
Vorschau & Starten
Probelauf: Vor dem ersten echten Sync zeigt der Probelauf genau, welche Menge je Artikel und Standort nach Shopify geschrieben würde, ohne etwas zu verändern. Erst danach aktivierst du den Sync.
Wenn etwas nicht klappt
"Zugriff verweigert" oder keine Standorte sichtbar
Die Scopes sind noch nicht wirksam. Nach einer Scope-Änderung musst du die App neu autorisieren: im Shopify-Admin unter Einstellungen, Apps die App deinstallieren und im Dev Dashboard erneut installieren. Reines Veröffentlichen der Version reicht nicht.
Verbindung schlägt fehl (400)
Prüf, ob die App wirklich auf dem Store installiert ist und ob Client ID und Schlüssel zur richtigen App gehören.
Schreibt der Sync in meine Wawi-Datenbank?
Nein. SQL2REST liest die Bestände mit einem Read-only-User aus der Wawi. Geschrieben wird ausschließlich nach Shopify (read_inventory, write_inventory, read_locations). Mit dem optionalen Artikeldaten-Sync kommen write_products und write_files hinzu, die du in deiner eigenen Shopify-App freischaltest. In die Wawi-Datenbank wird in keinem Fall geschrieben.
Wo werden die Zugangsdaten gespeichert?
Lokal auf deinem Windows-Server, mit Windows DPAPI verschlüsselt. Shop-Domain im Klartext, Client Secret und Token verschlüsselt. Nichts davon verlässt deinen Rechner.