varianten api

ich kämpfe mit der shopware varianten api…

(ich teste alles auf vanilla shopware 5.1.5 installation)

da steht:
“Zunächst wird ein neuer Artikel erstellt, welcher für das Varianten Beispiel dient:”
und danach folgt eine array. also muss es eine eingabe sein:

var_dump($client->post('articles', array(
    'id' => 277,
    'mainDetailId' => 833,
    'configuratorSetId' => 40,
    'name' => 'Images - Test Artikel',
    'mainDetail' =>
        array(
            'id' => 833,
            'articleId' => 277,
            'number' => 'swTEST52b02f1996d16',
        ),
    'images' => array(
        array(
            'id' => 639,
            'path' => 'Muensterlaender_Lagerkorn_Ballons_Hochformat',
            'parentId' => NULL,
            'mediaId' => 2,
        ),
        array(
            'id' => 640,
            'path' => 'Muensterlaender_Lagerkorn_Imagefoto',
            'parentId' => NULL,
            'mediaId' => 3,
        ),
    ),
    'configuratorSet' =>
        array(
            'id' => 40,
            'groups' => array(
                array('id' => 5, 'name' => 'Flascheninhalt',),
                array('id' => 6, 'name' => 'Farbe',),
                array('id' => 7, 'name' => 'Größe',),
            ),
        )
)));

ausgabe:
NULL

shopware log:

apache log:

[Mon Apr 25 11:54:00.602997 2016] [:error] [pid 2996] [client 127.0.0.1:52593] PHP Fatal error:  Uncaught exception 'Shopware\\Components\\Api\\Exception\\CustomValidationException' with message 'ConfiguratorGroup by id 5 not found' in /home/vagrant/shopware.vanilla/engine/Shopware/Components/Api/Resource/Article.php:960\nStack trace:\n#0 /home/vagrant/shopware.vanilla/engine/Shopware/Components/Api/Resource/Article.php(726): Shopware\\Components\\Api\\Resource\\Article->prepareConfiguratorSet(Array, Object(Shopware\\Models\\Article\\Article))\n#1 /home/vagrant/shopware.vanilla/engine/Shopware/Components/Api/Resource/Article.php(531): Shopware\\Components\\Api\\Resource\\Article->prepareAssociatedData(Array, Object(Shopware\\Models\\Article\\Article))\n#2 /home/vagrant/shopware.vanilla/engine/Shopware/Controllers/Api/Articles.php(90): Shopware\\Components\\Api\\Resource\\Article->create(Array)\n#3 /home/vagrant/shopware.vanilla/engine/Library/Enlight/Controller/Action.php(158): Shopware_Controllers_Api_Articles->postAction()\n#4 /home/vagrant/shopware.vanilla/engine/Library/Enlight/Controller/Dispatcher/Default.php(523): Enlight_Co in /home/vagrant/shopware.vanilla/engine/Shopware/Components/Api/Resource/Article.php on line 960

dann machen wir mal erst ohne ConfiguratorGroup (und bilder, sind ja da komplett irrelevant)…

var_dump($client->post('articles', array(
    'id' => 277,
    'mainDetailId' => 833,
    'name' => 'Images - Test Artikel',
    'mainDetail' =>
        array(
            'id' => 833,
            'articleId' => 277,
            'number' => 'swTEST52b02f1996d16',
        ),
)));

ausgabe:
NULL

shopware log:

apache log:

[Mon Apr 25 11:59:35.870451 2016] [:error] [pid 2996] [client 127.0.0.1:52595] PHP Fatal error:  Uncaught exception 'Shopware\\Components\\Api\\Exception\\ValidationException' in /home/vagrant/shopware.vanilla/engine/Shopware/Components/Api/Resource/Article.php:537\nStack trace:\n#0 /home/vagrant/shopware.vanilla/engine/Shopware/Controllers/Api/Articles.php(90): Shopware\\Components\\Api\\Resource\\Article->create(Array)\n#1 /home/vagrant/shopware.vanilla/engine/Library/Enlight/Controller/Action.php(158): Shopware_Controllers_Api_Articles->postAction()\n#2 /home/vagrant/shopware.vanilla/engine/Library/Enlight/Controller/Dispatcher/Default.php(523): Enlight_Controller_Action->dispatch('postAction')\n#3 /home/vagrant/shopware.vanilla/engine/Library/Enlight/Controller/Front.php(226): Enlight_Controller_Dispatcher_Default->dispatch(Object(Enlight_Controller_Request_RequestHttp), Object(Enlight_Controller_Response_ResponseHttp))\n#4 /home/vagrant/shopware.vanilla/engine/Shopware/Kernel.php(153): Enlight_Controller_Front->dispatch()\n#5 /home/vagrant/shopware.vanilla/shopware.php(101): Shopware\\Kernel->handle(Object(Symfony\\ in /home/vagrant/shopware.vanilla/engine/Shopware/Components/Api/Resource/Article.php on line 537

