Ожидал список элементов, но получил тип «дикт» PHP

#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 Это нигде не будет напечатано.