Answer the question
In order to leave comments, you need to log in
How to fix an error when sending a request (php curl) to the Yandex market?
There is a script written by Yandex, HERE , it works, but does not transmit anything.
I add data to it that I want to send.
<?
// Входные данные
$authKey = '********************';
$oauthClientId = '****************';
$requestURL = 'https://api.partner.market.yandex.ru/v2/campaigns/21614343/hidden-offers.json';
// Установка HTTP-заголовков запроса
$headers = array("Authorization: OAuth oauth_token=$authKey, oauth_client_id=$oauthClientId");
// данные которые нужно отправить
$post_data = array(
"hiddenOffers" => array(
array(
"offerId" => 146688, // sku на маркете который нужно скрыть
"comment" => 'clear markret',
"ttlInHours" => 720,
)
),
);
echo "<h3>POST как есть</h3>";
print_r($post_data);
$data_json = json_encode($post_data); // переводим поля в формат JSON
echo "<h3>POST как JSON</h3>";
print_r($data_json);
echo "<h3> Сам запрос </h3>";
// Инициализация c URL
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $requestURL);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data_json);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLINFO_HEADER_OUT, true);
// Выполнение запроса, получение результата
$result = curl_exec($curl);
// Обработка результата выполнения запроса
if (!$result) {
echo 'Ошибка cURL: ' . curl_errno($curl) . ' - ' . curl_error($curl);
} else {
// Разделение полученных HTTP-заголовков и тела ответа
$responseHeadersSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
$responseHeaders = substr($result, 0, $responseHeadersSize);
$responseBody = substr($result, $responseHeadersSize);
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($httpCode == 200) {
// Если HTTP-код ответа равен 200, то выводится отформатированное тело ответа
// в формате JSON
echo 'Запрос: ' . $requestURL;
$decodedBody = json_decode($responseBody);
echo '<br>Тело ответа: <pre>' . json_encode(
$decodedBody,
JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES
) . '</pre>';
} else {
echo 'HTTP-код ответа: ' . $httpCode;
// Если тело ответа не пустое, то производится попытка декодирования JSON-кода
if (!empty($responseBody)) {
$decodedBody = json_decode($responseBody);
if ($decodedBody != null) {
// Если ответ содержит тело в формате JSON,
// то выводится отформатированное тело в формате JSON
echo '<br>Тело ответа: <pre>' . json_encode(
$decodedBody,
JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES
) . '</pre>';
} else {
// Если не удалось декодировать JSON либо тело имеет другой формат,
// то выводится преобразованное тело ответа
echo '<br>Тело ответа: <pre>' . htmlspecialchars($responseBody) . "</pre>";
}
}
}
// Вывод необработанных HTTP-заголовков запроса и ответа
echo '<hr>Заголовки запроса: <pre>' . curl_getinfo($curl, CURLINFO_HEADER_OUT) . '</pre>';
echo 'Заголовки ответа: <pre>' . $responseHeaders . '</pre>';
}
curl_close($curl);
?>
HTTP-код ответа: 400
Тело ответа:
{
"status": "ERROR",
"errors": [
{
"code": "BAD_REQUEST",
"message": "bad request"
}
]
}
Answer the question
In order to leave comments, you need to log in
Try like this:
<?php
header('Content-Type: application/json; charset=UTF-8');
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
$authKey = '********************';
$oauthClientId = '****************';
$requestURL = 'https://api.partner.market.yandex.ru/v2/campaigns/21614343/hidden-offers.json';
$data = array(
'hiddenOffers' => array(
array(
'offerId' => 146688,
'comment' => 'clear markret',
'ttlInHours' => 720
)
),
);
$data_string = json_encode($data);
$result = file_get_contents($requestURL, null, stream_context_create(array(
'http' => array(
'method' => 'POST',
'header' => array(
"Authorization: OAuth oauth_token=$authKey, oauth_client_id=$oauthClientId\r\n" .
"Content-Type: application/json; charset=utf-8\r\n" .
"Content-Length: " . strlen($data_string) . "\r\n" .
"Host: " . parse_url($requestURL)['host']
),
'content' => $data_string
)
)
)
);
echo $result;
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question