Немного о интеграции с CRM AMO

Немного информации о том, как настроить интеграцию с CRM AMO. Пример функций для подключения к АМО и обновления заказа. Пример на основе API авторизации.

Удобно, когда из одного места можно контролировать обмен с клиентами по множеству каналов связи. Какая-то двусмысленная фраза получилась ))) Поясню) Речь идет, конечно же, про АМО CRM. Годы идут, реклама рекламирует, директора и руководящий состав всё это впитывают, они (АМО) растут, у них появилось довольно неплохое API, а после недавних изменений OAUTH 2.0 (об этом подробнее в другой 🙂 ). Как с ним работать? Да легко)

Для начала создадим функцию для подключения:

Функция Подключение() Экспорт
HTTPСоединение = Новый HTTPСоединение("XXX.amocrm.ru",443,,,,,Новый ЗащищенноеСоединениеOpenSSL());
HTTPЗапрос = Новый HTTPЗапрос("/private/api/auth.php");
HTTPЗапрос.Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded");
HTTPЗапрос.Заголовки.Вставить("USERAGENT", "amoCRM-API-client/1.0");
HTTPЗапрос.Заголовки.Вставить("SSL_VERIFYPEER", 0);
HTTPЗапрос.Заголовки.Вставить("SSL_VERIFYHOST", 0);
HTTPЗапрос.УстановитьТелоИзСтроки("USER_LOGIN=***ЛОГИН АМО***&USER_HASH=***ХЕШ ПАРОЛЬ***", КодировкаТекста.UTF8, ИспользованиеByteOrderMark.Авто);
Попытка
Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
Куки = Ответ.Заголовки.Получить("Set-Cookie");
Возврат Куки
исключение
сообщить("Не смог подключиться к Amo!", СтатусСообщения.ОченьВажное);
Возврат Неопределено
КонецПопытки;
КонецФункции

В итоге у нас будет ключик. Он нам и нужен ) Теперь, если мы что то хотим сделать, нам не нужно каждый раз авторизовываться.

Например, мы хотим обновить заказ в АМО:


//ЗаказСсылка - ссылка на заказ, или массив заказов, если нужно несколько за раз отправить
//Подключение - наши ранее созданные куки подключением
//Транзакция - уникальный идентификатор, где то созданный ранее для удобного ведения/чтения логов
Функция ОбновитьЗаказ(ЗаказСсылка, Подключение = Неопределено, Транзакция="")
Если Подключение = Неопределено тогда
Куки = Подключение();
иначе
Куки = Подключение;
КонецЕсли;
Если Куки = Неопределено тогда
Возврат Неопределено //какие то проблемы с подключением
КонецЕсли;
ВремФайл = ПолучитьИмяВременногоФайла("json");
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.ОткрытьФайл(ВремФайл, "UTF-8");
ЗаписьJSON.ЗаписатьНачалоОбъекта();
ЗаписьJSON.ЗаписатьИмяСвойства("update");
ЗаписьJSON.ЗаписатьНачалоМассива();
Если ТипЗнч(ЗаказСсылка) = Тип("ДокументСсылка.ЗаказПокупателя") тогда
ДобавитьВМассив(ЗаписьJSON,ЗаказСсылка, Транзакция);//Заполняем телом заказа
иначеЕсли ТипЗнч(ЗаказСсылка) = Тип("Массив") тогда
для чч=0 по ЗаказСсылка.Количество()-1 цикл
ДобавитьВМассив(ЗаписьJSON,ЗаказСсылка[чч], Транзакция); //Заполняем телами заказов
КонецЦикла;
КонецЕсли;
ЗаписьJSON.ЗаписатьКонецМассива();
ЗаписьJSON.ЗаписатьКонецОбъекта();
ЗаписьJSON.УстановитьСтроку();
ЗаписьJSON.Закрыть();
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать(ВремФайл, "UTF-8");
СтрокаJSON = Текст.ПолучитьТекст();
HTTPСоединение = Новый HTTPСоединение("XXX.amocrm.ru",443,,,,,Новый ЗащищенноеСоединениеOpenSSL());
HTTPЗапрос = Новый HTTPЗапрос("/api/v2/leads"); ///api/v2/leads
HTTPЗапрос.Заголовки.Вставить("RETURNTRANSFER", Истина);
HTTPЗапрос.Заголовки.Вставить("USERAGENT", "amoCRM-API-client/1.0");
HTTPЗапрос.Заголовки.Вставить("URL", "https://XXX.amocrm.ru/api/v2/leads");
HTTPЗапрос.Заголовки.Вставить("CUSTOMREQUEST", "POST");
HTTPЗапрос.Заголовки.Вставить("POSTFIELDS", КодироватьСтроку(СтрокаJSON,СпособКодированияСтроки.КодировкаURL));
HTTPЗапрос.Заголовки.Вставить("HEADER", Ложь);
HTTPЗапрос.Заголовки.Вставить("Cookie", Куки);
HTTPЗапрос.Заголовки.Вставить("SSL_VERIFYPEER", 0);
HTTPЗапрос.Заголовки.Вставить("SSL_VERIFYHOST", 0);
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.Авто);
Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
Если Ответ.КодСостояния = 200 тогда
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку("UTF-8"));
ОтветВСтруктуре1С = ПрочитатьJSON(ЧтениеJSON);
Если ОтветВСтруктуре1С<>Неопределено тогда
Возврат ОтветВСтруктуре1С._embedded.items[0].id;
иначе
Возврат Ложь // подключились, но что то пошло не так
КонецЕсли;
иначе
Возврат Ложь // подключились, но что то пошло не так
КонецЕсли;
КонецФункции

Вот и пригодились куки) А если в первый раз вызывается функция обновления заказа, ну ничего, вызовется функция подключения.

Код сокращен до минимума из первоначального моего варианта, чисто показать пример, кое что, кое где в этом варианте уже не очень логично.

Всем удачи! )

6 Comments

  1. xxxAndricxxx

    Вместо XXX.amocrm.ru указываете Ваш домен на амо

    Reply
  2. denic73

    А разве не «..Механизм oAuth авторизации пришел на смену устаревшему механизму API-ключей пользователей» ? И метод и адрес ресурса авторизации — POST /oauth2/access_token

    Reply
  3. xxxAndricxxx

    (2) да вроде «разве не» )) можно и так ))

    Reply
  4. denic73

    (3) по вашему методу новые пользователи, которые решат создать интеграцию, уже не авторизуются, потому как API ключа им уже не предоставляют. А есть у них client_id и client_secret для получения токенов.

    Reply
  5. xxxAndricxxx

    (4) ок, ну значит не всем подходит способ ) в принципе там не много переделать ) как нибудь расскажу с учетом Вашей поправки, спасибо )

    Reply
  6. Region102

    Лучше один раз увидеть https://www.youtube.com/watch?v=hDbZJFSARhU&list=PLkvJd0RKh5mn_BAUSplPBXrTLSeFgyNvP чем 100 раз прочитать )

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *