Начало работы с 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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, php, api, amocrm, crm




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




Как изменить разрешения на файл с помощью C#
Неочевидный взлом сайта
Lazy loading, или появление изображений при скроллинге для ускорения сайта