Заказать проект
Оставьте заявку для получения коммерческого предложения.
Заполните форму и мы вышлем Вам предложение в котором решим,
чем можем вам помочь.
Тонкости интеграции Redmine и Битрикс24

Тонкости интеграции Redmine и Битрикс24

10 Марта 2016
Сергей Лебедев
Backend developer
Сергей Лебедев
следующая статья

Введение

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

Для решения данных проблем мы разработали сервис, который позволяет делать интеграцию Битрикс24 с Redmine и возможностью расширения до интеграции с любыми CRM.

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

Основы разработки

Основным критерием качества разработки у нас - следование принципам KISS, SOLID, то есть мы делаем код простым, понятным, легко поддерживаемым и легко расширяемым. Для того что бы придерживаться этих принципов необходимо в самом начале разработки хорошо продумать архитектуру приложения, и в случае с задачей интеграции мы рассмотрели 2 варианта:

  1. Отправка данных из Битрикс24 в Redmine напрямую
  2. Отправка данных из Битрикс24 в промежуточный сервис, а далее - сервис отправляет данные в Redmine

Преимущества первого варианта:

  • Скорость разработки: мы можем очень быстро сделать простые примеры кода, которые будут отправлять данные в redmine
  • Относительная простота решения: относительна потому, что первые шаги сделать очень просто, но когда нужно будет внедрить большое количество функционала, в силу недостатков, вероятность того что будет допущена ошибка - велика

Недостатки первого варианта:

  • Сложность поддержки: Битрикс24 обладает рядом ограничений, которые накладываются на разработку архитектуры приложения
  • Отсутствие модульности
  • Невозможность легко дополнить код так, что бы внедрить интеграцию с другими CRM

Преимущества второго варианта:

  • Модульность: мы можем разделить код на несколько слабосвязанных простых частей, что позволить избежать большинства ошибок
  • Простота поддержки
  • Расширяемость: при использовании отдельного сервиса на отдельном фреймворке, мы очень легко можем построить структуру приложения так, чтобы для добавления интеграции большую часть уже написанного кода мы могли использовать повторно, что значительно сократит затраты на внедрение новых возможностей

Недостатки второго варианта:

  • Скорость разработки: незначительно дольше чем в первом варианте, так как нужно отдельно настраивать программное обеспечение

Недолго думая, мы выбрали 2 вариант.

Техническая реализация

Основы

Для технической реализации мы использовали следующий алгоритм:

В Битрикс24, при изменении какой то информации, отрабатывает соответствующее событие, реагируя на это событие мы можем отравить данные куда угодно. В Redmine есть механизм REST Api, который позволяет получать, обновлять информацию и механизм hooks, аналогичный событиям Битрикс24, который отрабатывает при изменении информации и позволяется отправлять соответствующие запросы во вне.

Пример синхронизации данных

Далее разберём простой пример для синхронизации пользователей Битрикс24 и Redmine

Отправка данных из Битрикс24 в сервис

Несмотря на все недостатки Битрикс24, документация все таки хорошая, поэтому реализовать отправку данных в сервис не представлялось сложным.

Для того что бы отправить информацию нам необходимо: “отловить” соответствующее событие Битрикс24, сделать соответствующий запрос.

Для реализации мы создали отдельный файл, подключили его в init.php, далее для событий прописали следующий код:


1
2
3
AddEventHandler("main", "OnAfterUserAdd", "OnAfterUserAddFunction");
AddEventHandler("main", "OnAfterUserUpdate", "OnAfterUserUpdateFunction");
AddEventHandler("main", "OnUserDelete", "OnUserDeleteFunction");



Эти события вызывают соответствующие функции отправки данных:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function OnAfterUserAddFunction($arFields){
    $send = new RestBx24("http://laravel-service.dev/user/create");
    $send->sendPost($arFields);
}
 
function OnAfterUserUpdateFunction($arFields){
    $send = new RestBx24("http://laravel-service.dev/user/update/".$arFields['ID']);
    $send->sendPost($arFields);
}
 
 
function OnUserDeleteFunction($id){
    $send = new RestBx24("http://laravel-service.dev/user/destroy/".$id);
    $send->sendPost();
}



В данном коде используется класс RestBx24, который отправляет соответствующие запросы из битрикс в сервис. RestBx24 это своеобразная обёртка для php библиотеки curl, сделано для удобства разработки:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class RestBx24 {
        public $chlead;
        public function __construct($url)
        {
            $this->chlead = curl_init();
            curl_setopt($this->chlead, CURLOPT_URL, $url);
            curl_setopt($this->chlead, CURLOPT_RETURNTRANSFER, true);
        }
        function sendPost($arData){
            curl_setopt($this->chlead, CURLOPT_POST, true);
            curl_setopt($this->chlead, CURLOPT_POSTFIELDS, http_build_query($arData));
            $result = curl_exec($this->chlead);
        }
        public function __destruct()
        {
            curl_close($this->chlead);
        }
    }



Этот класс обязательно подключаем в init.php

Отправка данных из Laravel в Redmine

Для реализации отправки мы создали: простую Model в которой будет храниться соответствие ID Битрикс и ID редмайн; подключили API Redmine с помощью https://github.com/kbsali/php-redmine-api, настроили соответствующие роуты, реализовали контроллеры, которые занимаются обработкой входящих запросов.

Более подробно реализацию интеграции вы можете посмотреть здесь https://github.com/avivieu/BitrixRedmine.

Отправка данных из Redmine в Laravel

Для реализации синхронизации пользователей Redmine мы подключили hook redmine http://www.redmine.org/projects/redmine/wiki/Hooks_List controller_account_success_authentication_after, алгоритм отправки аналогичен алгоритму Битрикс: отслеживаем событие, отправляем запрос в Laravel, Laravel обновляет ID и отправляет запрос в Битрикс24.

Записаться На Консультацию
Записаться На Консультацию
Мы свяжемся
с вами
в течении
10 минут
laptop
Мы свяжемся с вами в течении 10 минут