API 500 Response (python3.10)

Hallo liebe Shopware Community,

leider hab ich in Python ein Problem mit dem posten vom body an die Shopware API:

folgenden Fehler erhalte ich

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

Leider konnte ich zu diesem Fehler direkt nichts finden, helft mir bitte ggf. auch beim Googlen wenn ich zu bled dafür bin :wink:

Code den ich verwende ist folgender:

    def transferartikels():
        print("Artikeltransfer wurde gestartet")

        url = "https://tollewebseite.shop/api/product"

        headers = CaseInsensitiveDict()
        bearertoken()
        headers["Authorization"] = "Bearer " + authkey
        headers["Content-type"] = "application/json"
        datas = open("art-import.json", "r").read()
        print("Jsondatei geladen")
        resp = requests.post(url, headers=headers, data=datas)
        print(resp.json())
        print("Aritkeltranfer wurde beendet")
        print("[-------------------------------------------]")

    transferartikels()

JSON Datei die Importiert wird:

{
   "id":"af204985dc6c42e094dca007ccae2070",
   "stock":0,
   "productNumber":"{artnumb}",
   "name":"{artname}",
   "taxId":"9d4a11eeaf3a41bea44fdfb599d57058",
   "manufacturerId":"e31fe228f4b042c1ac2ef61143aa5fb3",
   "price":[
      {
         "currencyId":"b7d2554b0ce847cd82f3ac9bd1c0dfca",
         "net":100,
         "gross":119,
         "linked":true
      }
   ],
   "children":[
      {
         "productNumber":"{artnumb}-99",
         "stock":0,
         "options":[
            {
               "id":"31814c89f6e94b2d99986ad1363dce78"
            }
         ]
      },
      {
         "productNumber":"{artnumb}-22",
         "stock":0,
         "price":[
            {
               "currencyId":"b7d2554b0ce847cd82f3ac9bd1c0dfca",
               "net":100,
               "gross":119,
               "linked":true
            }
         ],
         "options":[
            {
               "id":"fd08f8b6596746129d3fef75eb366389"
            }
         ]
      },
      {
         "productNumber":"{artnumb}-85",
         "stock":0,
         "price":[
            {
               "currencyId":"b7d2554b0ce847cd82f3ac9bd1c0dfca",
               "net":100,
               "gross":119,
               "linked":true
            }
         ],
         "options":[
            {
               "id":"73567c14a5724e5ca253385d56ee9c88"
            }
         ]
      },
      {
         "productNumber":"{artnumb}-48",
         "stock":0,
         "price":[
            {
               "currencyId":"b7d2554b0ce847cd82f3ac9bd1c0dfca",
               "net":100,
               "gross":119,
               "linked":true
            }
         ],
         "options":[
            {
               "id":"cc478939f5f64f2dbfe6d33ae0895b23"
            }
         ]
      },
      {
         "productNumber":"{artnumb}-80",
         "stock":0,
         "price":[
            {
               "currencyId":"b7d2554b0ce847cd82f3ac9bd1c0dfca",
               "net":100,
               "gross":119,
               "linked":true
            }
         ],
         "options":[
            {
               "id":"6da09445b5ef419a8e5b98d0ae3da17b"
            }
         ]
      },
      {
         "productNumber":"{artnumb}-68",
         "stock":0,
         "price":[
            {
               "currencyId":"b7d2554b0ce847cd82f3ac9bd1c0dfca",
               "net":100,
               "gross":119,
               "linked":true
            }
         ],
         "options":[
            {
               "id":"f63285d3f23f441c993a2f2aab499082"
            }
         ]
      },
      {
         "productNumber":"{artnumb}-50",
         "stock":0,
         "price":[
            {
               "currencyId":"b7d2554b0ce847cd82f3ac9bd1c0dfca",
               "net":100,
               "gross":119,
               "linked":true
            }
         ],
         "options":[
            {
               "id":"5503ef20a7424bc58facdac2b8ca6ac5"
            }
         ]
      },
      {
         "productNumber":"{artnumb}-77",
         "stock":0,
         "price":[
            {
               "currencyId":"b7d2554b0ce847cd82f3ac9bd1c0dfca",
               "net":100,
               "gross":119,
               "linked":true
            }
         ],
         "options":[
            {
               "id":"24da21ac840d4abbb358d01bb03ad74c"
            }
         ]
      },
      {
         "productNumber":"{artnumb}-91",
         "stock":0,
         "price":[
            {
               "currencyId":"b7d2554b0ce847cd82f3ac9bd1c0dfca",
               "net":100,
               "gross":119,
               "linked":true
            }
         ],
         "options":[
            {
               "id":"a300f872a68f4f93b1af3d6e1c50e397"
            }
         ]
      }
   ],
   "configuratorSettings":[
      {
         "optionId":"31814c89f6e94b2d99986ad1363dce78"
      },
      {
         "optionId":"fd08f8b6596746129d3fef75eb366389"
      },
      {
         "optionId":"73567c14a5724e5ca253385d56ee9c88"
      },
      {
         "optionId":"cc478939f5f64f2dbfe6d33ae0895b23"
      },
      {
         "optionId":"6da09445b5ef419a8e5b98d0ae3da17b"
      },
      {
         "optionId":"f63285d3f23f441c993a2f2aab499082"
      },
      {
         "optionId":"5503ef20a7424bc58facdac2b8ca6ac5"
      },
      {
         "optionId":"24da21ac840d4abbb358d01bb03ad74c"
      },
      {
         "optionId":"a300f872a68f4f93b1af3d6e1c50e397"
      }
   ],
   "visibilities": [
        { "id": "9d4a11eeaf3a41bea44fdfb599d57058", "salesChannelId": "6d8478bd752d4c17a19ad3f7e6af851a", "visibility": 30 }
    ]
}

