Beispiel sync api, wie man salesChannel setzen kann

Hallo,

ich kämpfe gerade mit der Anpassung unserer Schnittstelle von Shopware 5 zu Shopware 6.

Ich arbeite mit der sync-API Bulk Payloads | Admin API

Hat jemand ein JSON-Beispiel, wie ich salesChannel bzw. category setzen kann?

In der Doku (Create a new Product resources. | Admin API ) gibt es zum Thema category 3 Felder. Leider erschließt sich mir nicht der Unterschied:

  • mainCategories: Wenn ich die befülle, sehe ich keine Änderung im Produkt. Wofür ist das Feld gut? Doku schweigt sich aus :frowning:
  • categories: Wenn ich die befülle, sehe ich die Kategorie im Produkt, aber wo setze ich hier den SalesChannel?
  • categoriesRo: Wofür ist dieses Array?
"write-product-102617": {
		"entity": "product",
		"action": "upsert",
		"payload": [
			{
				"name": "Mein Artikelname",
				"productNumber": "234234102617",
				"manufacturerId": "018e3836b5b17e66af881246aa01ce0b",
				"taxId": "018e0a14ad84717d8d930afcd31b496f",
				"price": [
					{
						"currencyId": "b7d2554b0ce847cd82f3ac9bd1c0dfca",
						"gross": 24.3,
						"net": 20.4,
						"linked": true
					}
				],
				"stock": 100,
				...
				"categories": [
					{
						"id": "018e0da3c29b700e8e6902376b1cb21c"
					}
				]
			}
		]
	}

Wo baue ich jetzt hier den Sales-Channel ein?
Denn der ist im generierten Produkt nicht gesetzt, demzufolge wird das Produkt auch nicht im Shop angezeigt.

Wie kämpft ihr Euch eigentlich so durch die API? Gibt es ausser der https://shopware.stoplight.io/ noch eine andere, bessere Doku, die die Felder beschreibt und erklärt? Und auch mal Zusammenhänge erklärt. Oder zieht ihr eure Infos auch nur aus dem Forum oder stackoverflow und der Rest ist trial&error? Ist alles extrem zäh :frowning:

Bin für jeden Tipp dankbar.

Hi @runi :slight_smile:

Ich fange gerade an mich da durchzukämpfen und bin auch drauf gestoßen dass man zwar wunderbar Artikel anlegen kann per api, aber der sales_channel fehlt…

Konntest du das mittlerweile lösen?

LG Steffi

Hallo Steffi,

ja, irgendwann hab ich es dann tatsächlich gefunden und über trial&error zum Laufen gebracht.

Den SalesChannel kannst Du unter visibilities angeben, da muss man quasi eine Verknüpfung zwischen Produkt und SalesChannel anlegen:

"visibilities": [
	{
		"id": "5a6bde2346f0dc26b4b44875fa5f848b",
		"salesChannelId": "018e0f333d8373738cf335fe50715404",
		"visibility": 30,
		"productId": "520a7467903e88aba339f2fe2ef02174"
	}
]

Hier mal meine aktuelle vollständige Beispiel-JSON-Struktur:

