За последние 24 часа нас посетил 22401 программист и 997 роботов. Сейчас ищут 645 программистов ...

Как добавить задачу в AmoCRM (выдает ошибку 0)?

Тема в разделе "PHP для новичков", создана пользователем Grigorie1990, 6 июн 2017.

Метки:
  1. Grigorie1990

    Grigorie1990 Новичок

    С нами с:
    2 май 2017
    Сообщения:
    7
    Симпатии:
    0
    Доброй ночи)
    Изучаю документацию на AmoCRM https://developers.amocrm.ru/rest_api/tasks_set.php. Проверил код для авторизации и добавления сделки, подставив свои данные все заработало. С добавлением задачи проблема, код их выдает ошибку 0.
    Проверил запрос в консоли https://developers.amocrm.ru/console.php через нее добавляет. В код разве что в паре мест фигурные скобки добавил (пропущены были в условиях), тоже в дугих примерах делал. Спасибо за ответы)

    PHP:
    1. <?php
    2.  
    3.     $tasks['request']['tasks']['add']=array(
    4.       #Привязываем к сделке
    5.      array(
    6.         'element_id'=>215413, #ID сделки
    7.        'element_type'=>2, #Показываем, что это - сделка, а не контакт
    8.        'task_type'=>1, #Звонок
    9.        'text'=>'My First Task',
    10.         'responsible_user_id'=>1529245,
    11.         'complete_till'=>1375285346
    12.       )
    13.     );
    14.  
    15. //Теперь подготовим данные, необходимые для запроса к серверу
    16.  
    17.     $subdomain='gvandri21@gmail.com'; #Наш аккаунт - поддомен
    18.    #Формируем ссылку для запроса
    19.    $link='https://'.$subdomain.'.amocrm.ru/private/api/v2/json/tasks/set';
    20.  
    21. //Нам необходимо инициировать запрос к серверу. Воспользуемся библиотекой cURL (поставляется в составе PHP). Подробнее о работе с этой библиотекой Вы можете прочитать в мануале.
    22.  
    23.     $curl=curl_init(); #Сохраняем дескриптор сеанса cURL
    24.    #Устанавливаем необходимые опции для сеанса cURL
    25.    curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
    26.     curl_setopt($curl,CURLOPT_USERAGENT,'amoCRM-API-client/1.0');
    27.     curl_setopt($curl,CURLOPT_URL,$link);
    28.     curl_setopt($curl,CURLOPT_CUSTOMREQUEST,'POST');
    29.     curl_setopt($curl,CURLOPT_POSTFIELDS,json_encode($tasks));
    30.     curl_setopt($curl,CURLOPT_HTTPHEADER,array('Content-Type: application/json'));
    31.     curl_setopt($curl,CURLOPT_HEADER,false);
    32.     curl_setopt($curl,CURLOPT_COOKIEFILE,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
    33.    curl_setopt($curl,CURLOPT_COOKIEJAR,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
    34.    curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0);
    35.     curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0);
    36.    
    37.     $out=curl_exec($curl); #Инициируем запрос к API и сохраняем ответ в переменную
    38.    $code=curl_getinfo($curl,CURLINFO_HTTP_CODE);
    39.  
    40.  
    41. //Теперь мы можем обработать ответ, полученный от сервера. Это пример. Вы можете обработать данные своим способом.
    42.  
    43.     $code=(int)$code;
    44.     $errors=array(
    45.       301=>'Moved permanently',
    46.       400=>'Bad request',
    47.       401=>'Unauthorized',
    48.       403=>'Forbidden',
    49.       404=>'Not found',
    50.       500=>'Internal server error',
    51.       502=>'Bad gateway',
    52.       503=>'Service unavailable'
    53.     );
    54.     try
    55.     {
    56.       #Если код ответа не равен 200 или 204 - возвращаем сообщение об ошибке
    57.      if($code!=200 && $code!=204){
    58.         throw new Exception(isset($errors[$code]) ? $errors[$code] : 'Undescribed error',$code);
    59.       }
    60.            
    61.     }
    62.     catch(Exception $E)
    63.     {
    64.       die('Ошибка: '.$E->getMessage().PHP_EOL.'Код ошибки: '.$E->getCode());
    65.     }
    66.    
    67.     /**
    68.      * Данные получаем в формате JSON, поэтому, для получения читаемых данных,
    69.      * нам придётся перевести ответ в формат, понятный PHP
    70.      */
    71.     $Response=json_decode($out,true);
    72.     $Response=$Response['response']['tasks']['add'];
    73.    
    74.     $output='ID добавленных задач:'.PHP_EOL;
    75.     foreach($Response as $v){
    76.       if(is_array($v)){
    77.         $output.=$v['id'].PHP_EOL;
    78.       }
    79.     }
    80.              
    81.     return $output;
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    я такую не знаю, прости
    что говорят на тамошнем форуме?
     
  3. Grigorie1990

    Grigorie1990 Новичок

    С нами с:
    2 май 2017
    Сообщения:
    7
    Симпатии:
    0
    форума такого нет, только поддержка. Переменная запроса $out ничего не возвращает. Есть также похожий скрипт авторизации который держит сессию вроде 15 минут. Я запускаю их вместе из одного файла вызываю их. А в консоли там вручеую авторизовываешься. Пока не понятно.
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    может другую CMS рассмотришь?
     
  5. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    1. Авторизация успешно проходит? Тут я понимаю этого куска нет?
    2. Сравнить все-таки запрос который пишете в консоли и отправляете сами ... фигурные скобки - о .... чувак, они офигительно много значат, особенно в формате json
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Может поможет. Хотя в чём проблема? Задача не добавляется?
    PHP:
    1. <?php
    2. header('Content-Type: application/json; charset=utf-8');
    3.  
    4. /**
    5. * amoCRM Helper
    6. */
    7. class amoHelper
    8. {
    9.     public $settings = array();
    10.     public $isAuth = false;
    11.    
    12.     function __construct($settings)
    13.     {
    14.         if (
    15.             is_array($settings) &&
    16.             isset(
    17.                 $settings['USER_LOGIN'],
    18.                 $settings['USER_HASH'],
    19.                 $settings['subdomain']
    20.             )
    21.         ) {
    22.             $this->settings = $settings;
    23.         }
    24.     }
    25.  
    26.     public function get_url($api_path, $post_data = false, $params = '', $auth = false) {
    27.  
    28.         if (!$this->isAuth && !$auth) {
    29.             $out = $this->get_url('private/api/auth.php', $this->settings, '?type=json', true);
    30.             if($out && isset($out['response']['auth']) && $out['response']['auth'] == 'true') {
    31.                 $this->isAuth = true;
    32.             } else {
    33.                 return false;
    34.             }
    35.         }
    36.  
    37.         $link = 'https://'.$this->settings['subdomain']
    38.             .'.amocrm.ru/'.$api_path.$params;
    39.  
    40.         $options = array(
    41.             CURLOPT_URL => $link,
    42.             CURLOPT_HEADER => false,
    43.             CURLOPT_RETURNTRANSFER => true,
    44.             CURLOPT_USERAGENT => 'amoCRM-API-client/1.0',
    45.             CURLOPT_HTTPHEADER => array('Content-Type: application/json', 'Accept: application/json'),
    46.             CURLOPT_SSL_VERIFYPEER => 0,
    47.             CURLOPT_SSL_VERIFYHOST => 0,
    48.             CURLOPT_COOKIEFILE => dirname(__FILE__).'/cookie.txt',
    49.             CURLOPT_COOKIEJAR => dirname(__FILE__).'/cookie.txt',
    50.         );
    51.  
    52.         if (is_array($post_data)) {
    53.             $options[CURLOPT_CUSTOMREQUEST] = 'POST';
    54.             $options[CURLOPT_POSTFIELDS] = json_encode($post_data);
    55.         }
    56.  
    57.         //var_export($options);
    58.  
    59.         $curl = curl_init();
    60.  
    61.         curl_setopt_array($curl, $options);
    62.  
    63.         $out = curl_exec($curl);
    64.  
    65.         $code = (int)curl_getinfo($curl,CURLINFO_HTTP_CODE);
    66.  
    67.         curl_close($curl);
    68.  
    69.         if (in_array($code, array(200, 201)) && !empty($out)) {
    70.             $data = json_decode($out, true);
    71.  
    72.             $error = json_last_error();
    73.  
    74.             if ($error === JSON_ERROR_NONE) {
    75.                 return $data;
    76.             }
    77.         }
    78.         return false;
    79.     }
    80. }
    81.  
    82. $settings = array(
    83.     'USER_LOGIN' => '',
    84.     'USER_HASH' => '',
    85.     'subdomain' => '',
    86. );
    87.  
    88. $amo = new amoHelper($settings);
    89.  
    90. $required_fields = array(
    91.     'name' => 'Имя',
    92.     'email' => 'Email',
    93.     'phone' =>'Телефон',
    94. );
    95.  
    96. $errors = array_diff_key($required_fields, array_filter($_POST));
    97.  
    98. $result['text'] = '';
    99.  
    100. if ($_SERVER['REQUEST_METHOD'] == 'POST' && is_array($errors) && count($errors)>0) {
    101.  
    102.     foreach ($errors as $value) {
    103.         $result['text'] .= "Заполните поле: ".$value."<br>";
    104.     }
    105.  
    106.     $result['status'] = 'fail';
    107.  
    108. } elseif ($_SERVER['REQUEST_METHOD'] == 'POST') {
    109.  
    110.     $result['status'] = 'success';
    111.     $result['text'] = 'Ваша заявка принята.';
    112.  
    113.     $unsorted_list = $amo->get_url('api/unsorted/list/', false, '/?api_key='.$settings['USER_HASH'].'&login='.$settings['USER_LOGIN']);
    114.  
    115.     $email = $_POST['email'];
    116.     $phone = preg_replace('/\D/', '', $_POST['phone']);
    117.  
    118.     if (!empty($unsorted_list['response']['unsorted']['summary']['forms'])) {
    119.         foreach ($unsorted_list['response']['unsorted']['list'] as $form) {
    120.             $result['text'] .= $form['source_data']['data']['123164_1']['value'][0].' ';
    121.             if ($email == $form['source_data']['data']['123164_1']['value'][0] || $phone == preg_replace('/\D/', '', $form['source_data']['data']['123162_1']['value'][0])) {
    122.                 $result['status'] = 'fail';
    123.                 $result['text'] = 'Вы уже подавали заявку с таким email или телефоном.';
    124.                 break;
    125.             }
    126.         }
    127.     }
    128.  
    129.     if ($result['status'] == 'success') {
    130.  
    131.         $data = array();
    132.         $data['request']['unsorted'] = array(
    133.             'category' => 'forms',
    134.             'add' => array (
    135.                 array(
    136.                     'source' => $_SERVER["SERVER_NAME"],
    137.                     'source_uid' => NULL,
    138.                     'data' => array(
    139.                         'leads' => array(
    140.                             array(
    141.                                 'custom_fields' => array(
    142.                                     array(
    143.                                         'id' => 123162,
    144.                                         'values' => array(
    145.                                             array(
    146.                                                 'value' => $_POST['phone'],
    147.                                             ),
    148.                                         ),
    149.                                     ),
    150.                                     array(
    151.                                         'id' => 123164,
    152.                                         'values' => array(
    153.                                             array(
    154.                                                 'value' => $_POST['email'],
    155.                                             ),
    156.                                         ),
    157.                                     ),
    158.                                 ),
    159.                                 'name' => 'Заказ звонка',
    160.                                 'tags' => 'callback',
    161.                             ),
    162.                         ),
    163.                         'contacts' => array(
    164.                             array(
    165.                                 'name' => $_POST['name'],
    166.                                 'custom_fields' => array(
    167.                                     array(
    168.                                         'id' => 123162,
    169.                                         'values' => array(
    170.                                             array(
    171.                                                 'enum' => 286894,
    172.                                                 'value' => $_POST['phone'],
    173.                                             ),
    174.                                         ),
    175.                                     ),
    176.                                     array(
    177.                                         'id' => 123164,
    178.                                         'values' => array(
    179.                                             array(
    180.                                                 'enum' => 286902,
    181.                                                 'value' => $_POST['email'],
    182.                                             ),
    183.                                         ),
    184.                                     ),
    185.                                 ),
    186.                                 'tags' => 'callback',
    187.                             ),
    188.                         ),
    189.                         'companies' => array(),
    190.                     ),
    191.                     'source_data' => array(
    192.                         'data' => array(
    193.                             'name_1' => array(
    194.                                 'type' => 'text',
    195.                                 'id' => 'name',
    196.                                 'element_type' => '1',
    197.                                 'name' => 'Имя',
    198.                                 'value' => $_POST['name'],
    199.                             ),
    200.                             '123162_1' => array(
    201.                                 'type' => 'multitext',
    202.                                 'id' => '123162',
    203.                                 'element_type' => '1',
    204.                                 'name' => 'Тел.',
    205.                                 'value' => array(
    206.                                     $_POST['phone'],
    207.                                 ),
    208.                             ),
    209.                             '123164_1' => array(
    210.                                 'type' => 'multitext',
    211.                                 'id' => '123164',
    212.                                 'element_type' => '1',
    213.                                 'name' => 'Email',
    214.                                 'value' => array(
    215.                                     $_POST['email'],
    216.                                 ),
    217.                             ),
    218.                         ),
    219.                         'form_id' => 1,
    220.                         'form_type' => 1,
    221.                         'origin' => array(
    222.                             'ip' => $_SERVER["REMOTE_ADDR"],
    223.                             'referer' => isset($_SERVER["HTTP_REFERER"]) ? $_SERVER["HTTP_REFERER"] : '',
    224.                         ),
    225.                         'date' => time(),
    226.                         'from' => $_SERVER["SERVER_NAME"],
    227.                     ),
    228.                 ),
    229.             ),
    230.         );
    231.  
    232.         $r = $amo->get_url('api/unsorted/add/', $data, '/?api_key='.$settings['USER_HASH'].'&login='.$settings['USER_LOGIN']);
    233.         if (!empty($r['response']['unsorted']['add']['status']) && $r['response']['unsorted']['add']['status'] == 'success') {
    234.             $result['text'] = 'Ваша заявка принята.';
    235.         } else {
    236.             $result['text'] = 'Ошибка! Попробуйте позже.';
    237.         }
    238.     }
    239.  
    240. }
    241.  
    242. echo json_encode($result);
     
  7. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    И что она говорит? Ты пойми, тут знатоков этой платформы, скорее всего фиг да нифига. А ее закидоны - это ее закидоны, а не php как такового.
     
  8. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @Fell-x27 мне тут не давно заказ на эту платформу поступил на 20 000 а работы там на час-два. Ну если бы я просто что то подобное делал, а так чё то не охота ворошить их апи
     
    #8 askanim, 6 июн 2017
    Последнее редактирование: 6 июн 2017
    denis01 нравится это.
  9. Grigorie1990

    Grigorie1990 Новичок

    С нами с:
    2 май 2017
    Сообщения:
    7
    Симпатии:
    0
    Ошибку нашел, я с какого-то перепоя $subdomain присвоил не то значение (значение логина), вначале правильно писал потом почему-то неправвильно стал, а вот почему у них if без скобок работает я не знаю
     
    #9 Grigorie1990, 6 июн 2017
    Последнее редактирование: 6 июн 2017
  10. Grigorie1990

    Grigorie1990 Новичок

    С нами с:
    2 май 2017
    Сообщения:
    7
    Симпатии:
    0
    Интересный код, а что он делает? я в нем свои $settings подставил и запустил, но ничего не понял
     
  11. Grigorie1990

    Grigorie1990 Новичок

    С нами с:
    2 май 2017
    Сообщения:
    7
    Симпатии:
    0
    согласен, crm это впринципе вещь в себе такая