#php #api #curl
Вопрос:
Я подключаюсь к API и получил эту ошибку при передаче следующего формата данных:
$data = array(
"from_date" => "2021-11-10",
"to_date" => "2021-11-21",
"adults" => 1,
"guest_id" => 2954339,
"stay_type" => "GUEST",
"entities" => [ "property_id" => 89835 ]
);
$reservation = fetch_api('reservations', '', 'POST', $data);
Ошибка:
[message] => Expected a list of items but got type "dict".
[code] => not_a_list
Проблема в entities
ценности. Я считаю, что это потому, что это массив. Ниже приведена моя fetch_api
функция. Что отлично работает при подключении к другим конечным точкам и отправке данных без вложенного массива.
function fetch_api($endpoint, $parameters = '', $method = 'GET', $data = null){
$curl = curl_init();
$headers = array(
"accept: application/json",
"Authorization: Token xxxxxx",
"cache-control: no-cache",
"content-type: application/json",
);
if ($method == 'GET') {
curl_setopt($curl, CURLOPT_HTTPGET, 1);
}
if ($method == 'POST') {
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
}
curl_setopt($curl, CURLOPT_URL, 'https://www.lodgix.com/public-api/v2/'. $endpoint .'/' . $parameters);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$result = curl_exec($curl);
$result = json_decode($result);
if (!$result) {
die("Connection Failure");
}
curl_close($curl);
return $resu<
}
Я попытался json_encode
использовать вложенный массив, как показано ниже:
if ($method == 'POST') {
curl_setopt($curl, CURLOPT_POST, 1);
if ($data) {
for ($i=0; $i < count($data); $i ) {
if (gettype($data[$i]) === 'array') {
json_encode($data[$i]);
}
}
}
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
}
К сожалению, это не помогло. На правильном ли я пути, полагая, что проблема связана с вложенным массивом, или проблема совершенно в другом?
Комментарии:
1. [сообщение] => Ожидал получить список элементов, но получил тип «дикт». [код] => not_a_list
2. Попробуй
"entities" => [ 89835 ]
3. Можете ли вы сделать echo print_r(json_encode($data), true); ?
4. @ChrisHaas, если это сделать, это изменит ошибку на:
Invalid data. Expected a dictionary, but got int.
5. @WynnTeo Это нигде не будет напечатано.