LG Ben

Das die Variablen aus der JSON nicht geladen werden ist mir bewusst, jedoch sollte er die artikel doch eigentlich auch mit {artnumb} oder ähnlichem als artikel name anlegen können ?

mein bester Tip wäre, anstelle von POST PATCH zu verwenden, zumindest konnte ich so (zwar nicht über python) ein Produkt per API anlegen.

folgende JSON konnte ich an „shopurl/api/product/96b6cd2880c7416790bb484484b71655“ mit Hilfe von „Insomnia“ erfolgreich an die SW API übertragen

{
    "productNumber" : "SCG9997",
    "stock" : 0, 
    "price" : [
        {
            "currencyId" : "b7d2554b0ce847cd82f3ac9bd1c0dfca", 
            "gross": 15, 
            "net": 10, 
            "linked" : false,
            "listPrice": {
                "currencyId": "b7d2554b0ce847cd82f3ac9bd1c0dfca",
                "net": 37.81512605042,
                "gross": 45.0,
                "linked": true,
                "listPrice": null,
                "extensions": []
            }
        }
    ],
    "media": [{
        "id": "c9745c2a6d4f44d1ba3983791866d822",
        "media": { 
            "id": "3c503893f77747e19294aec29bb2f33e",
            "position": 0
        }
    }],
    "coverId": "c9745c2a6d4f44d1ba3983791866d822",
    "manufacturerId": "fc9b37e6bdfe4efb8cedf62725dfddec",
    "deliveryTimeId": "910be68cd9f44e378c1ba8965a4a8896",
    "taxId": "05ee7e68ead64bec8157c24014cfbbfc",
    "restockTime": 14,
    "isCloseout": true,
    "purchaseSteps": 16,
    "maxPurchase": 160,
    "minPurchase": 16,
    "weight": 0.26,
    "width": 78.0,
    "height": 178.0,
    "length": 78.0,
    "unitId": "e2845da8c4534b8fadc28267c0b7fb10",
    "referenceUnit": 1,
    "purchaseUnit": 1,
    "properties": [
        {"id": "3b3401cc9c6a4362baa92a373617e712"},
        {"id": "a2b0cd0eff3748d890453e493e743755"}
    ],
    "translations": {
        "99ae24413cbc4c0db13dc6469a938139": {
            "name": "english name",
            "description": "english description",
            "packUnit": "ST",
            "packUnitPlural": "ST",
            "customFields": 
                {
                    "custom_properties_MHD": 365,
                    "custom_properties_MHD_WA": 45,
                    "custom_properties_MHD_WE": 90,
                    "custom_properties_batched": true
                }
        },
        "2fbb5fe2e29a4d70aa5854ce7ce3e20b": {
            "name": "german name",
            "description": "german description",
            "packUnit": "ST",
            "packUnitPlural": "ST",
            "customFields": 
                {
                    "custom_properties_MHD": 365,
                    "custom_properties_MHD_WA": 45,
                    "custom_properties_MHD_WE": 90,
                    "custom_properties_batched": true
                }
        }
    }
}

du übergibst eine ProduktID (erste Teile im JSON). Dadurch wertet SW das als Update, nicht als Insert (sagt auch die Fehlermeldung). Du sprichst aber bei der API das Insert an. Ohne Id dürfte es funktionieren.

Hallo, ohne ID war richtig hatte ausversehen das drinstehen, geht jedoch so immer noch nicht.

Hab das ganze nun irgendwie gelöst, mich durchgekämpft :slight_smile:
gleich folgend die Lösung, fragt mich aber bitte nicht, woran das Problem lag, weil ich blick es nicht mehr ^^

ich bin gespannt ud kann Dir ja vielleicht die Erklärung liefern :wink:

Ja hab einfachheits halber einfach mal ne GitHub Repo gemacht.

Das klappt jetzt ohne Probleme erstellen von Artikel geht perfekt damit, jetzt ist in dem Code natürlich auch mein CSV geschlampte mit drin.