Überblick
Diese Dokumentation beschreibt, wie Sie eine Shopify Public App im Shopify Dev Dashboard registrieren und konfigurieren und für die OAuth-Installation in AdlerDo V6.1 integrieren. Der Prozess erzeugt eine Client ID und ein Client Secret, die AdlerDo zur Authentifizierung gegenüber jedem Shopify-Store verwendet, der die App installiert.
Architektureller Kontext
AdlerDo stellt /api/shopify/install als OAuth-Einstiegspunkt bereit. Die App im Dev Dashboard leitet jede Installationsanfrage an diesen Endpunkt weiter, der den OAuth-Code-Austausch durchführt, das Zugriffstoken in der Mandantendatenbank speichert und über Hangfire-Hintergrundjobs die erforderlichen Webhooks registriert.
Voraussetzungen
Stellen Sie vor dem Beginn sicher:
- Zugriff auf die Shopify-Organisation der TecSee GmbH mit der Berechtigung zur Verwaltung von Apps
- AdlerDo-Middleware bereitgestellt und über HTTPS unter dem für die Zielumgebung konfigurierten öffentlichen Host erreichbar
- Die Endpunkte
/api/shopify/install und /api/shopify/callback sind erreichbar und liefern gültige Antworten zurück
- Ein Entwicklungsstore steht für End-to-End-Tests zur Verfügung, bevor die Zugangsdaten in die Produktion überführt werden
- Die Liste der von AdlerDo benötigten OAuth-Scopes wurde finalisiert und in der Konfiguration hinterlegt
Schritt 1 — Die Seite für die App-Entwicklung öffnen

Melden Sie sich bei der Shopify-Organisation an und navigieren Sie zu Settings → Apps and sales channels → App development. Klicken Sie auf die Schaltfläche "Build apps in Dev Dashboard".
Wichtig: Verwenden Sie NICHT die Schaltfläche "Create an app" im Panel "Legacy custom apps". Legacy Custom Apps werden ab dem 1. Januar 2026 für neue Händler nicht mehr funktionieren.
Schritt 2 — Eine neue App im Dev Dashboard erstellen

Das Dev Dashboard öffnet sich unter dev.shopify.com/dashboard/{organizationId}/apps. Klicken Sie in der oberen rechten Ecke der App-Liste auf die Schaltfläche "Create app".
Schritt 3 — Einen Erstellungspfad wählen und den App-Namen festlegen

Es werden zwei Erstellungspfade angeboten:
- Start with Shopify CLI — erstellt ein Node/Remix-Projekt lokal als Gerüst. AdlerDo benötigt diesen Pfad nicht.
- Start from Dev Dashboard — registriert App-Metadaten direkt im Dashboard und erzeugt sofort eine Client ID und ein Secret. Verwenden Sie diesen Pfad für AdlerDo.
Geben Sie den App-Namen ein (zum Beispiel: AdlerDo) und klicken Sie auf "Create".
Namenskonvention
Verwenden Sie einen stabilen, für Kunden sichtbaren Namen, der auf dem Zustimmungsbildschirm bei der Installation angezeigt wird. Für TecSee bei Bedarf pro Umgebung mit Präfix: AdlerDo (Production), AdlerDo Staging, AdlerDo Dev.
Schritt 4 — URLs, Webhooks-Version und Scopes konfigurieren

Nach der Erstellung öffnet sich die App auf dem Reiter "Versions" mit einer neuen Entwurfsversion. Hier werden die Installations-URL, die Webhooks-API-Version und die Scopes definiert.
6.1 App-URL
Setzen Sie die App URL auf den öffentlichen AdlerDo-Installationsendpunkt:
https://whlvm133440.wawihost.de/api/shopify/install
Auf diese URL leitet Shopify weiter, wenn ein Händler die App installiert. Der ShopifyInstallController von AdlerDo liest die Query-Parameter shop und hmac aus, validiert den HMAC und leitet auf die OAuth-Grant-Seite von Shopify weiter.
6.2 App in Shopify-Admin einbetten
Lassen Sie das Kontrollkästchen "Embed app in Shopify admin" aktiviert. AdlerDo stellt mithilfe von App Bridge eine eingebettete Admin-Oberfläche innerhalb des Shopify-Admin-Frames bereit.
6.3 Preferences-URL
Optional. Lassen Sie das Feld leer, es sei denn, die App stellt eine separate Einstellungsseite außerhalb der eingebetteten Erfahrung bereit.
6.4 Webhooks-API-Version
Pinnen Sie die Webhooks-API-Version explizit. Das Beispiel zeigt 2026-04, was die derzeit von AdlerDo verwendete Version ist. Eine Anhebung dieses Werts erfordert die Überprüfung jedes Webhook-Payload-Mappings.
6.5 Zugriffs-Scopes
Klicken Sie auf "Select scopes" und aktivieren Sie die von AdlerDo benötigten Scopes. Halten Sie die Liste auf das Minimum, das AdlerDo tatsächlich verwendet — Händler sehen die vollständige Liste auf dem Zustimmungsbildschirm bei der Installation.
Genau dieselbe Liste muss außerdem in der AdlerDo-Konfiguration (appsettings.Shopify.json → Shopify:Scopes) hinterlegt werden, da der Installationscontroller sie als Query-Parameter scope übergibt. Eine Abweichung erzwingt Neuinstallationen.
Optionale vs. erforderliche Scopes
Optionale Scopes können zur Laufzeit nach der Installation angefordert werden. AdlerDo behandelt alle aufgeführten Scopes während der Erstinstallation als erforderlich, lassen Sie daher den Block "Optional scopes" leer.
6.6 Redirect-URLs
Fügen Sie die OAuth-Redirect-URL hinzu — die öffentliche URL des AdlerDo-OAuth-Callbacks:
https://whlvm133440.wawihost.de/api/shopify/callback
Fügen Sie pro Umgebung eine Redirect-URL hinzu. Shopify weist den OAuth-Callback zurück, wenn die im Parameter redirect_uri angegebene URL nicht auf dieser Whitelist steht.
Schritt 5 — Die Version veröffentlichen

