Rest API alle Bestellungsinfos auslesen

Hallo wir versuchen derzeit über die REST Api die Bestellungen auszulesen. Jedoch bekommen wir wenn wir via /api/v3/search/order gehen nur die Kopfdaten der Bestellung. Es fehlen also Artikel Kunde usw. Natürlich könnte man nun mit der Bestellungsid auch die Artikel über /api/v3/search/order/ordernr/line-items herausbekommen, aber ich kann mir nicht vorstellen, dass das der richtige ansatz ist. Denn dann haben wir bald 35 API calls um alle infos einer Bestellung zusammen zu bekommen.

Schau dir den associations Paramter an Shopware 6: Reading entities

1 „Gefällt mir“

Hi Shyim,

 

das mit dem associations hat geklappt. Zumindest alle Infos bis auf Zahlungsbedingung und Versandart. Hier bekomme ich über die Assos nur die IDs der jeweiligen und nicht die Namen.

Ein weitaus schlimmeres Problem ist jedoch, dass ich wenn ich über die assos gehe nicht mehr api/v3/search/order verwenden kann und somit der Filter für alle offenen Bestellungen flöten geht. Gibt es da eine andere Variante?

Würde mich auch interessieren da ich vor einem ähnlichen Situation stehe und alle Bestelldetails in einem Request abfragen möchte.
Dabei geht es mir voirallem auch darum wie ich auch gleich alle aktuellen Bestellstati (Bestell-, Zahlungs- u. Lieferstatus) zurück bekommen kann?

Wir haben uns die letzten Tage auch damit beschäftigt und eine JSON Abfrage erstellt.

Das war in Shopware 5 sehr viel einfacher und sollte eventuell ähnlich der Statusupdates mit eigenem Befehl abrufbar sein.

Hier das Ergebnis:

 { "associations": { "deliveries": { "associations": { "shippingOrderAddress": [] } }, "transactions": { "associations": { "stateMachineState": [] } }, "orderCustomer": {}, "addresses": { "associations": { "country": [] } }, "lineItems": { "associations": { "product": [] } }, "salesChannel": { "associations": { "paymentMethods": [] } }, "stateMachineState": {} }, "filter": [{ "value": "open", "field": "order.stateMachineState.technicalName", "type": "equals" },{ "value": "paid", "field": "transactions.stateMachineState.technicalName", "type": "equals" }], "includes": { "order\_transaction": ["id","stateMachineState"], "order\_customer": ["email"], "order": ["id","orderNumber","createdAt","lineItems","billingAddressId","salesChannelId","addresses","deliveries","salesChannelId","salesChannel","stateMachineState","transactions","orderCustomer","shippingTotal"], "order\_line\_item": ["id","position","quantity","unitPrice","productId","product"], "country": ["iso"], "product": ["productNumber","name"], "sales\_channel": ["id","name","paymentMethodId","paymentMethods"], "order\_address": ["id","firstName","lastName","street","zipcode","city","company","department","countryId","country"], "state\_machine\_state": ["id","technicalName"], "payment\_method": ["id","name","formattedHandlerIdentifier"], "order\_delivery": ["id","shippingOrderAddressId"] } }
1 „Gefällt mir“

Hallo Prochannel,

 

könntest du uns eventuell auch deinen URL Befehl zur verfügung stellen, sodass wir das ebenfalls nutzen können?

Kannst du mit dem JSON Call zusätzlich auch noch kriterien wie status filtern?

Aufruf über die  Standard “Read Entity”.

Wie in der Doku beschrieben.
Überblick über alle abrufbaren Entities: Shopware 6: Reading entities
Endpoint: /api/v3/_info/openapi3.json

Dann Aufruf nachzulesen unter: Shopware 6: Reading entities/Search Endpoint
In dem Fall für Bestellungen: /api/v3/search/order

