Bestellstatus (order.state) per API ändern

Hallo!

Wie man den Lieferstatus ändert, hat ansgar schon beschrieben.

Aber wie ändere ich den Bestellstatus?

Laut der “ausführlichen” Doku soll es mit einer Action Route folgendermaßen gehen: POST /api/v{version}/_action/order/{orderId}/state/{transition}

Den “transition” Wert habe ich mir bei GitHub raus gesucht.

Meine URI sieht dann so aus: 
PostAsync: https://{MeinShop}/api/v3/_action/order/{MeineOrderId}/state/in_progress

Wenn ich hiermit versuche, den Status von “open” auf “in_progress” zu ändern, erhalte ich den Fehler: 500 Internal Server Error

Kann jemand helfen?

Danke!

 

Aha, “hanshuckebein” hat es erklärt: Per API Lieferstatus einer Bestellung ändern - Shopware Community Forum Danke noch einmal!

Der Grund ist, “in_progress” existiert in der Tabelle “state-machine-transition” nicht. Mit “process” z.B. funktioniert es bei mir.

Schade, dass dies in der Doku nicht beschrieben wird. Man verbrät viel Zeit…

irgendwie funzt das nicht, wenn ich z.B. der Orderstatus via API ändern will, bspw:

{meineURL}/api/v3/_action/order/8793ab3829a04b72b2a02c88904209b4/state/in_progress

komt folgende Fehlermeldung

 

{

„errors“: [

{

„status“: „400“,

„code“: „SYSTEM__ILLEGAL_STATE_TRANSITION“,

„title“: „Bad Request“,

„detail“: "Illegal transition „in_progress“ from state „7e87ade3b8a5449ba81d7d22675d4f34“. Possible transitions are: ",

„meta“: {

„parameters“: {

„transition“: „in_progress“,

„currentState“: „7e87ade3b8a5449ba81d7d22675d4f34“,

„possibleTransitionsString“: „“,

„possibleTransitions“:

}

}

}

]

}

Die orderStates für die URL müssten doch die sein? https://github.com/shopware/platform/blob/master/src/Core/Checkout/Order/OrderStates.php

Hallo Liverson,

ja, müsste man meinen. Für die ActionRoutes sind die es aber wohl nicht.
Die gültigen Werte (action_name) findet man in der Tabelle /api/v3/state-machine-transition
und die dazugehörige stateMachineId über den TechnicalName in der Tabelle /api/v3/state-machine.

(So etwas findet man leider nicht in der Doku. Warum auch. So kann man wenigstens Wochen verbraten, um das heraus zu finden…)

1 „Gefällt mir“

Hi, ich habs grade rausgefunden, was das Problem war:
Man muss die Reihenfolge der Stati beachten, man darf nur immer den nächsten Status machen, also von open => process od. cancel => complete od. cancel => b. Bed. reopen

1 „Gefällt mir“

Hallo, habe nun das gleiche Probleme bzw. ein anderes. Der Status wird zwar geändert, bekomme aber dennoch ein 500 Fehler zurück.

 

{
    "errors": [
        {
            "code": "0",
            "status": "500",
            "title": "Internal Server Error",
            "detail": "Call to a member function search() on null"
        }
    ]
}

 

Hallo, wie sieht denn der Aufruf aus?

@Reimers schrieb:

Hallo, wie sieht denn der Aufruf aus?

Mein Aufruf sieht so aus:

api/v3/_action/order/46b71ca9dafb45ad9717d82d97b2777c/state/process

 Je nach Bestellung wenn process ist, wird complete genutzt.

auch gecheckt ob die OrderId 100% korrekt ist?

@Liverson schrieb:

auch gecheckt ob die OrderId 100% korrekt ist?

Ja OrderId war richtig. Fehler aber gefunden, ein Plugin hat die OrderConverter class extended wo die Variable orderAddressRepository als Privat deklariert wurde. Und im Extend wird nicht der Konstruktor der Klass OrderConverter aufgerufen, weshalb die Variable nie gesetzt wurde.