Nachdem Sie alle Felder gespeichert haben, klicken Sie unten auf der Versionsseite auf "Release".
- Version name — eine menschenlesbare Bezeichnung. TecSee-Konvention:
alderdoo-{n}, wobei n die automatisch hochzählende Release-Nummer ist
- Version message — ein kurzes Changelog (z. B. "added read_locales scope", "bumped webhooks API to 2026-04")
Klicken Sie auf "Release". Die neue Version wird sofort aktiv und ersetzt für alle Neuinstallationen die vorherige aktive Version.
Scope-Änderungen nach dem Release
Das Hinzufügen eines neuen Scopes zu einer veröffentlichten Version gewährt diesen NICHT automatisch für bereits installierte Shops. Der Shop-Inhaber muss eine erneute Autorisierung genehmigen. AdlerDo erkennt Scope-Abweichungen bei jeder Anfrage und löst bei Bedarf eine Weiterleitung zur Neuinstallation aus.
Schritt 6 — Die aktive Version überprüfen

Öffnen Sie den Reiter "Versions" über die linke Seitenleiste. Die zuletzt veröffentlichte Version ist mit dem grünen Badge "Active" gekennzeichnet. Alle vorherigen Versionen bleiben zu Prüfzwecken sichtbar.
Aus dieser Ansicht heraus können Sie jede historische Version anklicken, um ihre Konfiguration einzusehen — nützlich beim Debuggen einer Installation auf einem älteren Shop.
Schritt 7 — Client ID und Secret abrufen

