REST API - Varianten werden nicht angelegt

Hallo,

über die REST API lege ich Artikel an, das funktioniert auch. Sobald allerdings Varianten ins Spiel kommen, werden diese im Backend nicht angezeigt. Der Varianten TAB ist zwar aktiviert, es sind aber keine weiteren Artikel als Varianten zu sehen.

Die REST API gibt keinen Fehler aus. Daten, die an die API geschickt werden:

Array ( [name] => Abschäumer Deltec 1456 [tax] => Array ( [id] => 1 [tax] => 19.00 [name] => 19% ) [active] => 1 [descriptionLong] => Alle Deltec Abschäumer zeichenen sich durch einen extrem geräuscharmen Betrieb aus und sind selbstansaugend. Es ist also keine externe 
Wasserzufuhr notwendig. 

Innenabschäumer der SC Serie arbeiten nach dem Einkammer System. Sie zeichnen sich durch einen fast geräuschlosen Betrieb aus.



Leistungsdaten:

Zusätzliche Information

Aquariengröße max. / Liter1000l

Luft/Liter pro Stunde 800l

Pumpe DCC 2

Spannung 24V






[images] => Array ( [0] => Array ( [link] => http://www.pa-supply.eu/media/image/SC_1455_1_940.jpg ) ) [mainDetail] => Array ( [ean] => [active] => 1 [inStock] => 0 [number] => V1508154820 [prices] => Array ( [0] => Array ( [customerGroupKey] => EK [pseudoPrice] => 181.50420168067 [percent] => 0 [from] => 1 [to] => beliebig [price] => 215.99 ) [1] => Array ( [customerGroupKey] => UVP [pseudoPrice] => 0 [basePrice] => 0 [percent] => 0 [from] => 1 [to] => beliebig [price] => 181.50420168067 ) ) ) [categories] => Array ( [0] => Array ( [id] => 26 ) [1] => Array ( [id] => ) ) [supplier] => Deltec [variants] => Array ( [0] => Array ( [isMain] => 1 [inStock] => 0 [additionaltext] => [configuratorOptions] => Array ( [0] => Array ( [group] => Reinigungssystem [option] => ohne ) [1] => Array ( [group] => Pumpenvariante [option] => 24V DC ) ) [prices] => Array ( [0] => Array ( [customerGroupKey] => EK [pseudoPrice] => 181.50420168067 [percent] => 0 [from] => 1 [to] => beliebig [price] => 215.99 ) [1] => Array ( [customerGroupKey] => UVP [pseudoPrice] => 0 [basePrice] => 0 [percent] => 0 [from] => 1 [to] => beliebig [price] => 181.50420168067 ) ) [active] => 1 [number] => V1508154820 ) [1] => Array ( [isMain] => 0 [inStock] => 0 [additionaltext] => [active] => 1 [configuratorOptions] => Array ( [0] => Array ( [group] => Reinigungssystem [option] => manuell ) [1] => Array ( [group] => Pumpenvariante [option] => 24V DC ) ) [number] => V1508154820.1 [prices] => Array ( [0] => Array ( [customerGroupKey] => EK [pseudoPrice] => 203.50420168067 [percent] => 0 [from] => 1 [to] => beliebig [price] => 242.17 ) [1] => Array ( [customerGroupKey] => UVP [pseudoPrice] => 0 [basePrice] => 0 [percent] => 0 [from] => 1 [to] => beliebig [price] => 203.50420168067 ) ) ) ) [configuratorSet] => Array ( [0] => Array ( [name] => Pumpenvariante [options] => Array ( [0] => Array ( [name] => 24V DC ) ) ) [1] => Array ( [name] => Reinigungssystem [options] => Array ( [0] => Array ( [name] => ohne ) [1] => Array ( [name] => manuell ) ) ) ) )

 

Ich habe das ganze jetzt getrennt. Zuerst wird der Artikel angelegt, dann die Varianten (Varianten Endpunkt der API) erstellt. Allerdings sind die Varianten im Backend weiterhin nicht sichtbar, obwohl die API keinen Fehler zurückgibt.

Folgendes wird an die Varianten API übergeben:

{"isMain":true,"articleId":1483,"active":true,"number":"V0.828419001508184611","additionaltext":null,"supplierNumber":"213063","ean":"5060139355612","__options_prices":{"replace":true},"prices":[{"customerGroupKey":"EK","pseudoPrice":7.3644859813084,"percent":0,"from":1,"to":"5","price":7.88},{"customerGroupKey":"EK","pseudoPrice":6.996261682243,"percent":0,"from":6,"to":"11","price":7.486},{"customerGroupKey":"EK","pseudoPrice":6.6280373831776,"percent":0,"from":12,"to":"beliebig","price":7.092},{"customerGroupKey":"UVP","pseudoPrice":0,"basePrice":0,"percent":0,"from":1,"to":"beliebig","price":7.3644859813084}],"configuratorOptions":[{"group":"Gewicht","option":"300g"}]}

Bei den weiteren Varianten ist isMain natürlich false.

Varianten anlegen ist ein recht verfummelter Vorgang über die Api. Es reicht nicht aus die Varianten alle zusammenzufassen, du musst auch den die KonfiguratorOptions beim Artikel richtig setzen.

Das ist praktisch eine Übersicht über alle möglichen Konfigurationselemente des Artikels, wobei Optionen nicht doppelt vorkommen dürfen.

Bisher habe ich das immer so gelöst…  in einer Schleife erst einmal die Varianten zusammen packen und während dessen herausfiltern, welche Optionen es hierbei gibt (je nur 1 mal!). Daraus ergibt sich dann folgendes Array:

$tmp_variants[$i] = array(
			'isMain' => (($i==0)?("true"):("false")),
			'number' => $anz_variante["VariantenNummer"],
			'inStock' => $anz_variante["Menge"],
			'purchaseUnit' => $sauber_wert_inhalt,
 	    		'referenceUnit' => $sauber_wert_grundeinheit,
			'packUnit' => $masseinheit,
			'additionaltext' => '',
			'active' => 1,
			'ean' => $anz_variante["EAN"],
			'configuratorOptions' => $tmp_var_groups,
			'prices' => $preisgruppe_arr
		);

Danach wird das ganze dann in die eigentliche Artikel-Update-Struktur gepackt.

$updateArticle = array(
			'configuratorSet' => array( 
						'groups' => $tmp_groups
					),
			'taxId' => 1,
			'supplierId' => $hersteller,
		 	'variants' => $tmp_variants,
			'template' => $template,
			'ean' => $ean,
			'prices' => $preisgruppe_arr
		);

Das KonfiguratorSet ist hierbei nun das Array über alle Variantenattribute und sieht irgendwie so aus…

array(
    ['name' => 'Kategorie', 'options' => [
                                          ['name' => 'A'],
                                          ['name' => 'B']
                                         ]
    ],
    ['name' => 'Kategorie2', 'options' => [
                                          ['name' => '1'],
                                          ['name' => '2']
                                         ]
    ]
)

 

Wird ersichtlicher, wenn man einen Artikel in Shopware hat/anlegt und sich dann die Rückgabe der Api einfach mal anschaut

1 „Gefällt mir“

Vielen Dank für die Nachricht. Ich konnte mein Problem lösen, die ConfiguratorSets wurden nicht richtig angelegt. Hatte das Array ‘Groups’ als Zwischenebene vergessen und die Daten direkt in des ConfiguratorSets Array geschrieben.