Ошибка при обновлении сведений с помощью rest API

Привет, я пытаюсь обновить цену продукта, используя следующий код. Но почему-то показывает ошибку. Это документация . Пожалуйста, проверьте это.

$storeId   = storeid;
$productId = myproductid;
$myToken   = mytoken;
$dataRAW   = json_encode( array( 'price' => 80 ), JSON_FORCE_OBJECT );
$dataToPut = $dataRAW;
$dataRAW   = http_build_query($dataRAW);
$context   = [
    'http' => [
        'method' => 'PUT',
        'header' => "Authorization: apikeystring\r\n" . "Content-Length: ".sizeof($dataToPut)."\r\n" . "Content-Type: application/json\r\n",
        'content' => $dataToPut
    ] 
];

$context   = stream_context_create($context);
$url       = "https://app.ecwid.com/api/v3/".urlencode($storeId)."/products/".urlencode($productId)."?token = ".$myToken; 
$dataToPut = json_encode($dataToPut);


$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Host: app.ecwid.com','Content-Type: application/json;charset=utf-8','Cache-Control: no-cache'));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $dataToPut);

// Make the REST call, returning the result
$response = curl_exec($curl);
echo $response;

if (!$response) {
    echo("Connection Failure: ".curl_error($curl));
    die();
}
curl_close($curl);

Я запускаю этот код на своем локальном хосте. http://localhost/ecwid/code.php

Warning: http_build_query(): Parameter 1 expected to be Array or Object. Incorrect value given in C:\xampp\htdocs\ecwid\code.php on line 7

Warning: sizeof(): Parameter must be an array or an object that implements Countable in C:\xampp\htdocs\ecwid\code.php on line 11

Connection Failure: error setting certificate verify locations: CAfile: C:\xampp\apache\bin\curl-ca-bundle.crt CApath: none

Первые два сообщения об ошибках очень говорят сами за себя. Вы должны начать с поиска в руководстве для http_build_query() и размер(). Что касается третьего, то об этом также много раз спрашивали и отвечали здесь. Пожалуйста, сделайте базовую отладку и исследование, прежде чем публиковать здесь.

M. Eriksson 29.05.2019 11:25
json_encode создает объект - http_build_query ожидает массив в качестве входных данных, как и sizeof. Что касается ошибки сертификата ~ загрузите копию cacert.pem с curl.haxx.se/docs/caextract.html
Professor Abronsius 29.05.2019 11:29

Ожидается, что параметр 1 будет массивом или объектом. Кажется, у вас есть ошибка в вашем json. Почему $dataToPut = json_encode($dataToPut);? Он дважды кодирует json.

Shim-Sao 29.05.2019 11:32

@RamRaider, куда я положу этот сертификат. в моей папке проекта или xampp . Или, если я запущу этот запрос на своем https-сервере, все будет в порядке?

Manik 29.05.2019 11:33
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
344
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы передаете JSON данные в http_build_query, так получилось, что http_build_query принимает только параметры массива и преобразует их в строку запроса. Вы можете взять ссылку из следующего примера.

$dataRAW   = ['price' => 80];
$dataRAW   = http_build_query($dataRAW);

Другие вопросы по теме