Der Filter nach Status ist bereits enthalten:

 "filter": [{ "value": "open", "field": "order.stateMachineState.technicalName", //Bestellstatus "type": "equals" },{ "value": "paid", "field": "transactions.stateMachineState.technicalName", // Zahlstatus "type": "equals" }],

 

1 „Gefällt mir“

Hallo Prochannel,

 

also wenn ichs über search/order versuche mit dem JSON Payload bekomme ich trotzdem nur die IDs der jeweiligen unterPunkte raus. Das bringt mir leider recht wenig da ich dann jeweil für jede ID nochmal nen abruf starten müsste.

Bedeutet ich habe Order 123 mit Artikel 25 und 23 und mache api/v3/search/order mit dem von dir geschickten JSON und bekomme nur die IDs unter lineItems raus. oder mache ich was falsch?

Hallo BastianHbner,

wenn du die Bestellungen mit dem JSON aufgerufen hast, erhältst du alle Daten.
Dann müssen anhand der IDs noch die Daten aufbereitet werden.

Also beispielsweise anhand der billingAddressId, die in den Attributen des data-Tags zu finden ist:


Damit das included durchsuchen, um an die Rechnungsadresse zu gelangen.


Manchmal müssen aber auch zwei Relationen verfolgt werden, um an alle Daten zu kommen.

Bspw bei den order_line_items steht erstmal nur Menge und Preis.

Erst durch Verfolgung der „productID“ kann man auch Artikelnummer und Beschreibung abgreifen

Ich hoffe du kommst damit weiter.
Ist halt leider nun aufwendiger als in shopware 5

Hey vielen Dank für die Hilfe. Das hab ich nun soweit verstanden und mit associations auch umgesetzt bekommen. Zumindest auf einer unterebene. Ab der zweiten scheitert es jedoch, da ich dort nichts finde wie die association auszusehen hat.

Ich habe zum Beispiel folgende Asso:

Head:

https://shopware6.next-levels.de/api/v3/search/order

Body:

 “associations”: {

  “deliveries”: {

   “associations”: {

    “shippingOrderAddress”: 

   }},

 “includes”: {

 “order_delivery”: [

   “id”,“shippingOrderAddressId”,“shippingMethodId”]

 }

 

 

damit bekomme ich alle order details und shippingmethod_id. Problem ist, ich bräuchte den Namen der ShippingMethod. Ergo müsste ich irgednwie noch eine unter Association machen um daran zu kommen. Ist das überhaupt möglich?

Hallo,

das solltest du analog zur payment_method hinzufügen.

 associations: ...

 "salesChannel": { "associations": { " **paymentMethods**": [] } },

…includes: …

 "sales\_channel": ["id","name"," **paymentMethodId","paymentMethods**"],

 " **payment\_method**": [**"id","name"** ,"formattedHandlerIdentifier"],

 

Hey Prochannel,

wir würden gerne für den Bestellabruf noch die GP-Gruppe auslesen.
Wenn ich jedoch die association „orderCustomer“:{„associations“:{„customer“:}},
mit rein nehme und das ganze im include „customer“:[„id“,„groupId“], auch noch mit rein nehme, bekomme ich dennoch keine Details des Kunden angezeigt. Hast du eine Idee was ich falsch mache?

Hallo zusammen,
der Response sieht mittlerweile anders aus (es gibt kein „order_line_item“ oder „order_address“ types). Wurde in der Endpoint mit einem Update die Struktur angepasst?

@BastianHbner könntest du den JSON-Body posten mit dem du es geschafft hast die Produkt Daten anzuzeigen? Ich stehe gerade vor demselben Problem und habe es nicht hinbekommen.

1 „Gefällt mir“

@davhol86: Hier ein Aufruf, in dem auch Produktdetails enthalten sind.

{"filter":[{"type":"equals","field":"order.stateMachineState.technicalName","value":"open"}],"associations":{"addresses":{"associations":{"country":[]}},"stateMachineState":{},"transactions":{"associations":{"stateMachineState":[]}},"salesChannel":{"associations":{"paymentMethods":[]}},"deliveries":{"associations":{"shippingOrderAddress":[]}},"orderCustomer":{},"lineItems":{"associations":{"product":[]}}},"includes":{"order":["id","orderNumber","createdAt","lineItems","billingAddressId","salesChannelId","addresses","deliveries","salesChannelId","salesChannel","stateMachineState","transactions","orderCustomer","shippingTotal"],"state_machine_state":["id","technicalName"],"sales_channel":["id","name","paymentMethodId","paymentMethods"],"payment_method":["id","name","formattedHandlerIdentifier"],"order_transaction":["id","stateMachineState"],"order_address":["id","firstName","lastName","street","zipcode","city","company","department","countryId","country","phoneNumber"],"country":["iso"],"order_customer":["email"],"order_delivery":["id","shippingOrderAddressId"],"order_line_item":["id","position","quantity","unitPrice","productId","product"],"product":["productNumber","name"]}}

Vielleicht hilft es etwas weiter.

1 „Gefällt mir“

WOW! Nur wie bekomme ich denn die Adressfelder der ShippingAddress, also Straße etc.?

ist schon enthalten:

1 „Gefällt mir“

neue Version.
Diese beinhaltet nun die korrekte Zahlungs- und Versandart

{
    "associations": {
        "addresses": {
            "associations": {
                "country": []
            }
        },
        "transactions": {
            "associations": {
                "stateMachineState": [],
                "paymentMethod": []
            }
        },
        "salesChannel": {
            "associations": {}
        },
        "deliveries": {
            "associations": {
                "shippingOrderAddress": [],
                "shippingMethod": {
                    "associations": {
                        "deliveryTime": []
                    }
                }
            }
        },
        "orderCustomer": {},
        "lineItems": {
            "associations": {
                "product": []
            }
        }
    },
    "includes": {
        "order": [
            "id",
            "orderNumber",
            "createdAt",
            "lineItems",
            "billingAddressId",
            "salesChannelId",
            "addresses",
            "deliveries",
            "salesChannelId",
            "salesChannel",
            "stateMachineState",
            "transactions",
            "orderCustomer",
            "shippingTotal"
        ],
        "state_machine_state": [
            "id",
            "technicalName"
        ],
        "sales_channel": [
            "id",
            "name"
        ],
        "payment_method": [
            "id",
            "name",
            "formattedHandlerIdentifier"
        ],
        "shipping_method": [
            "id",
            "name",
            "deliveryTimeId",
            "deliveryTime"
        ],
        "order_transaction": [
            "id",
            "stateMachineState",
            "paymentMethodId",
            "paymentMethod"
        ],
        "order_address": [
            "id",
            "firstName",
            "lastName",
            "street",
            "zipcode",
            "city",
            "company",
            "department",
            "countryId",
            "country",
            "phoneNumber"
        ],
        "country": [
            "iso"
        ],
        "order_customer": [
            "email"
        ],
        "order_delivery": [
            "id",
            "shippingOrderAddressId",
            "shippingMethodId",
            "shippingMethod"
        ],
        "order_line_item": [
            "id",
            "position",
            "quantity",
            "unitPrice",
            "productId",
            "product",
            "payload"
        ],
        "product": [
            "productNumber",
            "name"
        ]
    }
}
2 „Gefällt mir“

Das hat mich echt weitergeholfen. Allerdings benötige ich Hilfe beim Auslesen der Kundengruppe des Kunden, sowie das Geburtsdatum. Danke

Wie kann ich denn die „payload“ weiter einschränken? Ich brauche daraus nur 2-3 Felder und nicht den ganzen Rest.
Mir fehlt hier irgendwie der passende „apiAlias“, oder?
Wäre für ein Beispiel dankbar.