За последние 24 часа нас посетили 10578 программистов и 889 роботов. Сейчас ищут 233 программиста ...

Передача данных в многомерном массиве через curl

Тема в разделе "PHP для новичков", создана пользователем udaff1981, 12 авг 2022.

  1. udaff1981

    udaff1981 Активный пользователь

    С нами с:
    9 июн 2014
    Сообщения:
    9
    Симпатии:
    0
    Всех приветствую!
    Прошу уважаемое сообщество помочь в решении вопроса, над которым бьюсь уже неделю.

    Настраиваю передачу данных из CRM через API в сторонний сервис (с помощью curl).
    Данные засунул в массив:

    Код (Text):
    1. $get_data = array(
    2.             "email" => "$email_client",
    3.             "values[]" => array('parameter_id' => "87516",'value' => "$category"),
    4.             "values[]" => array("parameter_id" => "87514","value" => "$segment"),
    5.             "values[]" => array("parameter_id" => "87291","value" => "$account"),
    6.             "values[]" => array("parameter_id" => "87515","value" => "$contactname"),
    7. );
    Далее упаковываю через http_build_query($get_data) и отправляю через curl с помощью get-запроса.
    Сервер данные принимает, но записывает в БД только email и последний элемент параметра ($contactname). Если передавать данные по одному - всё ок. Но мне надо передать сразу 4 параметра + адрес email.

    Видимо, неверно записал массив.
    Прошу помочь и не кидаться тапками ))
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.417
    Симпатии:
    657
    Адрес:
    Татарстан
    а чем же кидаться, если за неделю даже не заглянули как массивы нормально записывать?
    PHP:
    1. $get_data = [
    2.             "email" => "$email_client",
    3.             "values" => [
    4.                 ['parameter_id' => "87516",'value' => $category],
    5.                 ['parameter_id' => "87514","value" => $segment]
    6.             ]
    7. ];,
     
  3. udaff1981

    udaff1981 Активный пользователь

    С нами с:
    9 июн 2014
    Сообщения:
    9
    Симпатии:
    0
    Спасибо за Ваш ответ, но увы, такой вариант я тоже пробовал, данные не уходят никакие, выходит ошибка от принимающего сервера:

    Код (Text):
    1. Array ( [code] => 400 [detail] => values is invalid
    Если вывести переменную http_build_query($get_data), то вот что в ней:

    Код (Text):
    1. email=pochta%40mail.ru&values%5B0%5D%5Bparameter_id%5D=87516&values%5B0%5D%5Bvalue%5D=2&values%5B1%5D%5Bparameter_id%5D=87514&values%5B1%5D%5Bvalue%5D=0&values%5B2%5D%5Bparameter_id%5D=87291&values%5B2%5D%5Bvalue%5D=1770007060&values%5B3%5D%5Bparameter_id%5D=87515&values%5B3%5D%5Bvalue%5D=%D0%A0%D0%BE%D0%BC%D0%B0%D0%BD
    Вставляются знаки %%, возможно, из-за этого?
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.417
    Симпатии:
    657
    Адрес:
    Татарстан
    данные уходят... другое дело - что ожидает сервер?
    а чего он ожидает есть у вас описание?
    ...
    как вариант - добавьте [] после values
     
  5. udaff1981

    udaff1981 Активный пользователь

    С нами с:
    9 июн 2014
    Сообщения:
    9
    Симпатии:
    0
    Описание API есть. Сервер требует данные в формате JSON.
    Делаю вот так:
    Код (Text):
    1. http_build_query(json_encode($get_data))
    Сервер отвечает, что параметры к нему не пришли, только сам email:
    Код (Text):
    1. Array ( [id] => 1211347535 [email] => mail@pochta.ru [list_id] => 165915 [confirmed] => 1 [status] => active [values] => Array ( ) [tags] => Array ( ) )
    Сам код curl-запроса:
    Код (Text):
    1. $headers = ['Content-Type: application/json','Authorization: Bearer ***];
    2. $url_upd = "https://api.***.ru/v1/lists/$list_id/recipients?";
    3. $curl = curl_init();
    4. curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    5. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    6. curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PATCH');
    7. curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query(json_encode($get_data)));
    8. curl_setopt($curl, CURLOPT_URL, $url_upd);
    9. curl_setopt($curl, CURLOPT_HTTPGET, true);
    10. $res = curl_exec($curl);
     
  6. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.417
    Симпатии:
    657
    Адрес:
    Татарстан
    Дам нафиг ванговать то нам.. Тайна Полишинеля, в каком формате требует АПИ данные... Главное что json...