Всех приветствую! Прошу уважаемое сообщество помочь в решении вопроса, над которым бьюсь уже неделю. Настраиваю передачу данных из CRM через API в сторонний сервис (с помощью curl). Данные засунул в массив: Код (Text): $get_data = array( "email" => "$email_client", "values[]" => array('parameter_id' => "87516",'value' => "$category"), "values[]" => array("parameter_id" => "87514","value" => "$segment"), "values[]" => array("parameter_id" => "87291","value" => "$account"), "values[]" => array("parameter_id" => "87515","value" => "$contactname"), ); Далее упаковываю через http_build_query($get_data) и отправляю через curl с помощью get-запроса. Сервер данные принимает, но записывает в БД только email и последний элемент параметра ($contactname). Если передавать данные по одному - всё ок. Но мне надо передать сразу 4 параметра + адрес email. Видимо, неверно записал массив. Прошу помочь и не кидаться тапками ))
а чем же кидаться, если за неделю даже не заглянули как массивы нормально записывать? PHP: $get_data = [ "email" => "$email_client", "values" => [ ['parameter_id' => "87516",'value' => $category], ['parameter_id' => "87514","value" => $segment] ] ];,
Спасибо за Ваш ответ, но увы, такой вариант я тоже пробовал, данные не уходят никакие, выходит ошибка от принимающего сервера: Код (Text): Array ( [code] => 400 [detail] => values is invalid Если вывести переменную http_build_query($get_data), то вот что в ней: Код (Text): 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 Вставляются знаки %%, возможно, из-за этого?
данные уходят... другое дело - что ожидает сервер? а чего он ожидает есть у вас описание? ... как вариант - добавьте [] после values
Описание API есть. Сервер требует данные в формате JSON. Делаю вот так: Код (Text): http_build_query(json_encode($get_data)) Сервер отвечает, что параметры к нему не пришли, только сам email: Код (Text): Array ( [id] => 1211347535 [email] => mail@pochta.ru [list_id] => 165915 [confirmed] => 1 [status] => active [values] => Array ( ) [tags] => Array ( ) ) Сам код curl-запроса: Код (Text): $headers = ['Content-Type: application/json','Authorization: Bearer ***]; $url_upd = "https://api.***.ru/v1/lists/$list_id/recipients?"; $curl = curl_init(); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PATCH'); curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query(json_encode($get_data))); curl_setopt($curl, CURLOPT_URL, $url_upd); curl_setopt($curl, CURLOPT_HTTPGET, true); $res = curl_exec($curl);
Дам нафиг ванговать то нам.. Тайна Полишинеля, в каком формате требует АПИ данные... Главное что json...