WooCommerce REST API передача массива

189
28 октября 2018, 09:20

Пытаюсь добавить товар при помощи WooCommerce REST API, так сказать - снаружи, POST-запросом. Все шло нормально, пока не понадобилось соотносить товар с группой. Ибо группа передается массивом.

Вот так все работает. Авторизация ОК. Добавляется товар с названием из $params['name']

curl_setopt($c, CURLOPT_POSTFIELDS, [
    'oauth_consumer_key' => $params['oauth_consumer_key'],
    'oauth_nonce' => $params['oauth_nonce'],
    'oauth_signature_method' => $params['oauth_signature_method'], 
    'oauth_signature' => rawurlencode($signature),
    'oauth_timestamp' => $params['oauth_timestamp'], 
    'oauth_version' => $params['oauth_version'],
    'name' => ($params['name'])
] );

Но если я пытаюсь таким же образом добавить группу

$params = array(
         ...
        'name' => 'Good 3',
        'categories' => '{"0":{"id":"21"}}'
    );

То получаю сообщение

{"code":"rest_invalid_param","message":"Неверный параметр: categories","data":{"status":400,"params":{"categories":"categories[0] не принадлежит к типу object."}}}

Я как только не группировал эти скобки для categories. И фигурные и квадратные, и с индексом и без. Пробовал добавлять заголовок Accept: application/json - ошибка та же.

Подскажите, кто знает.

Заранее спасибо!

Answer 1
    $products_array = array(
            "product" => array(
                "title" => $realname,
                "body_html" => "<strong>$message</strong>",
                "vendor" => $prod,
                "product_type" => $type,
               "images" => array(array(
                   "src" => "/uploads/" . $name
               )),
                "published" => true,
                "variants" => array(
                    array(
                        "sku" => "t_009",
                        "price" => $Money,
                        "grams" => $gram,
                        "taxable" => false,
                    )
                ),
            ),
        );
//        echo json_encode($products_array);
//        echo "<br />";
        $url = "https://$shopifyapi:$shoppassword@$shop/admin/products.json";
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_VERBOSE, 0);
        curl_setopt($curl, CURLOPT_HEADER, 1);
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($products_array));
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
//        $response =
        curl_exec($curl);
        curl_close($curl);

надо просто без ошибок переходить от json на массив вот мой пример { "product": { "title": "Burton Custom Freestyle 151", "body_html": "<strong>Good snowboard!</strong>", "vendor": "Burton", "product_type": "Snowboard", "images":{["src":"http://test.loc/uploads/IrB0R2RrLM8MOsDHZv03ABjLW58vNeitiMXVPpRO.jpeg"]} "variants": [ { "option1": "First", "price": "10.00", "sku": "123" }, { "option1": "Second", "price": "20.00", "sku": "123" } ] } }

READ ALSO
Помогите с ошибкой

Помогите с ошибкой

Notice: Undefined index: country_id in /home/a0226150/domains/a0226150xsph

189
Запись std::list в бинарный файл

Запись std::list в бинарный файл

Можете на примере показать как записать list в бинарный файлПотому что запись как обычной переменной не прокатывает

185