Recalculate via API

Hallo,

ich würde gerne über die API per POST an /api/v3/_action/order/e12f4565aa2b40c0873b565e7f2f7b38/recalculate die Bestellung neu berechnen lassen, nachdem ich retournierte Ware von der Bestellung runter genommen habe. Die Modifikation der Bestellung klappt, jedoch aktualisiert sich der Betrag nicht. Wenn ich daher den oben gannenten POST ausführe, bekomme ich folgende Meldung:

{

"errors": [

    {

        "status": "400",

        "code": "CHECKOUT__ORDER_RECALCULATION_FAILED",

        "title": "Bad Request",

        "detail": "Order with id \"e12f4565aa2b40c0873b565e7f2f7b38\" could not be recalculated. Live versions can't be recalculated. Please create a new version.",

        "meta": {

            "parameters": {

                "orderId": "e12f4565aa2b40c0873b565e7f2f7b38",

                "details": "Live versions can't be recalculated. Please create a new version."

            }

        }

    }

]

}

Hat jemand eine Idee wie ich die erneute Berechnung anstoßen kann? Das Backend selbst kanns ja scheinbar mit dem API Request.

Vielen Dank

Wenn du eine Bestellung im Admin editierst, kannst du dir ja die API-Requests im Browser ansehen. Der Admin spricht ja auch nur mit der API. Am besten da einfach abschauen, wie das gemacht wird.
Grundsätzlich erzeugt ein „Edit“ eine neue Version der Bestellung, soweit ich das weiß.

Danke @Moritz_Naczenski

Wieso krieg ich dann die geschriebene Fehlermeldung? An der ID der Bestellung ändert sich ja scheinbar nichts. Die API Requests im Browser habe ich zu Testzwecken auch einfach mal in Postman Copy/Pasted. Bekomme ich den selben Fehler.

Änderung an der Bestellung funktioniert, Neukalkulation direkt im Anschluss nicht.

Legst du denn eine neue Version der Order an und arbeitest mit dieser Version?
Das sagt die Fehlermeldung dir ja auch.

Kann dir keine Lösung aufzeigen, aber wenn du es in der gleichen Reihenfolge machst und die entsprechende neue Version UUID mit übergibst, sollte es so funktionieren. Wie du sagst macht der Admin ja das gleiche.

Soweit ich sehe, startet alles mit dem Version Call: /api/v3/_action/version/order/76a466770f8b4189b6ab2085fba25bfd

Beim Editieren im Adminbereich ist mir nach längerem Debugging aufgefallen dass beim /recalculate Request die UUID der neuen Order-Version im Header „sw-version-id“ übergeben wird.

2 „Gefällt mir“

Danke, der Tipp hat mir geholfen :smiley:

Vielen Dank, ich hab echt lange rum probiert :sweat_smile:

Ja genau so. Ich hab damit auch Tage verbracht, nochmal als Recap:

  • Erzeugen einer neuen Version für eine Order
  • Order To Cart
  • Cart editieren
  • Cart To Order
  • Recalc aufrufen
  • Merge Version auf die Live Version

Der Workflow scheint nicht mehr zu gehen…

api/_action/version/order/018b70eb080b71fd84f2a206566d0373

für die Neue version

'api/order/018b70eb080b71fd84f2a206566d0373', [
              'body' => '{
                "id" : "018b70eb080b71fd84f2a206566d0373",
                "lineItems": [{
                    "id" : "018b70eb080b71fd84f2a20650f7dbae",
                    "versionId" : "'. $data['versionId'] .'",
                    "quantity" : 85
                    
                }],

dann änderung der item line

/api/_action/order/018b70eb080b71fd84f2a206566d0373/recalculate?versionId='.$data['versionId'].'

fehlermeldung
[detail] => Order with id 018b70eb080b71fd84f2a206566d0373 can not be recalculated because it is in the live version. Please create a new version

Ich mache es genau so wie es in Admin auch gemacht wird. es wird einfach nicht neu Kalkuliert.

wenn ich mich recht erinnere wird die Version NICHT mit einem CGI Parameter sondern durch einen Header ausgewählt. Schau auch mal im Admin auf die Request Header …