Ноя
07

Привет, друзья, выкладываю библиотеку, которую сам использую в своей работе, она очень простая, умещается в одном файле, легкая и понятная. Позволяет копировать примеры запросов из документации по api AmoCRM прямо в ваш код и сразу же запускать.

В ней есть метод авторизации, метод запросов, свойство авторизован или нет и служебный метод для вывода дампа с форматированием.

Рабочий пример авторизации в апи AmoCRM и запрос на последние сделки по api.
require_once('hamtim-amocrm.php');
$amo = new HamtimAmocrm('test@email.com'/*логин*/, 'API'/*api ключ*/, 'SUBDOMAIN'/*субдомен*/);

if(!$amo->auth) die('Нет соединения с amoCRM');

//все примеры запросов на https://developers.amocrm.ru/rest_api/
//получаем список сделок в работе
$path = '/private/api/v2/json/leads/list';

//формируем дату -1 день
$ifModifiedSince = date('D, d M Y H:i:s', (time()-1*24*3600));

//если передается пустой массив fields, то данные post не передаются в заголовке запроса
$fields = array();

//делаем запрос
$leads = $amo->q($path, $fields, $ifModifiedSince);

if(!$leads) die('Сделок в работе не найдено');

//выводим дамп с сделками из ответа
print_r($leads);

Как видите достаточно сложный запрос легко сделать с помощью моей библиотеки.

Создание сделки с помощью api AmoCRM
//создаем новую сделку
$path = '/private/api/v2/json/leads/set';
$fields['request']['leads']['add']=array(
array(
'name'=>'Название сделки',
'status_id'=>12345,#id статуса, обязательное поле
//'responsible_user_id'=>12345,#id Отвественного
'tags' => 'создано с помощью hamtim.ru', #Теги
)
);
$leadAnswer = $amo->q($path, $fields);

Как работать с библиотекой (по шагам)

  1. Подключаем с помощью require или include
  2. Создаем объект с параметрами авторизации$amo = new HamtimAmocrm('test@email.com'/*логин*/, 'API'/*api ключ*/, 'SUBDOMAIN'/*субдомен*/);
  3. Авторизуемся
    if(!$amo->auth) die('Нет соединения с amoCRM');
  4. Делаем запросы к aпи амоцрм

Скачать библиотеку hamtim-amocrm
На github.com

Вопросы, предложения и благодарности пишите в комментариях.
Нужна разработка? Свяжитесь со мной.

16 Comments:
Пись 01.03.2018 Ответить

спасибо, я заработал так первый миллион!

Сергей 06.03.2018 Ответить

https://toster.ru/q/511651 🙂

timach-ufa 06.03.2018 Ответить

Ответил на тостере. Дублирую здесь:
в библиотеке запрос делается так
$leads = $amo->q($path, $fields);
и ид сделки и вообще создалась ли сделка и тд информация возвращается методом (то есть ответ от амоцрм ) и в данном случае присвоится в $leads, посмотрите его дамп. Там найдете нужный вам ИД.

На моем канале есть пара стримов, где я показываю, как работать с апи амоцрм.

https://www.youtube.com/watch?v=Jf4d6F3eokM
https://www.youtube.com/watch?v=WJPQuwMY3FM

Сергей 10.03.2018 Ответить

Добрый день. Вопрос такой, как при помощи вашей библиотеки ПРИНЯТЬ запрос web hooks. Т.е. например создал я вот такой веб хук:
URL: http://mysite.ru/amo_update_user.php
Действие: Изменить контакт

Подскажите код для файла amo_update_user.php чтобы например передать в эту строку имя изменяемого пользователя:
$this->users->updateuser(array(‘id’=>$НОВОЕ_ИМЯ_В_CRM))

timach-ufa 10.03.2018 Ответить

Добрый день, Сергей.

В вашем случае при изменении контакта amoCRM отправляет как-будто форму методом POST на адрес http://mysite.ru/amo_update_user.php
Соответственно все данные, которые передает амоцрм, вы можете получить из массива $_POST. Как посмотреть, что получает скрипт, я описывал в посте http://hamtim.ru/2018/01/24/как-смотреть-данные-вебхуков-amocrm-быстро/

Сергей 10.03.2018

Огромное вам спасибо 🙂

Сергей 10.03.2018 Ответить

Точнее чтобы при изменении пользователя в CRM, в этом файле выполнялось действие:
$this->users->updateuser(array(‘id’=>$НОВОЕ_ИМЯ_В_CRM))

timach-ufa 10.03.2018 Ответить

Незнаю, что за метод (функция) у вас, но мне кажется данные не верные, id должен быть числом. Скорее всего правильно будет:
array(
‘id’=>1111,
‘name’=>$НОВОЕ_ИМЯ_В_CRM,
);
Где 1111 это id сущности из вебхука

Сергей 10.03.2018

Это я на скорую руку написал, точный код вот такой
$this->users->updateuser($user_amocrm_id, array(‘name’=>$новое_имя_в_crm));

Владислав 04.05.2018 Ответить

Добрый день! Возвращает такой

stdClass Object
(
[response] => stdClass Object
(
[error] => Неверный логин или пароль
[error_code] => 110
[ip] => 95.213.174.147
[domain] => acc522ed9547785b.amocrm.ru
[server_time] => 1525420626
)

)

timach-ufa 04.05.2018 Ответить

Смотрите Коды ошибок в документации amocrm api, это значит неправильный логин пароль, проверьте, если все правильно, то я знаю особенность некоторых хостингов, там http_build_query() работает не так как амо ожидает.

Владислав 04.05.2018

Я просто заметил такую фразу в документации. Но вот интересно как его передать на другой IP? (((

401 Unauthorized Not Authorized. На сервере нет данных аккаунта. Нужно сделать запрос на другой сервер по переданному IP.

Описание ошибки 401 Not Authorized (на сервере нет данных аккаунта)
Возникает, когда аккаунт зарегистрирован на одном сервере, а запрос идет к другому серверу, на котором нет данных этого аккаунта. Чаще всего это бывает, когда аккаунт зарегистрирован на одном сервере, к примеру, на amocrm.ru, а запрос к API идет на другой сервер, к примеру на amocrm.com.
Для обеспечения бесперебойной работы проекта у нас используется не один, а несколько серверов, поэтому бывают ситуации, когда в ответе может вернуться HTTP-код 401 и error_code 401, даже на верные данные авторизации. В этот момент в ответе также будет передан верный IP сервера, на который должен быть произведен повторный запрос. Обратите внимание, что в таком случае клиентом должен быть передан тот же hostname, который использовался и при запросе, выдавшем 401 для верной работы сертификатов.

timach-ufa 04.05.2018

Вообще-то у вас 110 код, а не 401. Я закомметил на гитхаб изменения кода, должно заработать, если моя гипотеза верна.

Владислав 04.05.2018

Скачал новую версию с гитхаба, тоже самое пишет ((

Владислав 04.05.2018 Ответить

Не подскажете что делать?

Владислав 07.05.2018 Ответить

Добрый день! Подскажите, а есть запрос список сделок по номеру телефона ?

Leave a Comment:

Your email address will not be published.