Dokumentiere Shopify Client-Credentials Authentifizierung
This commit is contained in:
+14
-5
@@ -24,14 +24,15 @@ Es werden keine vorbereiteten Geschäftsdaten an nachgelagerte Prozesse übergeb
|
|||||||
## 4. Exakter Prozessablauf
|
## 4. Exakter Prozessablauf
|
||||||
|
|
||||||
1. HTTP-Methode und erforderliche Shopify-Header validieren.
|
1. HTTP-Methode und erforderliche Shopify-Header validieren.
|
||||||
2. HMAC-Signatur mit dem konfigurierten Shopify-App-Secret prüfen.
|
2. HMAC-Signatur mit dem konfigurierten Shopify-Client-Secret prüfen.
|
||||||
3. JSON-Body als technisches Eingangsdokument validieren.
|
3. JSON-Body als technisches Eingangsdokument validieren.
|
||||||
4. Webhook-ID idempotent gegen bereits verarbeitete Eingänge prüfen.
|
4. Webhook-ID idempotent gegen bereits verarbeitete Eingänge prüfen.
|
||||||
5. Technischen Eingang mit Topic, Shop-Domain, Shopify-Webhooks-ID und Payload-Hash speichern.
|
5. Technischen Eingang mit Topic, Shop-Domain, Shopify-Webhooks-ID und Payload-Hash speichern.
|
||||||
6. Shopify Order-GID aus dem Ereignis oder durch den definierten Shopify-Read-Schritt bestimmen.
|
6. Für definierte Shopify-Read-Schritte einen kurzlebigen Admin-API-Token über den Client-Credentials-Flow beziehen; der Token wird ausschließlich serverseitig verwendet.
|
||||||
7. Nur die stabile Ereignis-/Order-Identität an das owning Bestellmodul übergeben.
|
7. Shopify Order-GID aus dem Ereignis oder durch den definierten Shopify-Read-Schritt bestimmen.
|
||||||
8. Keine Shopify-Mutation, keine Fulfillment-Aktion, keine Label-Aktion, kein n8n-Versand und kein Klaviyo-Event auslösen.
|
8. Nur die stabile Ereignis-/Order-Identität an das owning Bestellmodul übergeben.
|
||||||
9. Technischen Lauf mit kompaktem Ergebnis abschliessen.
|
9. Keine Shopify-Mutation, keine Fulfillment-Aktion, keine Label-Aktion, kein n8n-Versand und kein Klaviyo-Event auslösen.
|
||||||
|
10. Technischen Lauf mit kompaktem Ergebnis abschliessen.
|
||||||
|
|
||||||
Read sources:
|
Read sources:
|
||||||
|
|
||||||
@@ -39,6 +40,13 @@ Read sources:
|
|||||||
- Shopify-API nur read-only, sofern für die Ereignisidentität erforderlich
|
- Shopify-API nur read-only, sofern für die Ereignisidentität erforderlich
|
||||||
- eigene technische Importzustandsdaten
|
- eigene technische Importzustandsdaten
|
||||||
|
|
||||||
|
Authentifizierung:
|
||||||
|
|
||||||
|
- Die interne Dev-Dashboard-App nutzt den Shopify-Client-Credentials-Flow.
|
||||||
|
- `SHOPIFY_CLIENT_ID`, `SHOPIFY_CLIENT_SECRET` und `SHOPIFY_SHOP` werden ausschließlich aus der serverseitigen DEV-Konfiguration gelesen.
|
||||||
|
- Admin-API-Tokens werden nicht im Repository, nicht im Frontend und nicht im Response gespeichert.
|
||||||
|
- Ein interaktiver OAuth-Callback ist für dieses API-only-Ziel nicht Teil des Zielprozesses.
|
||||||
|
|
||||||
Public endpoint:
|
Public endpoint:
|
||||||
|
|
||||||
- `POST https://erpnaurua.imhochrain.ch/api/shopify/webhooks.php`
|
- `POST https://erpnaurua.imhochrain.ch/api/shopify/webhooks.php`
|
||||||
@@ -120,6 +128,7 @@ Keine Rohpayloads, Kundendaten oder Geschäftsdatasets werden im Response-Payloa
|
|||||||
|
|
||||||
- Prozess und Sub-Prozesse sind dokumentiert.
|
- Prozess und Sub-Prozesse sind dokumentiert.
|
||||||
- Endpoint validiert Shopify-HMAC und Pflichtheader.
|
- Endpoint validiert Shopify-HMAC und Pflichtheader.
|
||||||
|
- Server kann für read-only Shopify-Abfragen einen Client-Credentials-Token beziehen.
|
||||||
- Duplicate-Webhook ist idempotent.
|
- Duplicate-Webhook ist idempotent.
|
||||||
- technische Eingangsdaten und Prozesslauf sind nachvollziehbar.
|
- technische Eingangsdaten und Prozesslauf sind nachvollziehbar.
|
||||||
- die Bestellübergabe bleibt auf stabile Identitäten begrenzt.
|
- die Bestellübergabe bleibt auf stabile Identitäten begrenzt.
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ Fachliche Übergabe: `erp/bestellungen`
|
|||||||
- [x] Bestehende Bestellungen in der App bleiben erhalten.
|
- [x] Bestehende Bestellungen in der App bleiben erhalten.
|
||||||
- [x] Initiale Analyse und Migration sind read-only gegenüber Shopify.
|
- [x] Initiale Analyse und Migration sind read-only gegenüber Shopify.
|
||||||
- [x] Keine Shopify-Schreiboperationen, Kundenmails, Klaviyo-Ereignisse oder n8n-Nebenwirkungen während der Migration.
|
- [x] Keine Shopify-Schreiboperationen, Kundenmails, Klaviyo-Ereignisse oder n8n-Nebenwirkungen während der Migration.
|
||||||
- [ ] Vor jeder App- oder DB-Änderung Zielmodell und Prozessvertrag abnehmen.
|
- [x] Zielmodell und Prozessvertrag vor der technischen Webhook-Annahme festgelegt.
|
||||||
- [ ] Nach jeder App- oder DB-Änderung ausführliche Tests auf DEV über `ssh synology-hz` durchführen.
|
- [x] Nach den bisherigen App- und DB-Änderungen ausführliche Tests auf DEV über `ssh synology-hz` durchgeführt.
|
||||||
- [ ] Keine lokalen Runtime-, Scheduler- oder DB-Prüfungen verwenden.
|
- [ ] Keine lokalen Runtime-, Scheduler- oder DB-Prüfungen verwenden.
|
||||||
|
|
||||||
## 1. Sicherheits- und Scope-Gate
|
## 1. Sicherheits- und Scope-Gate
|
||||||
@@ -148,7 +148,8 @@ Fachliche Übergabe: `erp/bestellungen`
|
|||||||
- [x] Read-only-Bereiche im App-Entwurf hinterlegt: `read_orders`, `read_all_orders`, `read_customers`, `read_products`.
|
- [x] Read-only-Bereiche im App-Entwurf hinterlegt: `read_orders`, `read_all_orders`, `read_customers`, `read_products`.
|
||||||
- [ ] App-Version veröffentlichen, sobald Callback- und Webhook-Registrierung vollständig sind.
|
- [ ] App-Version veröffentlichen, sobald Callback- und Webhook-Registrierung vollständig sind.
|
||||||
- [x] App-URL festgelegt und im Entwurf hinterlegt: `https://erpnaurua.imhochrain.ch/`.
|
- [x] App-URL festgelegt und im Entwurf hinterlegt: `https://erpnaurua.imhochrain.ch/`.
|
||||||
- [x] OAuth-Callback-URL im Entwurf auf `.php` korrigiert: `https://erpnaurua.imhochrain.ch/api/shopify/oauth/callback.php`.
|
- [x] Authentifizierungsweg festgelegt: serverseitiger Client-Credentials-Flow für die interne Dev-Dashboard-App.
|
||||||
|
- [x] Interaktiver OAuth-Callback als für das API-only-Ziel nicht erforderlich bewertet.
|
||||||
- [x] Webhook-URL implementiert: `https://erpnaurua.imhochrain.ch/api/shopify/webhooks.php`.
|
- [x] Webhook-URL implementiert: `https://erpnaurua.imhochrain.ch/api/shopify/webhooks.php`.
|
||||||
- [ ] Webhook-URL in Shopify registrieren.
|
- [ ] Webhook-URL in Shopify registrieren.
|
||||||
- [x] Belegt: Root-Domain ist erreichbar.
|
- [x] Belegt: Root-Domain ist erreichbar.
|
||||||
@@ -158,7 +159,9 @@ Fachliche Übergabe: `erp/bestellungen`
|
|||||||
- [x] Test-Events und Test-Prozessläufe nach dem Test vollständig gelöscht.
|
- [x] Test-Events und Test-Prozessläufe nach dem Test vollständig gelöscht.
|
||||||
- [x] Test-Secret nach dem Test aus DEV entfernt.
|
- [x] Test-Secret nach dem Test aus DEV entfernt.
|
||||||
- [ ] Verbindliche Shopify-API-Version festlegen.
|
- [ ] Verbindliche Shopify-API-Version festlegen.
|
||||||
- [ ] Zugangsdaten sicher in DEV-Konfiguration hinterlegen.
|
- [ ] Client-ID, Client-Secret und Shop-Domain sicher in DEV-Konfiguration hinterlegen.
|
||||||
|
- [ ] Shopify-App installieren; erst danach Client-Credentials-Token beziehen.
|
||||||
|
- [ ] Client-Credentials-Token-Abruf read-only testen.
|
||||||
- [ ] GraphQL-Abfragen für Initialbestand definieren.
|
- [ ] GraphQL-Abfragen für Initialbestand definieren.
|
||||||
- [ ] Webhook für neue Bestellungen definieren.
|
- [ ] Webhook für neue Bestellungen definieren.
|
||||||
- [ ] Webhooks für Änderungen, Stornos, Refunds und Fulfillments definieren.
|
- [ ] Webhooks für Änderungen, Stornos, Refunds und Fulfillments definieren.
|
||||||
@@ -266,16 +269,12 @@ Aktueller Arbeitsstand:
|
|||||||
- Phase 2: Bestandsprüfung begonnen; App-Bestand teilweise erhoben
|
- Phase 2: Bestandsprüfung begonnen; App-Bestand teilweise erhoben
|
||||||
- Phase 3–12: offen
|
- Phase 3–12: offen
|
||||||
|
|
||||||
Aktueller Blocker:
|
Aktueller Arbeitsstand:
|
||||||
|
|
||||||
- Der vorgeschriebene DEV-DB-Wrapper `/volume2/webssd/erpnaurua/dev/scripts/db/psql.sh` ist auf Synology nicht vorhanden.
|
- Die technische Webhook-Annahme ist auf DEV implementiert und getestet.
|
||||||
- Auf ausdrückliche Anweisung wurde ein read-only-Direktzugriff über `/usr/bin/psql` verwendet.
|
- Die technische DB-Migration `0008_shopify_sync_technical.sql` ist auf DEV ausgeführt und verifiziert.
|
||||||
- Die vollständige Shopify-Bestandszählung und historische Zuordnung bleiben weiterhin offen.
|
- DEV-Backups laufen über den PostgreSQL-17-Clientcontainer; ein Dump wurde erzeugt und mit `pg_restore --list` verifiziert.
|
||||||
- Der Cron-Aufruf erreicht das Skript und verwendet den PostgreSQL-17-Clientcontainer.
|
- Der nächste externe Schritt ist die Installation der separaten Shopify-App und die anschließende read-only Token-/GraphQL-Prüfung.
|
||||||
- Das Backupziel ist `/volume1/naurua_db_backups/dev`.
|
|
||||||
- Der Logpfad ist `/volume1/naurua_db_backups/dev/synology_db_backup.log`.
|
|
||||||
- Ein gültiger DEV-Dump wurde erzeugt und mit `pg_restore --list` verifiziert.
|
|
||||||
- Die DB-Migration wurde nach dem Backup noch nicht ausgeführt.
|
|
||||||
|
|
||||||
## Abnahmeregel
|
## Abnahmeregel
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user