Доброй ночи) Изучаю документацию на AmoCRM https://developers.amocrm.ru/rest_api/tasks_set.php. Проверил код для авторизации и добавления сделки, подставив свои данные все заработало. С добавлением задачи проблема, код их выдает ошибку 0. Проверил запрос в консоли https://developers.amocrm.ru/console.php через нее добавляет. В код разве что в паре мест фигурные скобки добавил (пропущены были в условиях), тоже в дугих примерах делал. Спасибо за ответы) PHP: <?php $tasks['request']['tasks']['add']=array( #Привязываем к сделке array( 'element_id'=>215413, #ID сделки 'element_type'=>2, #Показываем, что это - сделка, а не контакт 'task_type'=>1, #Звонок 'text'=>'My First Task', 'responsible_user_id'=>1529245, 'complete_till'=>1375285346 ) ); //Теперь подготовим данные, необходимые для запроса к серверу $subdomain='gvandri21@gmail.com'; #Наш аккаунт - поддомен #Формируем ссылку для запроса $link='https://'.$subdomain.'.amocrm.ru/private/api/v2/json/tasks/set'; //Нам необходимо инициировать запрос к серверу. Воспользуемся библиотекой cURL (поставляется в составе PHP). Подробнее о работе с этой библиотекой Вы можете прочитать в мануале. $curl=curl_init(); #Сохраняем дескриптор сеанса cURL #Устанавливаем необходимые опции для сеанса cURL curl_setopt($curl,CURLOPT_RETURNTRANSFER,true); curl_setopt($curl,CURLOPT_USERAGENT,'amoCRM-API-client/1.0'); curl_setopt($curl,CURLOPT_URL,$link); curl_setopt($curl,CURLOPT_CUSTOMREQUEST,'POST'); curl_setopt($curl,CURLOPT_POSTFIELDS,json_encode($tasks)); curl_setopt($curl,CURLOPT_HTTPHEADER,array('Content-Type: application/json')); curl_setopt($curl,CURLOPT_HEADER,false); curl_setopt($curl,CURLOPT_COOKIEFILE,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__ curl_setopt($curl,CURLOPT_COOKIEJAR,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__ curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0); curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0); $out=curl_exec($curl); #Инициируем запрос к API и сохраняем ответ в переменную $code=curl_getinfo($curl,CURLINFO_HTTP_CODE); //Теперь мы можем обработать ответ, полученный от сервера. Это пример. Вы можете обработать данные своим способом. $code=(int)$code; $errors=array( 301=>'Moved permanently', 400=>'Bad request', 401=>'Unauthorized', 403=>'Forbidden', 404=>'Not found', 500=>'Internal server error', 502=>'Bad gateway', 503=>'Service unavailable' ); try { #Если код ответа не равен 200 или 204 - возвращаем сообщение об ошибке if($code!=200 && $code!=204){ throw new Exception(isset($errors[$code]) ? $errors[$code] : 'Undescribed error',$code); } } catch(Exception $E) { die('Ошибка: '.$E->getMessage().PHP_EOL.'Код ошибки: '.$E->getCode()); } /** * Данные получаем в формате JSON, поэтому, для получения читаемых данных, * нам придётся перевести ответ в формат, понятный PHP */ $Response=json_decode($out,true); $Response=$Response['response']['tasks']['add']; $output='ID добавленных задач:'.PHP_EOL; foreach($Response as $v){ if(is_array($v)){ $output.=$v['id'].PHP_EOL; } } return $output;
форума такого нет, только поддержка. Переменная запроса $out ничего не возвращает. Есть также похожий скрипт авторизации который держит сессию вроде 15 минут. Я запускаю их вместе из одного файла вызываю их. А в консоли там вручеую авторизовываешься. Пока не понятно.
1. Авторизация успешно проходит? Тут я понимаю этого куска нет? 2. Сравнить все-таки запрос который пишете в консоли и отправляете сами ... фигурные скобки - о .... чувак, они офигительно много значат, особенно в формате json
Может поможет. Хотя в чём проблема? Задача не добавляется? PHP: <?php header('Content-Type: application/json; charset=utf-8'); /** * amoCRM Helper */ class amoHelper { public $settings = array(); public $isAuth = false; function __construct($settings) { if ( is_array($settings) && isset( $settings['USER_LOGIN'], $settings['USER_HASH'], $settings['subdomain'] ) ) { $this->settings = $settings; } } public function get_url($api_path, $post_data = false, $params = '', $auth = false) { if (!$this->isAuth && !$auth) { $out = $this->get_url('private/api/auth.php', $this->settings, '?type=json', true); if($out && isset($out['response']['auth']) && $out['response']['auth'] == 'true') { $this->isAuth = true; } else { return false; } } $link = 'https://'.$this->settings['subdomain'] .'.amocrm.ru/'.$api_path.$params; $options = array( CURLOPT_URL => $link, CURLOPT_HEADER => false, CURLOPT_RETURNTRANSFER => true, CURLOPT_USERAGENT => 'amoCRM-API-client/1.0', CURLOPT_HTTPHEADER => array('Content-Type: application/json', 'Accept: application/json'), CURLOPT_SSL_VERIFYPEER => 0, CURLOPT_SSL_VERIFYHOST => 0, CURLOPT_COOKIEFILE => dirname(__FILE__).'/cookie.txt', CURLOPT_COOKIEJAR => dirname(__FILE__).'/cookie.txt', ); if (is_array($post_data)) { $options[CURLOPT_CUSTOMREQUEST] = 'POST'; $options[CURLOPT_POSTFIELDS] = json_encode($post_data); } //var_export($options); $curl = curl_init(); curl_setopt_array($curl, $options); $out = curl_exec($curl); $code = (int)curl_getinfo($curl,CURLINFO_HTTP_CODE); curl_close($curl); if (in_array($code, array(200, 201)) && !empty($out)) { $data = json_decode($out, true); $error = json_last_error(); if ($error === JSON_ERROR_NONE) { return $data; } } return false; } } $settings = array( 'USER_LOGIN' => '', 'USER_HASH' => '', 'subdomain' => '', ); $amo = new amoHelper($settings); $required_fields = array( 'name' => 'Имя', 'email' => 'Email', 'phone' =>'Телефон', ); $errors = array_diff_key($required_fields, array_filter($_POST)); $result['text'] = ''; if ($_SERVER['REQUEST_METHOD'] == 'POST' && is_array($errors) && count($errors)>0) { foreach ($errors as $value) { $result['text'] .= "Заполните поле: ".$value."<br>"; } $result['status'] = 'fail'; } elseif ($_SERVER['REQUEST_METHOD'] == 'POST') { $result['status'] = 'success'; $result['text'] = 'Ваша заявка принята.'; $unsorted_list = $amo->get_url('api/unsorted/list/', false, '/?api_key='.$settings['USER_HASH'].'&login='.$settings['USER_LOGIN']); $email = $_POST['email']; $phone = preg_replace('/\D/', '', $_POST['phone']); if (!empty($unsorted_list['response']['unsorted']['summary']['forms'])) { foreach ($unsorted_list['response']['unsorted']['list'] as $form) { $result['text'] .= $form['source_data']['data']['123164_1']['value'][0].' '; if ($email == $form['source_data']['data']['123164_1']['value'][0] || $phone == preg_replace('/\D/', '', $form['source_data']['data']['123162_1']['value'][0])) { $result['status'] = 'fail'; $result['text'] = 'Вы уже подавали заявку с таким email или телефоном.'; break; } } } if ($result['status'] == 'success') { $data = array(); $data['request']['unsorted'] = array( 'category' => 'forms', 'add' => array ( array( 'source' => $_SERVER["SERVER_NAME"], 'source_uid' => NULL, 'data' => array( 'leads' => array( array( 'custom_fields' => array( array( 'id' => 123162, 'values' => array( array( 'value' => $_POST['phone'], ), ), ), array( 'id' => 123164, 'values' => array( array( 'value' => $_POST['email'], ), ), ), ), 'name' => 'Заказ звонка', 'tags' => 'callback', ), ), 'contacts' => array( array( 'name' => $_POST['name'], 'custom_fields' => array( array( 'id' => 123162, 'values' => array( array( 'enum' => 286894, 'value' => $_POST['phone'], ), ), ), array( 'id' => 123164, 'values' => array( array( 'enum' => 286902, 'value' => $_POST['email'], ), ), ), ), 'tags' => 'callback', ), ), 'companies' => array(), ), 'source_data' => array( 'data' => array( 'name_1' => array( 'type' => 'text', 'id' => 'name', 'element_type' => '1', 'name' => 'Имя', 'value' => $_POST['name'], ), '123162_1' => array( 'type' => 'multitext', 'id' => '123162', 'element_type' => '1', 'name' => 'Тел.', 'value' => array( $_POST['phone'], ), ), '123164_1' => array( 'type' => 'multitext', 'id' => '123164', 'element_type' => '1', 'name' => 'Email', 'value' => array( $_POST['email'], ), ), ), 'form_id' => 1, 'form_type' => 1, 'origin' => array( 'ip' => $_SERVER["REMOTE_ADDR"], 'referer' => isset($_SERVER["HTTP_REFERER"]) ? $_SERVER["HTTP_REFERER"] : '', ), 'date' => time(), 'from' => $_SERVER["SERVER_NAME"], ), ), ), ); $r = $amo->get_url('api/unsorted/add/', $data, '/?api_key='.$settings['USER_HASH'].'&login='.$settings['USER_LOGIN']); if (!empty($r['response']['unsorted']['add']['status']) && $r['response']['unsorted']['add']['status'] == 'success') { $result['text'] = 'Ваша заявка принята.'; } else { $result['text'] = 'Ошибка! Попробуйте позже.'; } } } echo json_encode($result);
И что она говорит? Ты пойми, тут знатоков этой платформы, скорее всего фиг да нифига. А ее закидоны - это ее закидоны, а не php как такового.
@Fell-x27 мне тут не давно заказ на эту платформу поступил на 20 000 а работы там на час-два. Ну если бы я просто что то подобное делал, а так чё то не охота ворошить их апи
Ошибку нашел, я с какого-то перепоя $subdomain присвоил не то значение (значение логина), вначале правильно писал потом почему-то неправвильно стал, а вот почему у них if без скобок работает я не знаю