Trackingdaten per REST API übergeben endet in "should not be empty"

Hi, folgende Daten senden wir an die REST API, es meckert aber, dass noch weitere Daten benötigt werden. Ich finde in der Doku leider nichts dazu, kann mir jemand mehr dazu sagen?

Payload:

PATCH https://shopware6.xxxxx.com/api/order/b8bedde4699f406e97db011c17636a34

{
    "id": "b8bedde4699f406e97db011c17636a34", 
    "deliveries": [
        {
            "id": "2099b15b2f9a4e1cbf39a0803438ca38", 
            "trackingCodes": [
                "1234567",
                "12345678"
            ]
        }
    ]
}

Response:

{
    "errors": [
        {
            "code": "c1051bb4-d103-4f74-8988-acbcafc7fdc3",
            "status": "400",
            "detail": "Dieser Wert sollte nicht leer sein.",
            "template": "This value should not be blank.",
            "meta": {
                "parameters": {
                    "{{ value }}": "null"
                }
            },
            "source": {
                "pointer": "/0/deliveries/0/shippingOrderAddressId"
            }
        },
        {
            "code": "c1051bb4-d103-4f74-8988-acbcafc7fdc3",
            "status": "400",
            "detail": "Dieser Wert sollte nicht leer sein.",
            "template": "This value should not be blank.",
            "meta": {
                "parameters": {
                    "{{ value }}": "null"
                }
            },
            "source": {
                "pointer": "/0/deliveries/0/shippingMethodId"
            }
        },
        {
            "code": "c1051bb4-d103-4f74-8988-acbcafc7fdc3",
            "status": "400",
            "detail": "Dieser Wert sollte nicht leer sein.",
            "template": "This value should not be blank.",
            "meta": {
                "parameters": {
                    "{{ value }}": "null"
                }
            },
            "source": {
                "pointer": "/0/deliveries/0/stateId"
            }
        },
        {
            "code": "ad32d13f-c3d4-423b-909a-857b961eb720",
            "status": "400",
            "detail": "Dieser Wert sollte nicht null sein.",
            "template": "This value should not be null.",
            "meta": {
                "parameters": {
                    "{{ value }}": "null"
                }
            },
            "source": {
                "pointer": "/0/deliveries/0/shippingDateEarliest"
            }
        },
        {
            "code": "ad32d13f-c3d4-423b-909a-857b961eb720",
            "status": "400",
            "detail": "Dieser Wert sollte nicht null sein.",
            "template": "This value should not be null.",
            "meta": {
                "parameters": {
                    "{{ value }}": "null"
                }
            },
            "source": {
                "pointer": "/0/deliveries/0/shippingDateLatest"
            }
        }
    ]
}

/order-delivery/{id} hat eine eigene URL.

Ah verstehe, tausend Dank. Das ist ja allerhand was man da hin senden muss. Ohweia. NIx mit einfach Tracking senden

Das sollte reichen. Du hast einfach die falsche URL verwendet.

Danke, klappt leider nicht:

{
    "errors": [
        {
            "status": "500",
            "code": "FRAMEWORK__WRITE_TYPE_INTEND_ERROR",
            "title": "Internal Server Error",
            "detail": "Expected command for \"Shopware\\Core\\Checkout\\Order\\Aggregate\\OrderDelivery\\OrderDeliveryDefinition\" to be \"Shopware\\Core\\Framework\\DataAbstractionLayer\\Write\\Command\\UpdateCommand\". (Got: Shopware\\Core\\Framework\\DataAbstractionLayer\\Write\\Command\\InsertCommand)",
            "meta": {
                "parameters": {
                    "definition": "Shopware\\Core\\Checkout\\Order\\Aggregate\\OrderDelivery\\OrderDeliveryDefinition",
                    "expectedClass": "Shopware\\Core\\Framework\\DataAbstractionLayer\\Write\\Command\\UpdateCommand",
                    "actualClass": "Shopware\\Core\\Framework\\DataAbstractionLayer\\Write\\Command\\InsertCommand"
                }
            }
        }
    ]
}

Keines der beiden Payload klappt:

{
    "id": "b8bedde4699f406e97db011c17636a34",   //ID der Bestellung auch wenn ich sie weglasse, klappt es nicht
    "deliveries": [
        {
            "id": "2099b15b2f9a4e1cbf39a0803438ca38", //ID von zb DHL
            "trackingCodes": [
                "1234567",
                "12345678"
            ]
        }
    ]
}
{
    "trackingCodes": [
        "1234567",
        "12345678"
    ]
}

Hast du noch eine Idee?

Einfach im Backend den Tracking Code einer Lieferung zuordnen und im Browser das Payload ansehen.

Hab ich schon geschaut. Es sendet folgenden Body, aber dennoch bekomme ich die og Fehlermeldung, wenn ich es mit Postman sende.

{
    "id": "b8bedde4699f406e97db011c17636a34",
    "versionId": "1bf92043a88e4d0588ec64419354d609",
    "deliveries": [
        {
            "id": "6402578cedbc4fdc80c568d0bb3a8d08",
            "versionId": "1bf92043a88e4d0588ec64419354d609",
            "trackingCodes": [
                "444",
                "44",
                "4"
            ]
        }
    ]
}

Edit, es muss gegen den /order Endpoint geschickt werden, nicht gegen /order-delivery

Danke Dir :slight_smile:

Hast du ne Idee, was das für eine ID ist? Ich tippe mal auf den Versanddienstleister finde den aber nirgendwo

        "id": "6402578cedbc4fdc80c568d0bb3a8d08",

Wenn du es an Order sendest, dann wird es die Order-ID sein.

Die ist es leider nicht
image

Wenn ich /order/xxxx/deliveries anfrage, bekomme ich wohl die nummer wie es scheint

Habe bei deinem vorherigen Post übersehen, dass es innen noch eine zweite ID gibt.

Das was du markiert hast ist die Delivery Id. Eine Bestellung kann theoretisch mehrere Pakete/Lieferungen enthalten, daher benötigt es die Delivery Id, um die Lieferung identifizieren zu können.

Die hole ich jetzt über /Order/ xxxxxx/deliveries gibt es einen besseren weg?

Es scheint als würde das mit jeder Bestellung direkt angelegt werden dieses delivery Objekt