Особенности тиражных приложений

Урок 23 из 29

Как мы рассказывали в уроке, посвященном событиям REST, в реальном тиражном приложении нужно обеспечивать сохранение и продление токенов авторизации, полученных при установке приложения на конкретный Битрикс24.

Ведь тиражное приложение, опубликованное в Битрикс24.Маркет, может одновременно использоваться на большом количестве разных порталов, а значит для очередного вызова REST запроса приложение должно указывать, к какому конкретно порталу делается вызов прямо сейчас.

Эта особенность наглядно проявляется в обработчиках событий, поэтому в текущем уроке мы покажем, как можно использовать наш SDK Crest в случае, когда приложение установлено на нескольких порталах.

REST в тиражных решениях

7 мин

При этом мы оставим бизнес-логику приложения неизменной – оно будет заниматься автоформатированием ФИО в контактах CRM, чтобы они гарантировано начинались с заглавных букв.

Зайдем в кабинет разработчика и создадим новое приложение, как мы это делали в предыдущем уроке.

Нажмем кнопку «Добавить приложение». Выберем, как и ранее, основной регион для будущей публикации решения. В карточке приложения нажмем на кнопку «Создать» и укажем тип «Использовать REST API». Убедимся, что скоуп CRM добавлен в список разделов.

Скачайте пример, прикрепленный к уроку, и загрузите его на свой сервер так же, как мы это делали на уроках, посвященным локальным интеграциям.

Вставьте в карточке версии пути к выгруженному на сервер приложению, как мы это делали ранее. Скопируйте значения из полей client_id, client_secret и вставьте их в соответствующие константы в файле settings.php.

Доступность из внешней сети

Очень важно, чтобы адрес выгруженного на сервер примера был доступен из внешней сети. Никаких localhost, никаких самоподписанных SSL-сертификатов и так далее. Проверяйте доступность вашего URL какими-то сторонними сервисами, не уповайте, пожалуйста, на то, что именно в вашем браузере этот адрес успешно открывается.

Посмотрим код примера, и начнем с файла cextrest.php.

В этом файле мы напишем своего наследника стандартного класса Crest, научив его работать с токенами авторизации от разных порталов.

Для начала мы добавим в класс внутреннюю переменную, которая будет отвечать за то, к какому именно порталу будут выполняться REST-запросы. В качестве значения этой переменной мы будем использовать идентификаторы порталов Битрикс24 member_id. Казалось бы, что лучше использовать для этого адреса порталов, однако на практике адрес портала может быть изменен пользователем. Это касается и облачных Битрикс24, и коробочных. Member_id в смысле уникальности намного надежнее.

Базовый класс, как вы знаете, сохранял токены авторизации в файле settings.json. Теперь же токены будут складироваться в папке settings в отдельных файлах, название которых формируется из значения member_id.

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

Файл install.php, практически, не отличается от примера, который я показывал в уроке про REST-события. Однако, вместо класса Crest в текущем примере я обращался к классу наследнику CExtRest.

Вернемся в кабинет разработчика.

Текущая страница позволит установить приложение на наш Битрикс24 и протестировать его до публикации в Битрикс24.Маркет.

Укажем адрес своего Битрикс24, на котором мы являемся администратором и нажмем Установить.

Произойдет редирект на портал и откроется интерфейс установки приложения. Когда мы опубликуем приложение в каталоге, заполнив описания и прикрепив скриншоты, установка будет выглядеть эффектнее, но сейчас нам нужно просто убедиться в технической работоспособности приложения.

Битрикс24 автоматически откроет приложение после завершения установки, поскольку у нашего приложения есть пользовательский интерфейс.

Полезно

Если основной функционал вашего приложения – это обработчики событий, которые работают незаметно для конечного пользователя, то основной URL приложения вы можете использовать для сценария онбординга, рассказывающего пользователю о функционале приложения и содержащего какие-то необходимые этапы настройки.

Перейдем в контакты CRM, и добавим новый контакт, указав значения в полях ФИО в самом разном виде. Обновим список и обнаружим, что обработчик из нашего приложения сработал, поменяв формат введенного имени.

Давайте посмотрим, что произошло внутри.

Во-первых, убедимся, что токены авторизации текущего портала были сохранены так, как мы ожидали – в отдельном файле и содержат правильные данные с адресом нашего текущего портала.

Во-вторых, посмотрим, что именно передает Битрикс24 на наш обработчик в своем POST-запросе.

Мы уже видели этот массив и знаем, что он из себя представляет. Но сейчас обратим внимание на параметры, которые пришли в POST-запросе в ключе auth. Именно отсюда мы должны получить идентификатор портала, чтобы объяснить классу CExtRest, с каким порталом ему предстоит работать.

Именно это мы делаем, вызвав в нашем обработчике событий handler метод setCurrentBitrix24. Теперь наш класс понимает, из какого файла ему нужно получить сохраненные ранее токены авторизации. Собственно, это единственное изменение бизнес-логики, которое потребовалось сделать в существующем примере обработки события.

Мы все так же вызываем метод crm.contact.get для получения полной информации о добавленном или измененном контакте, взяв его идентификатор из POST-запроса, преобразуем имя, фамилию и отчество в нужный нам регистр и обновляем контакт в текущем Битрикс24.

Давайте убедимся, что это сработает, если мы установим приложение на еще один Битрикс24. Вернемся в кабинет разработчика, укажем адрес другого Битрикс24 и установим приложение на него.

Проверим, что на стороне приложения появился новый файл с нужными параметрами авторизации.

Перейдем в список контактов в этом новом Битрикс24 и добавим новый контакт с заведомо неправильно указанными именем и фамилией.

Полезно

Для полноты тестирования, желательно вернуться на первый Битрикс24 и изменить данные какого-то контакта там, чтобы убедиться, что ничего не сломалось в результате установки приложения на новом портале.

Уверены, вы сможете проделать этот эксперимент самостоятельно!

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

Список ресурсов

Материалы уроку: