Liquid, JavaScript, Themes
Hey,
ich bin leider kein erfahrener Webentwickler, deswegen frage ich jetzt hier mal, ob sich jemand in dem Thema auskennt.
Mein Wws (Warenwirtschaftssystem) stellt seit kurzer Zeit API E-Commerce Verbindungen zur verfügung. Ich habe eine Dokumentation und alle nötigen Webhooks/API Urls usw. erhalten.
Jetzt zu der Frage:
1. Ich muss mich jedes mal mit einen Bearer Token verifizieren, der nur 24 Stunden gültig ist.
Diesen frage ich gerade immer mit Postman ab.
POST /api/public/token HTTP/1.1
Host: api.test.com
Content-Type: application/json
{
"client_id": "{{client_id}}",
"client_secret": "{{client_secret}}"
}
Dies funktioniert auch gut, aber das sollte automatisch laufen. (oder über Webhooks, aber dazu später.)
Weis jemand, ob es da vielleicht eine Lösung gibt, mit der man diesen dann als Variable in die weiteren Anfragen einbauen kann?
2. Ich würde gerne das System so verbinden, dass es das Inventar der Produkte alle 12 Stunden ca. abgleicht. (Dies hätte mit der App Stocksync gut funktioniert allerdings habe ich da das Problem mit dem Token. Mit der App Mesa Workflow müsste das eigentlich auch funktionieren, aber da bekomme ich auch keinen Token zurück, auch wenn ich per API davor Anfrage. Error 429 Too many requests aber in Postman funktionierts super.)
Dazu gibt es vom WWs eine Abfrage:
https://api.test.com/api/public/dealers/{dealerId}/locations/{locationId}/inventory?includeZeroQuantity=true&quantityUpdatedSince=2021-01-01T10%3A11%3A33-05%3A00
Diese kommen dann folgend zurück:
[
{
"dealerId": 0,
"locationId": 0,
"upc": "string",
"sku": "string",
"quantity": 0
},
...
]
Jetzt müsste ich quasi die sku und die quantity mit dem Shopify Store verknüpfen. Location habe ich nur eine. Aber wie? (Würde auch mit Mesa funktionieren, aber auch hier wieder das Problem mit dem Token.)
(Webhooks: Würde theoretisch auch in Mesa funktionieren, allerdings gibt es dort keine richtige Weiterverarbeitung zu Shopify für viele Artikel gleichzeitig. Alternativen kenne ich leider nicht)
3. Das Thema Bestellungen. Das habe ich in Mesa ganz gut hinbekommen, aber funktioniert auch wieder nichtmehr, wegen dem Token.
Der Post über Http:
https://api.test.com/api/public/dealers/{dealerId}/locations/{locationId}/websales
mit Body:
{
"webSaleId": "string",
"testWebSale": true,
"shippingAddress": {
"company": "string",
"firstName": "string",
"lastName": "string",
"email": "string",
"phone": "string",
"street": "string",
"street2": "string",
"locality": "string",
"region": "string",
"postalCode": "string",
"countryName": "string",
"countryCode": "string"
},
"billingAddress": {
"company": "string",
"firstName": "string",
"lastName": "string",
"email": "string",
"phone": "string",
"street": "string",
"street2": "string",
"locality": "string",
"region": "string",
"postalCode": "string",
"countryName": "string",
"countryCode": "string"
},
"items": [
{
"name": "string",
"upc": "string",
"sku": "string",
"price": 332.87,
"quantity": 177,
"taxes": [
{
"taxType": "string",
"amount": 760.82,
"rate": 0.055
}
]
}
],
"shippingLines": [
{
"shippingType": "string",
"carrier": "string",
"amount": 730.76,
"taxes": [
{
"taxType": "string",
"amount": 192.12,
"rate": 0.055
}
],
"trackingUrl": "string",
"trackingNumber": "string"
}
],
"currencyCode": "string",
"taxesRemitted": true,
"payments": [
{
"amount": 965.39,
"paymentType": "string",
"notes": "string"
}
],
"customerNotes": "string",
"useLocationTaxes": true,
"webSaleType": "string"
}
In Mesa habe ich das alles mit Variablen gefüllt und es hat so auch funktioniert, wenn dieser sch*** Token nicht wäre ( :
Vielleicht kann mir von euch wer weiterhelfen.
Vielen Dank schonmal!
Gruß,
Flo
Hey @flopoel
Danke für den Code und diesen habe ich jetzt in Spoiler
Tags eingeklammert um die Sichtbarkeit zu verbessern.
Der ganze obige Sachverhalt lässt sich also in drei Hauptbereiche unterteilen: Automatisierung der Token-Verwaltung, Inventarabgleich, und Bestellungsintegration zwischen deinem Warenwirtschaftssystem (WaWi) und Shopify.
Automatisierung der Token-Verwaltung
Um den Prozess der Token-Verwaltung zu automatisieren, könntest du ein Skript oder eine kleine Anwendung schreiben, die regelmäßig einen neuen Token anfordert und diesen dann für nachfolgende Anfragen speichert und als Cron-Job (auf einem Linux-Server) oder als geplanter Task (auf einem Windows-Server) ausführt, um sicherzustellen, dass immer ein gültiger Token verfügbar ist. Hier ist ein Pseudocode den ich aus unserer Entwickler Doku und API Forum jetzt zusammengebastelt habe:
Funktion holeNeuenToken():
Sende eine POST-Anfrage an /api/public/token mit client_id und client_secret
Speichere den erhaltenen Token für die nächsten Anfragen
Alle 24 Stunden:
holeNeuenToken()
Einfach eine Middleware im System einrichten, die vor jeder Anfrage prüft, ob der Token noch gültig ist, und bei Bedarf einen neuen anfordert.
Inventarabgleich
Für den Inventarabgleich da Stocksync und Mesa Workflow potenziell passende Tools wären, aber Probleme mit der Token-Verwaltung bestehen, wäre der erste Schritt, das Token-Problem zu lösen, wie oben beschrieben. Sobald du eine zuverlässige Methode zur Verwaltung des Tokens hast, kannst du einen automatisierten Prozess einrichten, der alle 12 Stunden läuft, die Inventardaten von deinem WaWi über die API abruft, die erhaltenen Daten mit dem Inventar in Shopify abgleicht und entsprechend aktualisiert.
Einfach Shopify's Admin API verwenden, um Produkte zu aktualisieren. Hierfür musst du ggf. die Produkt-SKUs deinem Shopify-Produkt-ID zuordnen, um die Inventarmengen entsprechend anzupassen.
Bestellungsintegration
Das Handling von Bestellungen und die Synchronisation mit deinem WaWi könnte ähnlich automatisiert werden mit Webhooks, um über neue Bestellungen informiert zu werden, und verwende dann die Details dieser Bestellungen, um über die API deines WaWi entsprechende Bestellungen zu erstellen. Dafür gibt es ja Bibliotheken und Frameworks, die dir die Arbeit mit APIs und die Automatisierung solcher Aufgaben super helfen kann, wie z.B. requests
in Python für API-Anfragen oder node-schedule
in Node.js für geplante Aufgaben.
Hier ein paar weiterer Threads zum Thema die gefunden habe:
Serverseitige Anfragen für API-Calls: Ein häufiger Ansatz besteht darin, die API-Anfragen serverseitig durchzuführen, um CORS-Probleme zu vermeiden und die Sicherheit der Anmeldedaten zu gewährleisten. Dies kann durch die Verwendung von Serverless-Funktionen wie Vercel oder Netlify Functions gehen.
Speichern des Access Tokens im Backend: Ein Shopify-Partner hat einen Weg gefunden, das durch Shopify generierte Access Token im eigenen Backend-Service zu speichern. Dazu wurde ein spezifischer Endpunkt genutzt, der das Token abruft und für nachfolgende Anfragen verwendet.
Verwaltung von Offline und Online Tokens: Eine weitere Diskussion im Shopify-Forum beschreibt einen Ansatz zur Handhabung sowohl offline als auch online Tokens durch die Registrierung von Webhooks und die Speicherung der Tokens in einer Datenbank für den späteren Gebrauch. Dies ermöglicht es, sowohl auf langfristige als auch auf kurzfristige Tokens für API-Anfragen zuzugreifen.
Hoffe das hilft dir weiter - lass wissen falls nicht! 😉
---
Habt ihr auch den Shop auf Ostern eingestellt das jetzt um die Ecke liegt? Warum nicht eine Ostereierjagd 🐣 in das Shop einbauen, um deinen Kunden etwas Gamification und Fun im Shop anzubieten? Gerne kann ich bei Interesse Tipps dazu geben!
Hast du weitere Fragen zum Shop? Gebe einfach ein Suchbegriff oben in der Suchleiste der Community Landingpage ein, denn das Thema haben wir sehr wahrscheinlich schon besprochen. Halte bitte Ausschau in deiner E-Mail auf Notifications zu Antworten auf deine Fragen in der Community.
Gabe | Social Care @ Shopify
- War meine Antwort hilfreich? Klicke Like um es mich wissen zu lassen!
- Wurde deine Frage beantwortet? Markiere es als Akzeptierte Lösung
- Um mehr zu erfahren, besuche das Shopify Help Center oder den Shopify Blog
Vielen Dank Gabe!
Bei dem Punkt Bestellungen und WaWi, ist es so, dass die Bestellungen nicht vom WaWi kommen, sondern vom Shopify Store. Also der Store soll die Api auf den Endpunkt vom WaWi schicken.
Lg,
Flo
Ok dann können euch die Webhooks ggf. helfen. Hast du die ausprobiert, und wenn ja und sie haben nicht helfen können, wie genau nicht?
Für Bestellungen wäre der Event wahrscheinlich orders/create
, welches jedes Mal ausgelöst wird, wenn eine Bestellung in Shopify erstellt wird.
Hoffe das hilft dir weiter! 😉
Gabe | Social Care @ Shopify
- War meine Antwort hilfreich? Klicke Like um es mich wissen zu lassen!
- Wurde deine Frage beantwortet? Markiere es als Akzeptierte Lösung
- Um mehr zu erfahren, besuche das Shopify Help Center oder den Shopify Blog
Teil 2 - Wie die Prinzipien des UX-Designs dir dabei helfen können einen großartigen Shop ...
By Kai Sep 16, 2024Teil 1 - Wie die Prinzipien des UX-Designs dir dabei helfen können einen großartigen Shop ...
By Kai Sep 9, 2024Anpassungen des benutzerdefinierten Codes an Shopify-Themes (CSS) leicht gemachtIn diesem...
By Gabe Aug 28, 2024