Начало работы с API от AmoCRM на PHP
Довольно долгое время уже выполняю задачи, связанные с работой с AmoCRM, с внешним к ней взаимодействием через API. Ниже в заметке расскажу о впечатлении и порядке работы с ней, подключении.
Плюсы
Сначала много хорошего
- Шустрая CRM
- Много документации
- Пробный период
- Пытающаяся помочь техподдержка
- После запуска и отладки проблем обычно нет
- Информативные сообщения по ошибкам
Есть и недостатки
- Лимиты
- Иногда недоступна
- Много версий API
- Много документации
- Неочевидные вещи
- Не самая простая первоначальная настройка
Давайте с последнего минуса и начнем. Не самый большой минус, но все же. Итак, для начала надо перейти в amoMarket и вверху в меню выбрать «Создать интеграцию». Я довольно много времени потратил на поиск, для того кто видит в первый раз это не очевидно.
Дальше выбираем "Внешняя интеграция" – так как нам нужно только взаимодействие по апи. Обратите внимание на еще один момент. Хотя интеграции в одной крм будут видны всем пользователям, которым положено её видеть, но создавайте интеграцию только под тем пользователем, который вы не собираетесь удалять. Так как после удаления пользователя она хоть и останется, но просто прекратит работу. Также не очень очевидный для меня момент, но видимо разработчикам AmoCRM виднее.
При создании необходимо будет добавить и запомнить (сохранить) ссылку для перенаправления – это один из необходимых параметров для апи. После создания у вас будет еще три основных параметра.
Эти параметры сохраните в такую табличку и добавьте туда еще и субдомен. Поля для токенов создайте, но оставьте пустыми
Дальше надо написать три функции. Достаем данные из базы
function get_all_val_amo(){ global $conn; $ret = Array(); $query3 ="SELECT * FROM `amo_settings`"; if ($result3 = $conn->query($query3)) { while ($row3 = $result3->fetch_assoc()) { $ret[$row3['komm']] = $row3['val']; } } return $ret; }Обновляем данные в базе
function set_settings_amo($arr){ global $conn; foreach ($arr as $komm=>$val){ $query3 = "UPDATE `amo_settings` SET `val` = '$val' WHERE `komm` = '$komm'"; mysqli_query($conn, $query3) or die (mysqli_error($conn)); } }И самая главная – которая получает эти самые данные от амо крм
function update_amo_tokens() { $all_val = get_all_val_amo(); $client_id = $all_val['client_id']; $client_secret = $all_val['client_secret']; $refresh_token = $all_val['refresh_token']; $redirect_uri = $all_val['redirect_uri']; $subdomain = $all_val['subdomain']; $link = 'https://' . $subdomain . '.amocrm.ru/oauth2/access_token'; $data = [ 'client_id' => $client_id, 'client_secret' => $client_secret, 'grant_type' => 'refresh_token', 'refresh_token' => $refresh_token, 'redirect_uri' => $redirect_uri, ]; $curl = curl_init(); //Сохраняем дескриптор сеанса cURL curl_setopt($curl,CURLOPT_RETURNTRANSFER, true); curl_setopt($curl,CURLOPT_USERAGENT,'amoCRM-oAuth-client/1.0'); curl_setopt($curl,CURLOPT_URL, $link); curl_setopt($curl,CURLOPT_HTTPHEADER,['Content-Type:application/json']); curl_setopt($curl,CURLOPT_HEADER, false); curl_setopt($curl,CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt($curl,CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, 1); curl_setopt($curl,CURLOPT_SSL_VERIFYHOST, 2); $out = curl_exec($curl); $code = curl_getinfo($curl, CURLINFO_HTTP_CODE); curl_close($curl); $code = (int)$code; $errors = [ 400 => 'Bad request', 401 => 'Unauthorized', 403 => 'Forbidden', 404 => 'Not found', 500 => 'Internal server error', 502 => 'Bad gateway', 503 => 'Service unavailable', ]; try { if ($code < 200 || $code > 204) { throw new Exception(isset($errors[$code]) ? $errors[$code] : 'Undefined error', $code); } } catch(\Exception $e) { die('Ошибка: ' . $e->getMessage() . PHP_EOL . 'Код ошибки: ' . $e->getCode()); } $response = json_decode($out, true); If ($response) { set_settings_amo($response); } }Теперь надо создать файл PHP с этими функциями прямо в нем например и вызовом последней:
<?php update_amo_tokens(); ?>И вызывать его один раз из браузера в течении 20 минут после создания или изменения интеграции. А потом поставить на выполнение по крону раз в сутки, например в 3 часа утра. Это был первый этап подключения к апи, теперь у вас всегда есть актуальный токен и можно писать функции поиска и выгрузки в амокрм, которые весьма интересны и отличаются в разных версиях апи. Чем мы и займемся в следующих статьях.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.