API get orders mit allen wichtigen Infos

Ahoi, vielleicht hat jemand die gleichen Probleme und im besten fall eine Lösung.

Wir holen uns die Bestellungen über die API um diese zu analysieren. Dazu brauchen wir eigentlich nur die Standart infos. id / Bestellnummer / Kosten / gekaufte Artikel (nur die id oder sku) / und den Status von Bezahlung / Lieferung / Bestellung.

An sich nicht viel.

Derzeit holen wir uns die Order über search/order/. Dort gibt es aber nicht alle infos. Also holen wir uns zusätzlich die

order/".$orderID."/state-machine-state
deliveries, lineItems, transactions → das sind am ende 4 abfragen für eine Bestellung. Muss das sein oder gibt es einen vieleinfacheren weg den wir noch nicht in der „doku“ gefunden haben ? Das beste wär wir setzen die felder selber die wir brauchen.

Das haben wir bei zb Produkten über „includes“ => array( „product“ => array( FELDER) ) schon gemacht hat auch geklappt. Bei den order leider nicht weil die felder an sich ja keine info haben sondern nur die URL zum feld (zb. state-machine-state).

Hallo,

konntet ihr dafür bereits eine Lösung finden?

LG, Gean

Leider nicht → gleiche bei get Articles - dort holen wir uns auch mehrere abfragen für einfache infos… Die API is super schnell daher noch ok - aber ich denke es gibt einen Trick den wir noch nicht kennen.

genau dafür gibt die associaations. Damit werden dann die verbundenen Details geholt, z.B. den Kunden, und die darum gebundenen Adressen und auch die „Klarnamen“ des Status. Da geht dann auch hierarchisch. Also z.B. das Land unter der Adresse unter dem Kunden.

herzlichst

CH

Ahoi chamaw,

vielen Dank für Deine Antwort - wenn ich das richtig gelesen hab stimmst du uns zu, dass es einfach mehrere aufrufe in der API geben muss um alle infos zu bekommen. Also es gibt keine Möglichkeit einen Aufruf mit bestimmten parameter ähnlich „include adresse, include alle artikel include xxx“ um so alle benötigten infos in einem aufruf zu holen.

sorry für die späte Antwort. DOCH es gibt dafür einen Weg die Daten zu inkludieren. Dafür werden die associations genutzt. https://shopware.stoplight.io/docs/admin-api/ZG9jOjEyMzA4NTUw-associations

wenn Du mir sagst mit welche Sprache / Bibliothek gearbeitet wird, kann das auch noch ein wenig genauer sagen.

Uh! Wau - also ich hab das Problem nur bei den Bestellungen also orders → hier in einem Call Adresse, custom_fields, Artikel und Status zu laden sind bei mir glaub ich 2-3 abfragen derzeit…

Ich schau mir das mal an - Associations is ja hier das richtig google wort

hier mal ein kleiner Ausschnitt aus einem PHP Code :slight_smile:

$criteria->addAssociation('lineItems');
$criteria->addAssociation('lineItems.product');

$criteria->addAssociation('addresses');
// $criteria->addAssociation('addresses.country');
// $criteria->addAssociation('addresses.countryState');
// $criteria->addAssociation('addresses.salutation');

$criteria->addAssociation('deliveries');

$criteria->addAssociation('deliveries.shippingOrderAddress');
// $criteria->addAssociation('deliveries.shippingOrderAddress.country');
// $criteria->addAssociation('deliveries.shippingOrderAddress.countryState');

// brauchen wir aktuell nicht !
// $criteria->addAssociation('documents');
// $criteria->addAssociation('documents.documentType');

$criteria->addAssociation('orderCustomer.customer');
$criteria->addAssociation('orderCustomer.customer.salutation');
$criteria->addAssociation('orderCustomer.customer.group');

// $criteria->addAssociation('salesChannel');
// $criteria->addAssociation('tags');

$criteria->addAssociation('transactions');
$criteria->addAssociation('transactions.paymentMethod');
1 „Gefällt mir“

Ahoi chamaw,

ich glaub Du bist der erste der einfach kurz nen snipped rein kopiert was man einfach 100x schneller versteht als nur eine link zur doku. Mega! Feier ich sehr ! Wirklich vielen Lieben Dank !!! Ich teste das am Wochenende mal…

Danke für die Blumen :slight_smile:

Noch eine kurze Anmerkung zur Performance. Für jeden Abruf der Bestellung nochmal 10 Call hinterher zu fahren, ist natürlich ziemlich irre. sprich das sollte schon immer mit der Association arbeiten. Aber bei kleinen Sets (z.B Anreden, Währungen, Länder, etc.) ist vielleicht einfacher die Listen lokal vorzuhalten und dann die UUID lokal auf die textuellen Werte umzurechnen. Für die verbundenen Daten wie Adressen und Lieferinformationen machen dann die Associations wirklich Sinn.
Bei Kunden wäre das ein Zweifelsfall. Im Realbetrieb hängt das ja vom Business ob man eher Neu-Kunden hat, die 1-2 bestellen oder halt „returning customers“.

Btw: Daneben ist mir von nie klar geworden, warum man Währungen wie EUR, USD, CHF, etc. nicht einfach als Text nutzt, sondern hier künstlich UUID erzeugt. Tatsächlich ist das sogar so, dass sich die UUID von Installation zu Installation unterscheiden dürfen. Gleiches gilt dann auch für Sprachen, Länder, usw.

Tatsächlich ist das Ganze für mich komplett over-engineered …

Aber nun erstmal viel Spass mit Deinen neuen Erkenntnissen.

CH