tja, diese error sagt mir leider nichts…

aber was ich vermuten könnte, weil diese beispiel array eine id hat, kann es nicht für eingabe sein, sondern ausgabe von schon bestehende artikel? also machen wir mal das selbe ohne id:

var_dump($client->post('articles', array(
    'name' => 'Images - Test Artikel',
    'mainDetail' =>
        array(
            'number' => 'swTEST52b02f1996d16',
        ),
)));

FFS, wieder nichts sagende error in apache log… dann versuchen wir doch mal mit http://community.shopware.com/Shopware-4-REST-API-verwenden_detail_989.html#Einen_Artikel_dem_Shop_hinzuf.FCgen

var_dump($client->post('articles', array(
    'name' => 'Neuer Artikel',
    'taxId' => 1,
    'mainDetail' => array(
        'number' => 'SW123456'
    )
)));

ausgabe:

array(2) {
  ["success"]=>
  bool(true)
  ["data"]=>
  array(2) {
    ["id"]=>
    int(1)
    ["location"]=>
    string(38) "http://shopware.vanilla/api/articles/1"
  }
}

juhuu, dies hat funktioniert. dann weiter mit program

das hier die beispiel array articleId 279 hat, und in vorherige bestehende artikel beispiel 277, ist wohl eine schreibfehler? und hier die artikelId sollte eigentlich 277 sein, oder?

(rant: leider sagt nicht mal REST API - Variants Resource was die articleId sein soll, das von zu erstellenden variant - wäre logisch - oder das von haupt artikel… und dann das selbe frage für nummer, wo ich vermute es wieder anders herum ist…)

aber unsere neue haupt artikel hat id 1, also benutze ich das:

var_dump($client->post('variants', [
    'articleId' => '1',
    'number' => 'swTEST52b03205900ca',
    'inStock' => 100,
    'unitId' => 1,
    'prices' => array(
        array(
            'customerGroupKey' => 'EK',
            'from' => 1,
            'to' => '-',
            'price' => 400,
        ),
    ),
]));

ausgabe:

array(2) {
  ["success"]=>
  bool(true)
  ["data"]=>
  array(2) {
    ["id"]=>
    int(2)
    ["location"]=>
    string(38) "http://shopware.vanilla/api/variants/2"
  }
}

juhuu, eine nicht null antwort!

aber wenn ich jetzt in backend anschaue, ist die varianten tab immer noch deaktiv (für artikel id 1), wieso?
(und wenn ich es manuell aktiviere, sehe ich da trotdem diesen über api angelegten varianten nicht)

der beispiel array in http://community.shopware.com/Shopware-4-REST-API-verwenden_detail_989.html#Variante_erstellen hat keine feld was ich denken würde das es als “Varianten Artikel” beschreibt…?

und in REST API - Article Resource finde ich nur ein variants object array…

  • wo wird diese boolean? “Varianten Artikel” gesetzt?
  • oder soll der dynamisch kommen wenn der artikel varianten hat?
  • diese würde heißen meine angelegte variante über die api hat doch nicht funktioniert?
  • wieso sehe ich diesen varianten artikel in backend nicht?
  • was mache ich falsch?

ps. 1999 hat angerufen und wollte ihren wysiwyg editor zurück…

hmm, mir ist völlig entgangen das varianten artikeln MÜSSEN über configuratorGroups/Sets/Whatever verbunden werden, also ist wohl eine artikel "Varianten Artikel" wenn es configuratorDings hat...

also hier eine funktionierende beispiel

"haupt artikel" (per default erste variante?)

mit minimum werten für
- speicherbar in backend
- anzeigbar in frontend
- möglich varianten zu erhalten

var_dump($client->post('articles', [
	'name' => 'Haupt Artikel',
	'active' => true,
	'taxId' => 1,
	'supplier' => 'Whatever',
	'categories' => [
		[
			'id' => 3
		]
	],
	'mainDetail' => [
		'number' => 'ART001',
		'inStock' => 42,
		'active' => true,
		'prices' => [
			[
				'price' => 123
			]
		]
	],
	'configuratorSet' => [
		'groups' => [
			[
				'name' => 'Foo',
				'options' => [
					['name' => 'Bar'],
					['name' => 'Zap']
				]
			]
		]
	]
]));

varianten artikel für "Zap"

var_dump($client->post('variants', [
	'articleId' => '1',
	'number' => 'ART002',
	'active' => true,
	'inStock' => 42,
	'configuratorOptions' => [
		[
			'groupId' => 5, // TODO: wieso fängt diese mit 5 an?
			'optionId' => 2
		]
	],
	'prices' => [
		[
			'price' => 456
		]
	]
]));