Авторизация в сервисе amoCRM

Особенности авторизации в amoCRM и 1С
В данной статье рассказывается о способе авторизации в amoCRM для организации обмена данными со стороны 1С.
С чего начнём? Конечно же с изучения официальной документации. Документация располагается вот тут: https://www.amocrm.ru/developers/content/api/auth. Естественно применительно к 1С нет ни примеров ни синтаксиса. И в общем то вообще возникают большие вопросы по этому вот абзацу:
"В ответ на запрос, при успешной авторизации, кроме тела ответа возвращается cookie файл, содержащий ключ сессии, аналогично работе с WEB-браузером. При дальнейших запросах к API-методам нужно обратно передавать полученные cookie. Время жизни сессии - 15 минут."
Перевожу на русский пока без применения языка 1С: В ответ на запрос, при успешной авторизации, кроме тела ответа, в заголовках ответа мы видим приблизительно следующий заголовок Set-Cookie: session_id=44fufo0l2j8acspbt8n87i73vprmb1dq4m8r22lbc81kocu93in0; path=/; domain=.amocrm.ru; secure; HttpOnly . Идентификатор сессии у Вас будет естественно Ваш. Время жизни сессии 15 минут. И тут возникает закономерный вопрос. А что с этими данными делать? Куда его передавать? Отвечаю... При запросе к любым методам API amoCRM полученный заголовок необходимо передавать в виде заголовка к запросу. Но не как заголовок "Set-Cookie", а как заголовок "Cookie" . Возможно кому то это было очевидно при прочтении текста на сайте, но я сразу не понял что к чему. В общем так вот оно точно работает.
Теперь рассмотрим код функции авторизации 1С. Привожу код так как есть, комментарии приведены в коде:


//Возвращает структуру ответа на авторизацию
// Параметры:
// АдресСайта - Строка - адрес сайта в сервисе amoCRM без "https://"
// Логин - Строка - Логин пользователя в сервисе amoCRM (электронная почта)
// АПИКлюч - Строка - Ключ пользователя в сервисе amoCRM (можно получить в настройках)
// МассивОшибок - Массив - Массив строковых значений с кодами ответа сервера для записи в журнал обмена или журнал регистрации передается массив строк или пустой массив
// Возвращаемое значение:
//  Структура - со свойствами:
//  * РезультатАвторизации	-	Структура	- Структура JSON согласно описанию на сайте amoCRM (https://www.amocrm.ru/developers/content/api/auth)
//  * КодСостояния 			-	Число		- Код ответа сервера
//  * ЗаголовокАвторизации	-	Строка		- Заголовок для авторизации с идентификатором сессии который необходимо вставить в заголовки при отправки запросов через API
//  * СессияИстекает		-	Дата		- Рассчетное время истечения сессии
Функция АвторизацияНаСервере(АдресСайта,Логин,АПИКлюч, МассивОшибок) Экспорт
	СтруктураОтвета = Новый Структура;
	Соединение = Новый HTTPСоединение(АдресСайта,443,,,,,Новый ЗащищенноеСоединениеOpenSSL()); // Устанавливаем защищенное соединение с сайтом
	Запрос = Новый HTTPЗапрос("/private/api/auth.php?USER_LOGIN=" + Логин + "&USER_HASH=" + АПИКлюч + "&type=json"); // Формируем запрос на авторизацию
	Результат = Соединение.ОтправитьДляОбработки(Запрос); // Отправляем запрос через соединение
	Поток = Результат.ПолучитьТелоКакПоток(); // Получаем JSON поток для разбора
	Чтение = Новый ЧтениеJSON; // Создаем чтение
	Чтение.ОткрытьПоток(Поток); // Открываем поток
	СтруктураОтвета.Вставить("РезультатАвторизации",ПрочитатьJSON(Чтение)); // Вставляем в нашу структуру структуру ответа если понадобиться подробный анализ
	СтруктураОтвета.Вставить("КодСостояния",Результат.КодСостояния); // Вставляем в нашу структуру код ответа сервера
	Если Результат.КодСостояния = 200 Тогда // Отрабатываем успешное получение и остальные ошибки
		Куки = Результат.Заголовки.Получить("Set-Cookie"); // Получаем заголовок с идентификатором сессии
		СтруктураОтвета.Вставить("ЗаголовокАвторизации",Куки); // Вставляем в нашу структуру идентификатор сессии
		СтруктураОтвета.Вставить("СессияИстекает",ТекущаяДата() + 840); // Вставляем в нашу структуру рассчётное время истечения сессии (дата +14 минут) Точное время истечения сесии есть в заголовках
	ИначеЕсли Результат.КодСостояния = 401 Тогда
		МассивОшибок.Добавить("Ошибка авторизации код ответа: " + Результат.КодСостояния);
		СтруктураОтвета.Вставить("ЗаголовкиАвторизации","");
	ИначеЕсли Результат.КодСостояния = 403 Тогда
		МассивОшибок.Добавить("Ошибка авторизации код ответа: " + Результат.КодСостояния);
		СтруктураОтвета.Вставить("ЗаголовкиАвторизации","");
	Иначе
		МассивОшибок.Добавить("Ошибка авторизации код ответа: " + Результат.КодСостояния);
		СтруктураОтвета.Вставить("ЗаголовкиАвторизации","");
	КонецЕсли;
	Чтение.Закрыть(); // Закрываем чтение JSON
	Соединение = Неопределено; // Закрываем наше соединение
	Возврат СтруктураОтвета; // Возвращаем структуру ответа
КонецФункции
Вернуться обратно
ОПУБЛИКОВАТЬ В СОЦ.СЕТЯХ
Моя корзина
Отложенные
Недоступно
Избранное

Ваша корзина пуста, для оформления заказа перейдите в каталог и выберите интересующие вас товары

Перейти в каталог

Перейти в каталог

Товары, недоступные к заказу

Добавляйте ваши товары в избранное

Перейти в каталог

Избранное

Добавляйте ваши товары в избранное

Перейти в каталог