Hi, ich schaffe es nicht, einen Artikel über die API anzulegen. Das ist meine Php-script:
$params = array(
"name" => $article_name,
"active" => $article_active,
"descriptionLong" => $article_descriptionLong,
"tax" => "7.7",
"supplier" => $article_supplier,
"categories" => array(
"id" => $article_category
),
"mainDetail" => array(
"number" => $article_number,
"active" => $article_active,
"ean" => $article_ean,
"supplierNumber" => $article_supplierNumber,
"purchasePrice" => $article_ek,
"prices" => array(
array(
"customerGroupKey" => "EK",
"price" => $article_vk
)
),
"attribute" => array(
"preiscode" => $article_pc,
"toppreise" => 1
),
"images" => array(
"link" => $article_img
),
"filterGroupId" => $article_filterSet,
"propertyValues" => array(
array(
"option" => "Veröffentlichung",
"value" => $article_filterValueRelease
),
array(
"option" => "Discs",
"value" => $article_filterValueDisc
),
array(
"option" => "Medium",
"value" => $article_filterValueMedium
)
)
)
);
print("".print_r($params,true)."");
$client->put('articles/',$params);
Zu jeder Variable gibt es einen Eintrag den ich mir ausgeben lasse. In der Datenbank kommt allerdings nichts an? Habe auch schon „post“ statt „put“ genommen, aber es macht keinen Unterschied
Danke und Gruss
Ich habe die Params etwas reduziert, so wie das Beispiel auf https://developers.shopware.com/developers-guide/rest-api/examples/article/
$client->put(„articles/“,$params)
$client->put(„articles“,$params)
$client->post(„articles/“,$params)
$client->put(„articles“,$params)
$params = array(
„name“ => $article_name,
„active“ => $article_active,
„tax“ => „7.7“,
„supplier“ => $article_supplier,
„categories“ => array(
„id“ => $article_category
),
„mainDetail“ => array(
„number“ => $article_number,
„active“ => $article_active,
„prices“ => array(
array(
„customerGroupKey“ => „EK“,
„price“ => $article_vk
)
),
)
);
print("".print_r($params,true)."");
$client->put(‚articles‘,$params);
Die Felder werde auch gefüllt.
Array
(
[name] => Rapunzel - Neu Verföhnt - Disney Classics 50
[active] => true
[tax] => 7.7
[supplier] => Walt Disney
[categories] => Array
(
[id] => 79
)
[mainDetail] => Array
(
[number] => 10076854
[active] => true
[prices] => Array
(
[0] => Array
(
[customerGroupKey] => EK
[price] => 9.9
)
)
)
)
Es passiert aber nichts. Was mache ich hier falsch?
Danke und Gruss
R4M
10. Juli 2020 um 06:53
3
$client->put(‚articles/‘,$params);
Hm, zum anlegen benutzt mal eigentlich nur „post“. Ich würde mir die Info vom Shop mal anzeigen lassen:
$out = $client->post('articles/',$params);
print_r( $out );
1 „Gefällt mir“
Super, @R4M Der Tip mit dem output ist echt gut, klappt jedoch nicht wenn man eine falsche Struktur übergibt.
Für Interessierte: Falsch war bei mir, jetzt korrekt:
$client->post(“articles/”,$params)
“categories” => array(array(id=>213)) - zusätzliches Array
"images => array(array(link=http…)) - zusätzliches Array sowie im Stamm-Array und nicht in mainDetailarray
“filterGroupID” muss im Stamm-Arry und nicht in mainDetail-Array
“properyValues” => array(array(“option” => array(“name”=>“Discs”),“value” => 123)) - zusätzliches Array muss auch im Stammarray stehen
@R4M Ich habe mal noch eine Frage zu Umlauten als Gruppenname/Optionsname der Eigenschaften
"propertyValues" => array(
array(
"option" => array(
"name" => "Veröffentlichung"
),
"value" => $article_filterValueRelease
)
)
Wenn ich „ö“ in Veröggentlichung habe, dann importiert er nicht und gibt einen Fehler zurück? tax, maindetail und number würden fehlen
Habe schon in der PHP Datei folgendes geschrieben:
header('Content-Type: text/html; charset=utf-8');
Wenn ich das in der PHP ausgebe mit
print("
".print\_r($params,true)."
");
kommt bei mir Ver?ffentlichung in einer schwarzen Raute. Was allerding auch nicht der Browserausgabe entspricht und doch in der API selbst nicht auftreten dürte oder?
Gelöst, Umlaute kann die API Habe in der DB die ID gesucht und dann id statt name genommen.
R4M
10. Juli 2020 um 12:36
7
Ich baue aktuell an einer Schnittstelle mit mit dieser API zusammen läuft. Umlaute sollte da schon gehen
als “value” funktioniert es, aber nicht als “name”