Öffnen Sie den Reiter "Settings" über die linke Seitenleiste. Der Block "Credentials" oben zeigt die Client ID und das Secret an.
9.1 Client ID
Öffentlicher Bezeichner. Kann bedenkenlos in die Konfiguration übernommen werden. Kopieren Sie ihn über das Zwischenablage-Symbol und fügen Sie ihn in die AdlerDo-Konfiguration ein.
9.2 Client Secret
Vertraulich. Wie eine Zugangsberechtigung zu behandeln. Das Secret wird nur einmal bei der ersten Generierung angezeigt; danach wird nur die verschleierte Form angezeigt. Verwenden Sie das Augen-Symbol, um es einmalig zum Kopieren sichtbar zu machen, und speichern Sie es anschließend über den standardmäßigen AdlerDo-Secret-Storage-Pfad.
In AdlerDo werden Secrets für Marktplatzintegrationen AES-256-verschlüsselt in der Mandantendatenbank über den MarketplaceCredentialEncryptor gespeichert.
9.3 Das Secret rotieren
Klicken Sie auf "Rotate", um ein neues Secret zu generieren. Das vorherige Secret wird sofort ungültig. Koordinieren Sie die Rotation mit einem Deployment des neuen Secrets in AdlerDo.
9.4 API-Kontakt-E-Mail
Setzen Sie diese auf ein überwachtes Postfach (derzeit dev@tecsee.de). Shopify sendet Hinweise zu API-Veraltungen (Deprecations) und Sicherheitswarnungen an diese Adresse.
Die Zugangsdaten in AdlerDo einbinden
Sobald die Client ID und das Secret vorliegen, fügen Sie die Zugangsdaten der AdlerDo-Konfiguration hinzu.
10.1 Konfiguration
Fügen Sie den folgenden Block zur umgebungsspezifischen Konfiguration hinzu:
"Shopify": {
"ClientId": "1d15c8413f636e7cfda6f4402d9ef552",
"ClientSecret": "<from Settings page>",
"Scopes": "read_products,write_products,read_orders,write_orders,…",
"WebhooksApiVersion": "2026-04",
"InstallRedirectUrl": "https://whlvm133440.wawihost.de/api/shopify/callback"
}
10.2 Installationsablauf
Der End-to-End-Installations-Handshake sieht wie folgt aus:
- Der Händler klickt auf den Installationslink → Shopify leitet mit den Query-Parametern shop und hmac auf die App URL weiter
- AdlerDo
/api/shopify/install validiert den HMAC gegen das Client Secret und leitet mit der konfigurierten Scope-Liste und einer generierten State-Nonce auf https://{shop}/admin/oauth/authorize weiter
- Der Händler genehmigt die Scopes auf dem Shopify-Zustimmungsbildschirm
- Shopify leitet mit den Parametern code, hmac und state auf
/api/shopify/callback weiter
- AdlerDo validiert den HMAC und die State-Nonce und sendet anschließend per POST code + Client ID + Client Secret an
https://{shop}/admin/oauth/access_token, um das Offline-Zugriffstoken zu erhalten
- Das Token wird AES-256-verschlüsselt für den Mandanten gespeichert; Webhook-Abonnements und wiederkehrende Sync-Hangfire-Jobs werden registriert
- AdlerDo leitet den Händler auf die eingebettete Admin-URL weiter
10.3 Die Installation überprüfen
Nach dem Handshake:
- Bestätigen Sie, dass eine neue
ShopifyConnection-Entität in der Mandantendatenbank mit einem nicht-null EncryptedAccessToken und der gewährten Scope-Liste existiert
- Bestätigen Sie, dass die wiederkehrenden Jobs (
SyncShopifyOrdersV2026, SyncShopifyProductsV2026) in Hangfire unter dem neuen Mandanten-Bezeichner registriert sind
- Lösen Sie einen Test-Webhook aus dem Shopify-Admin aus und bestätigen Sie, dass der AdlerDo-Handler ihn ohne HMAC-Fehler verarbeitet
Anhang A — Häufig von AdlerDo verwendete Scopes
| Scope |
Zweck in AdlerDo |
read_products, write_products |
Katalogsynchronisierung: Produkte und Varianten aus Odoo oder JTL-Wawi anlegen/aktualisieren |
read_orders, write_orders |
Bestellungen in AdlerDo abrufen und Bestellbearbeitungen / Fulfillments zurückspielen |
read_inventory, write_inventory |
Bestandssynchronisierung pro Standort |
read_locations |
Fulfillment-Standorte für Bestand und Versand auflösen |
read_fulfillments, write_fulfillments |
Fulfillments erstellen und Sendungsverfolgungsnummern von Carriern übermitteln: DHL, GLS, DPD, DB Schenker |
read_assigned_fulfillment_orders, write_assigned_fulfillment_orders |
Erforderlich, wenn AdlerDo als registrierter Fulfillment-Dienst agiert |
read_customers, write_customers |
Kundensynchronisierung und B2B-Segmentierung |
read_shipping |
Carrier- und Zonenkonfiguration für die Tarifberechnung auslesen |
read_app_proxy, write_app_proxy |
Erforderlich für die eingebetteten Admin-Proxy-Routen |
read_analytics |
Reporting-Dashboards im eingebetteten Admin |
Anhang B — Fehlerbehebung
Installations-Redirect gibt 401 / Invalid HMAC zurück
Ursache: Das Client Secret in der AdlerDo-Konfiguration stimmt nicht mit dem Secret in den Settings überein, oder das Secret wurde rotiert, ohne neu zu deployen.
Maßnahme: Kopieren Sie das Secret von der Settings-Seite im Dev Dashboard und deployen Sie neu.
OAuth-Callback gibt 'redirect_uri is not whitelisted' zurück
Ursache: Die Callback-URL ist nicht im Feld "Redirect URLs" der aktiven Version vorhanden.
Maßnahme: Öffnen Sie die aktive Version, fügen Sie die URL hinzu, veröffentlichen Sie eine neue Version und wiederholen Sie die Installation.
Shop wird installiert, aber es erscheinen keine Hangfire-Jobs
Ursache: Der OAuth-Code-Austausch war erfolgreich, aber der Post-Install-Bootstrap ist fehlgeschlagen (z. B. Mandanten-Provisionierung).
Maßnahme: Prüfen Sie die AdlerDo-Logs rund um den Zeitstempel der Installation; der ShopifyInstallController gibt pro Phase ein Information-Log und ein Error-Log mit dem fehlerhaften Schritt aus.
Webhook-Zustellungen schlagen mit HMAC-Fehlern fehl
Ursache: AdlerDo hat den Webhook-HMAC über einen geparsten Payload statt über den Raw-Body berechnet.
Maßnahme: Bestätigen Sie, dass die Request-Middleware den rohen Request-Body vor dem Model-Binding für die Routen /api/shopify/webhooks/* puffert.
Händler meldet fehlende Daten nach dem Hinzufügen eines Scopes
Ursache: Der Shop wurde gegen eine ältere Version installiert, die den Scope nicht enthielt.
Maßnahme: Lösen Sie eine Weiterleitung zur Neuinstallation aus — AdlerDo erkennt die Scope-Abweichung in der ShopifyConnectionMiddleware und leitet auf den Installationsendpunkt weiter, wo der Händler den neuen Scope genehmigt.