{
	"write-product-160059": {
		"entity": "product",
		"action": "upsert",
		"payload": [
			{
				"id": "520a7467903e88aba339f2fe2ef02174",
				"name": "Mein Produkt",
				"productNumber": "Nr123160059",
				"manufacturerId": "018e3836b5b17e66af881246aa01ce0b",
				"taxId": "018e0a14ad84717d8d930afcd31b496f",
				"ean": "40550...",
				"media": [
					{
						"id": "6e30ff0f7dc5d144ca3a3ac2bc30d60a",
						"media": {
							"id": "b847c6555ceda5af3b7265a4c61a99a2"
						}
					},
					{
						"id": "c54631e8ae4274786e136d367aa77d81",
						"media": {
							"id": "057243a1cfca2477ed058a9793744e85"
						}
					}
				],
				"coverId": "6e30ff0f7dc5d144ca3a3ac2bc30d60a",
				"customFields": {
					...
				},
				"price": [
					{
						"currencyId": "b7d2554b0ce847cd82f3ac9bd1c0dfca",
						"gross": 196.6,
						"net": 165.2,
						"linked": true
					}
				],
				"prices": [
					{
						"ruleId": "018e51383c887f42894e95421ba6fbee",
						"price": [
							{
								"currencyId": "b7d2554b0ce847cd82f3ac9bd1c0dfca",
								"gross": 173.8,
								"net": 146.07,
								"linked": true
							}
						],
						"quantityStart": 1,
						"quantityEnd": 999999
					},
					{
						"ruleId": "018e523fdbae735c80db26c076685b50",
						"price": [
							{
								"currencyId": "b7d2554b0ce847cd82f3ac9bd1c0dfca",
								"gross": 172.4,
								"net": 144.87,
								"linked": true
							}
						],
						"quantityStart": 1,
						"quantityEnd": 999999
					}
				],
				"stock": 100,
				"metaDescription": "...",
				"description": "...",
				"deliveryTimeId": "018e0a14f3337118995f2438d6e04616",
				"keywords": "...",
				"metaTitle": "...",
				"categories": [
					{
						"id": "dcca6a9fff9da1cab61f5a2ac13e8182"
					}
				],
				"crossSellings": {
					"2": {
						"id": "18cf346a4c64126ad4c52b03e9c35dd2",
						"name": "Weitere Varianten",
						"position": 1,
						"type": "productList",
						"active": true,
						"sortBy": "name",
						"productId": "edd3e684860bab85a9e0d66f81b5b014"
					},
					"3": {
						"id": "18cf346a4c64126ad4c52b03e9c35dd2",
						"name": "Weitere Varianten",
						"position": 1,
						"type": "productList",
						"active": true,
						"sortBy": "name",
						"productId": "76ac019e92ab217dfddd43b4a8182f10"
					},
					"4": {
						"id": "18cf346a4c64126ad4c52b03e9c35dd2",
						"name": "Weitere Varianten",
						"position": 1,
						"type": "productList",
						"active": true,
						"sortBy": "name",
						"productId": "a6d38e25a795427e25bf00853aebad03"
					}
				},
				"crossSellingAssignedProducts": {
					"2": {
						"id": "edd3e684860bab85a9e0d66f81b5b014",
						"crossSellingId": "18cf346a4c64126ad4c52b03e9c35dd2",
						"productId": "edd3e684860bab85a9e0d66f81b5b014",
						"position": 65536
					},
					"3": {
						"id": "76ac019e92ab217dfddd43b4a8182f10",
						"crossSellingId": "18cf346a4c64126ad4c52b03e9c35dd2",
						"productId": "76ac019e92ab217dfddd43b4a8182f10",
						"position": 65536
					},
					"4": {
						"id": "a6d38e25a795427e25bf00853aebad03",
						"crossSellingId": "18cf346a4c64126ad4c52b03e9c35dd2",
						"productId": "a6d38e25a795427e25bf00853aebad03",
						"position": 65536
					}
				},
				"translations": {
					"en-GB": {
						...
					},
					"fr-FR": {
						...
					},
					"es-ES": {
						...
					},
					"it-IT": {
						...
					}
				},
				"visibilities": [
					{
						"id": "5a6bde2346f0dc26b4b44875fa5f848b",
						"salesChannelId": "018e0f333d8373738cf335fe50715404",
						"visibility": 30,
						"productId": "520a7467903e88aba339f2fe2ef02174"
					}
				]
			}
		]
	}
}

Ein sehr wichtiger genereller Hinweis, den ich irgendwo gelesen habe, war auch, die IDs immer selbst zu erstellen, dann sind sie reproduzierbar und Du kannst auch später nochmal problemlos auf ein Produkt, Media-Element oder Kategorie zugreifen:

$string = "meine SKU";
$id =hash('md5',$string);

Ich hoffe, das hilft Dir weiter.
Mir haben Beispiele aus dem Forum oder StackOverflow meist mehr weitergeholfen als die offizielle Doku.

Viele Grüße
Nicole :slight_smile: