Reimers
30. Oktober 2020 um 15:06
1
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!
Reimers
7. Dezember 2020 um 12:46
2
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
Reimers
9. Dezember 2020 um 07:52
4
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"
}
]
}
Reimers
21. Dezember 2020 um 10:53
7
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.
Hi.
For Shopware 6.4, you can change the order status(STATE) as follows:
$response = $this->httpClient->request('POST', $this->baseUri . '/api/_action/order/1fcbw914c1374v4df3994g62f861f974c6b/state/process', [
'headers' => [
'Authorization' => 'Bearer ' . $token,
'Content-Type' => 'application/json'
]
]);