REST API: Artikel anlegen

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

$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.

Ich baue aktuell an einer Schnittstelle mit mit dieser API zusammen läuft. Umlaute sollte da schon gehen :slight_smile:

als “value” funktioniert es, aber nicht als “name”

Oha, gut zu wissen.