Bitrix24 API - разбор демо приложения третьего типа
Вводная
Пользователям CRM Bitrix24 зачастую хочется передавать накапливаемые в этой системе данные на какой-то сторонний ресурс для дальнейшей их обработки. Так, мне, например, понадобилось наладить экспорт закрытых сделок на сайт, который занимается учётом затрат на производство. В данном случае можно поступить двумя способами: во-первых, можно на стороннем сайте сделать кнопку, которая запрашивала бы из битрикса сделки (пока не рассматриваем реализацию); во-вторых, можно заставить битрикс самостоятельно отправлять данные по сделке сразу при её закрытии (по событию). Второй вариант более привлекателен, - всё работает в реальном времени без участия человека (никаких кнопок для передачи данных нажимать не нужно).Бизнес-процесс
Встал вопрос, как реализовать выгрузку данных из битрикс24 по событию. Первый вариант, который я проверял, это сделать отправку через так называемый "бизнес процесс". На момент написания статьи добраться до бизнес процессов стало довольно сложно: в разделе меню "CRM" пункт "Настройки", на открывшейся странице ссылка "Бизнес-процессы", затем в разделе "Сделка" есть кнопки "Добавить шаблон" и "Список шаблонов".В редакторе шаблона есть блок "PHP код" из группы "Прочее". Казалось бы вот оно! Но нет. Эта штука не работает. А жаль. Можно было бы вписать в неё что-то типа такого:
if( $curl = curl_init() ) {
curl_setopt($curl, CURLOPT_URL, 'http://<SomeSite>/integration/index.php');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$post_headers = array('Content-type: application/x-www-form-urlencoded charset=utf-8',
'X_ASCCPE_USERNAME: логин',
'X_ASCCPE_PASSWORD: пароль',
'');
curl_setopt($curl, CURLOPT_HEADER, $post_headers);
curl_setopt($curl, CURLOPT_POST, true);
$data = array('name' => {=Document:TITLE}, 'date' => {=Document:CLOSEDATE}, 'accounting' => 1, 'amount' => {=Document:OPPORTUNITY}, 'cost' => 0);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
$out = curl_exec($curl);
echo $out;
curl_close($curl);
}
Здесь и далее <SomeSite> означает URL вашего сайта. И отправлялись бы данные на нужный сайт каждый раз при закрытии сделки. В реальности блок "PHP код" при попытке сохранить выдаёт ошибку "У вас нет прав на изменение PHP кода"
API Bitrix24
Второй вариант организовать выгрузку данных из битрик24 на сторонний сайт - это воспользоваться API Bitrix24. API есть, документация есть:1) Документция для разработчиков Битрикс24
2) "Разработчик Bitrix Framework" раздел "Маркетплейс Битрикс24"
Вроде всё есть, но вот вникнуть в тему не так-то и просто. В документации нет никаких практических примеров. На форумах люди делятся строго на два лагеря: те кто ничего не понял, как работать с этим API и спрашивают у знатоков (но никто не отвечает); и те, кто постиг это тайное знание и не делится им, а предлагает за деньги выполнить разработку. Я же в данной статье попробую подробно разложить по полочкам создание приложения "третьего типа" - внешние приложения, которые только используют API битрикса, но в его интерфейсе никак не участвуют. Т.е. можно запрашивать, редактировать и добавлять данные битрикса из стороннего сайта или упросить битрикс24 самостоятельно отправлять куда-либо данные при срабатывании определённых событий.
Все эти возможности представлены в демо-приложении, которое можно скачать прямо из документации. Никакого описания, что делает это приложение и как - нет: ни в документации, ни в комментариях к коду. Восполню этот пробел.
Разбор демо-приложения третьего типа
Расположение приложения
В архиве содержится основной файл index.php и ряд вспомогательных файлов. Перед человеком, который первый раз пытается сделать приложение для Битрикс24, сразу возникнет вопрос: где эти файлы нужно расположить. Я пробовал экспериментировать на локальном сайте, но то ли у меня что-то не донастроено, то ли нельзя так сделать на локальном сайте (без внешнего доступа из интернета), - ничего не вышло - авторизация на последнем шаге не срабатывает. Итак, располагаем эти файлы на сайте в интернете. Например, создаём в корне сайта каталог integration и в него извлекаем архив. В результате путь к демо-приложению получится http://<SomeSite>/integration/index.php. Можно работать как с протоколом HTTP, так и с HTTPS. Лучше, конечно, использовать защищённый протокол.Авторизация
Стороннее для Битрикс24 приложение должно получать (или передавать) данные, которые не должны быть похищены злоумышленниками. Чтобы этого достичь, нужно установить доверие между битриксом и сторонним сайтом. Для этого применяется протокол OAuth 2.0. Суть в том, что каждый запрос будет сопровождаться неким секретным набором символов (access_token). А чтобы злоумышленник не перехватил секретный код, этот код довольно быстро портится и очень строго получается: во время его генерации проверяется, что запрашивающий код сайт известен битриксу и является действительно тем сайтом, за кого себя выдаёт. Чтобы этого достичь, в Битрикс24 нужно создать некий секрет, который должен быть известен только администратору портала Битрикс24, настраивающему интеграцию. Для этого в битриксе создаётся приложение.Раньше создание приложений было очень затруднено, но с недавних пор сделать это можно прямо в интерфейсе портала Битрикс24: слева в меню в группе "Приложения" нажимаем кнопку "Добавить приложение".
Слева как раз блок "Для личного использования" - нажимаем там "Добавить". Заполняем название, включаем флажок "Приложение использует только API", даём права "CRM", "Пользователи" и "Живая лента", указываем ссылку на своё демо-приложение http://<SomeSite>/integration/index.php
После сохранения сгенерируется нужный нам секрет, состоящий из двух частей: "Код приложения" и "Ключ приложения" (т.е. никакого приложения не создаётся на самом деле, - просто указывается ссылка на него).
Полученные данные нужно занести в настройки демо-приложения (include/config.php). Код приложения вписываем в строку
define('CLIENT_ID', 'local.55fa7d514738b5.63819847');
Ключ приложения в строкуdefine('CLIENT_SECRET', '9768f9ccc5b198837cab9b7f2f233e1e');
Прописываем свой относительный путь к приложению:define('PATH', '/integration/index.php');
Прописываем адрес своего сайта (он должен совпадать с тем, что указано в созданном приложении в Битрикс24)define('REDIRECT_URI', 'http://<SomeSite>' . PATH);
На этом настройки демо-приложения завершены.Открываем наше приложение (http://<SomeSite>/integration/index.php) в браузере. Должна появиться форма для ввода названия портала Битрикс24 (по форме my.bitris24.ru):
Вводим название своего портала и пробуем авторизоваться. В результате страница отобразит несколько ссылок и данные по текущей авторизации:
На этом настройка и проверка демо-приложения оканчивается
Разбираемся, как это работает
Страница несколько раз передаёт и получает различные данные из Битрикс24.Всё это можно было бы проделать вручную, вводя длинные URL в браузере (как, например, делает автор статьи "Мой опыт использования Bitrix24 REST API"). Главная цель этих действий получить access_token. Зная этот код, можно взаимодействовать с битриксом через его API. В скрипте демо-приложения index.php с начала файла и до строки 61 как раз и происходит авторизация. Затем в строках 65 - 91 описывается метод обновить истекшую авторизацию. Далее идёт непосредственно функционал демо-страницы, где пользователю показываются несколько ссылок, нажатия которых приводят к выполнению определённых методов API Bitrix24 и, в свою очередь, взаимодействию с вашим порталом Битрикс24.
Все ссылки ведут на ту же страницу, только к URL дописываются параметры GET запроса, который тут же в скрипте обрабатывается в конструкции switch case.
Первая ссылка "Информация о пользователе" выполняет код:
$data = call($_SESSION["query_data"]["domain"], "user.current", array(
"auth" => $_SESSION["query_data"]["access_token"])
);
Т.е. запрашивает у вашего портала разрешение на выполнение метода API user.current и передаёт access_token, полученный на предыдущем этапе. Это пример получения данных из Битрикс24.Другая ссылка "Установить обработчик события" призвана привязать к определённому событию в Битрикс24 (в данном случае к добавлению лида) выполнение определённого скрипта на внешнем сайте (в данном случае ссылку на обработчик нужно исправить, чтобы прописать обработчик event.php). Чтобы обработчик с нашими настройками заработал, нужно исправить строку
"HANDLER" => REDIRECT_URI."event.php",
на"HANDLER" => "http://<SomeSite>/integration/event.php"
В целом обработка клика по данной ссылке (в скрипте index.php) должна выглядеть так:case 'event.bind': // bind event handler
$data = call($_SESSION["query_data"]["domain"], "event.bind", array(
"auth" => $_SESSION["query_data"]["access_token"],
"EVENT" => "ONCRMLEADADD",
"HANDLER" => "http://<SomeSite>/integration/event.php"
));
break;
После этих исправлений можно нажать ссылку и обработчик привяжется. Т.е. где-то на стороне вашего портала Битрикс24 в "облачном" фоне будет висеть наблюдатель и ждать события - добавление лида. Как только событие произойдёт, выполнится вызов обработчика с вашего сайта (скрипт event.php).Какие обработчики каких событий уже привязаны к вашему порталу посмотреть в пользовательском интерфейсе нигде нельзя. Но можно добавить к скрипту index.php свою ссылку для обращения к методу API event.get, который отобразит все установленные обработчики. Добавляем ссылку:
<li><a href="<?=PATH?>?test=event.get">Просмотр установленных обработчиков событий</a>
и добавляем в существующий switch обработку, которая запросит метод event.get:
case 'event.get':
$data = call($_SESSION["query_data"]["domain"], "event.get", array(
"auth" => $_SESSION["query_data"]["access_token"])
);
break;
Если потребуется удалить обработку события, то можно к этому демо-приложению добавить ссылку<li><a href="<?=PATH?>?test=event.unbind">Удаление установленного обработчика события</a>
и обработку (метод event.unbind); только изменить адрес HANDLER на требуемый:case 'event.unbind':
$data = call($_SESSION["query_data"]["domain"], "event.unbind", array(
"auth" => $_SESSION["query_data"]["access_token"],
'EVENT' => 'ONCRMLEADADD',
'HANDLER' => REDIRECT_URI . "event.php"
));
break;
Для того, чтобы посмотреть, к каким событиям можно подписаться, можно добавить ссылку<li><a href="<?=PATH?>?test=event.list">Просмотр всех доступных событий</a>
и обработчик (метод events):case 'event.list':
$data = call($_SESSION["query_data"]["domain"], "events", array(
"auth" => $_SESSION["query_data"]["access_token"])
);
break;
Этих знаний уже достаточно для начала работы с API Bitrix24. В следующей статье я опишу, как сделать выгрузку сделок на внешний сайт при изменении сделки в Битрикс24.Добавлено 23.10.2016: Вот ссылка на полный код с дополнениями из статьи.
Спасибо, полезная статья. А подскажите (если знаете) как можно получить поля, при событии OnCrmLeadUpdate которые были обновлены? Почему-то приходит только ID лида и всё.
ОтветитьУдалитьПолучить именно те поля, которые обновились - не получится. Можно получить все данные по id лида (http://dev.1c-bitrix.ru/rest_help/crm/leads/crm_lead_get.php), а уж потом разбирать, что с ними делать.
УдалитьСпасибо, понятно и доходчиво. Хотелось бы продолжения. Каким образом можно создать для платформы Битрикс24 встроенное динамическое приложение (аналог CRM, например, система учета заявок пользователей), которое могло бы работать с внешними компонентами, такие как IP телефония?
ОтветитьУдалитьВстроенное приложение для Битрикс24 мне пока не выпадала необходимость делать. Так что про это пока не планирую писать. Но про взаимодействие Битрикс24 с внешней системой ещё планирую написать.
Удалитькак раз сейчас разрабатываем систему техподдержки на CRM+приложение 1-го типа.
УдалитьСпасибо! Очень полезная информация, ждем продолжения! Вопрос - как долго проживет скрипт в режиме слушателя хотя бы месяц проживет? Через какое время он отвалится по таймауту? Или например интернет упадет у сервера на пару секунд...
ОтветитьУдалитьПока проблем с передачей данных из Битрикс24 во внешний скрипт я не заметил (схема работает где-то полгода). Тут нет скриптов в "режиме слушателя". Со стороны Битрикс24 скрипт выгрузи данных срабатывает по событию. Со стороны стороннего сайта скрипт никак не выполняется, пока к нему не обратится Битрикс24. Хотя теоретически при недоступности соединения, Битрикс24 в момент наступления события не достучится до скрипта на стороннем сайте и данные не будут переданы. Проверки на это я не делал.
УдалитьЗдравствуйте! спасибо за разбор! Может сталкивались? Как сделать, чтобы внешний скрипт php забирал данные на битриксе по cron или например по событию самого же битрикса. Проблема в том, что при авторизации по протоколу oauth при редиректе для получения code,необходимо первый раз ввести ручкам в браузере логини и праоль для доступа к битриксу. То же самое относится и к срабатыванию события от битрикса. Т.е. например сработало событие, был вызван внешний php скрипт, ему нужно еще раз обратитьсяк битрикс и забрать связанные данные из базы битрикса и отправить все по почте, но он этого сделать не может, так как проиходит редирект на bitrix24.net/oauth/authorize/? где нужно ввести логин и пароль вручную.
ОтветитьУдалитьВовсе не обязательно вводить что-либо вручную, - всё можно автоматизировать. А ваши личные данные сохранить в настройках. Собственно, так и работает демо-приложение, описанное в этой статье (там вводится только адрес портала Битрикс24, да и тот можно вписать в настройки). Попробуйте пошагово пройтись по этому демо-приложению. Тогда вы сможете его модифицировать и приспособить для запуска через cron
УдалитьХотя... проблема действительно есть (http://dev.1c-bitrix.ru/community/blogs/b24_marketplace/8324.php). Хотя, наверняка есть решение, но я пока над этим не задумывался.
Удалитьи еще вопрос) Вы разбирались как работают приложения второго типа в битрикс24?
ОтветитьУдалитьНет, меня пока интересовали только варианты интеграции с внешними системами. Как раз третий тип для этого отлично подошёл.
УдалитьГде вы нашил эти события и где можно посмотреть какие события вообще есть
ОтветитьУдалитьв доке почему то только три события https://dev.1c-bitrix.ru/rest_help/general/events.php
В документации, действительно, мало что есть. В статье (почти в конце) я упоминал метод events, - с его помощью можно получить доступные события. Я сейчас сделал такой запрос и вот, что мне вернулось:
Удалитьarray (
'result' =>
array (
0 => 'ONAPPUNINSTALL',
1 => 'ONAPPINSTALL',
2 => 'ONAPPUPDATE',
3 => 'ONAPPPAYMENT',
4 => 'ONAPPTEST',
5 => 'ONCRMLEADADD',
6 => 'ONCRMLEADUPDATE',
7 => 'ONCRMLEADDELETE',
8 => 'ONCRMDEALADD',
9 => 'ONCRMDEALUPDATE',
10 => 'ONCRMDEALDELETE',
11 => 'ONCRMCOMPANYADD',
12 => 'ONCRMCOMPANYUPDATE',
13 => 'ONCRMCOMPANYDELETE',
14 => 'ONCRMCONTACTADD',
15 => 'ONCRMCONTACTUPDATE',
16 => 'ONCRMCONTACTDELETE',
17 => 'ONCRMQUOTEADD',
18 => 'ONCRMQUOTEUPDATE',
19 => 'ONCRMQUOTEDELETE',
20 => 'ONCRMCURRENCYADD',
21 => 'ONCRMCURRENCYUPDATE',
22 => 'ONCRMCURRENCYDELETE',
23 => 'ONCRMPRODUCTADD',
24 => 'ONCRMPRODUCTUPDATE',
25 => 'ONCRMPRODUCTDELETE',
26 => 'ONCRMACTIVITYADD',
27 => 'ONCRMACTIVITYUPDATE',
28 => 'ONCRMACTIVITYDELETE',
29 => 'ONUSERADD',
),
)
Событие Вызывается
ОтветитьУдалитьOnAppUpdate при обновлении версии приложения
OnAppUninstall при удалении приложения
OnAppPayment при оплате приложения
а откуда вы нашли ONCRMLEADADD ? где можно посмотреть полный список и описания?
Выше ответил, как я это нашёл. А когда вызывается то или иное событие в Битрикс24, остаётся догадываться по названию.
УдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьОлег, как проверить работоспособность, установленных обработчиков на добавление пользователя и редактирование ? как узнать что все правильно нрастроено?
ОтветитьУдалитьВы прописываете в Битрикс24 путь к вашему скрипту на каком-то сайте, это скрипт будет срабатывать при возникновении соответсвующего события в Битрикс24. В скрипте на время разработки сделайте показ всего полученного (типа print_r($_REQUEST)). А дальше уже исходя из полученных данных можно придумывать, как их применить. Скорее всего, по вашим событиям, вам придёт ID пользователя (которого добавили или отредактировали). А дальше по этому ID можно, например, получить данные пользователя - http://dev.1c-bitrix.ru/rest_help/users/user_get.php
Удалитья не силен в этом, можно попросить пример кода от получения ID до получения данных пользователя ?
Удалитьи в лог записывается полный массив т.е: array (
Удалить'event' => 'ONCRMCONTACTADD',
'data' =>
array (
'FIELDS' =>
array (
'ID' => '4',
),
),
'auth' =>
array (
'access_token' => '3syzektvnssvc3blhep2r2ojs7kffwtt',
'expires_in' => '3600',
'scope' => 'crm,user',
'user_id' => '1',
'status' => 'L',
'member_id' => '3a67931130d90d665df2eea3dea3959d',
'domain' => 'sit.bitrix24.ru',
'application_token' => 'bd8744b4115fde2cee08e475a9b92e0c',
),
'ts' => '1462996232',
)
А толком мне нужен то только ID
И еще, внизу config.php
Удалить1.Совершает запрос с заданными данными по заданному адресу. В ответ ожидается JSON
2. Вызов метода REST.
Расскажите пожалуйста как этим пользоваться)
$user_id = $_REQUEST['data']['FIELDS']['ID'];
Удалить$auth = $_REQUEST['auth']['access_token'];
$domain = $_REQUEST['auth']['domain'];
$data = call($domain, "user.get", array(
"auth" => $auth,
"id" => $deal_id
));
// Разбираем данные пользователя
if (isset($data['result'])) {
// Что-то делаем с полученными данными пользователя
print_r($data['result']);
}
Возможно ли процесс с созданием lead сделать с помощью curl?
ОтветитьУдалитьЗадача состоит в том, что на стороннем сайте заполняется форма, далее данные с формы улетают на script.php и с этого скрипта уже идет запрос curl в облако, достаем список пользователей по нужным параметрам и создаем lead.
Как такое можно реализовать ?
Похоже, то что вам нужно описано в статьях https://www.bitrix24.ru/blogs/howto/new-crm-lead.php и https://dev.1c-bitrix.ru/community/blogs/chaos/crm-sozdanie-lidov-iz-drugikh-servisov.php
УдалитьВам надо через curl обратиться к специальному адресу .bitrix24.ru/crm/configs/import/lead.php и передать три параметра (логин и пароль пользователя из под которого будет создан лид и заголовок лида). Я не тестировал.
Приходит пустой запрос(ответ) с Битрикса, событие привязывается без проблем. Подскажите где искать?
ОтветитьУдалитьпроверяйте, чтобы везде был только https:// или только http://
Удалить>В следующей статье я опишу, как сделать выгрузку сделок на внешний сайт при закрытии сделки в Битрикс24.
ОтветитьУдалитьОлег, добрый день! Очень жду эту следующую статью, так как именно задача экспорта определённых полей (включая пользовательские) из битрикс при закрытии сделки сейчас актуально для меня, как никогда.
Наконец-то дописал вторую статью - http://ekhlakov.blogspot.ru/2016/10/24.html Только там не при "закрытии" сделки, а при "изменении" сделки. Но легко добавить проверку на стутус закрытия - там же из статьи должно быть понятно как.
УдалитьУра, спасибо! Олег, а пользовательские поля между сущностями лид-контакт/компания-сделка реально ли "синхронизировать"? Надо, чтобы CID (Google Analytics) передавался от лида следующим сущностям автоматически из без БП (они сейчас платные).
УдалитьВ следующей статье я опишу, как сделать выгрузку сделок на внешний сайт при закрытии сделки в Битрикс24.
ОтветитьУдалитьЗдравствуйте.
А где обещанная статья?
Добавил вторую статью и в конце этой добавил на неё ссылку - http://ekhlakov.blogspot.ru/2016/10/24.html
УдалитьСкажите, пожалуйста, а можно таким же образом заставить Битрикс24 делать экспорты в Excel по расписанию?
ОтветитьУдалитьExcel "понимает" CSV формат. А это обычный текстовый файл, в котором данные в строках разделены точкой с запятой. Можно, например, функцию логгирования - logger() из этой статьи доработать таким образом, чтобы нужные данные записывались в файл через точку с запятой, а вместо расширения .log формировать .csv. Готовый файл можно будет обрабатывать Excel'ем.
УдалитьБлагодарю!
ОтветитьУдалитьЗдравствуйте Олег.
ОтветитьУдалитьНе пробовали с помощью метода batch пакетом добавлять сущности? Например, одновременно добавить 5 товаров или 5 лидов одним запросом?
Если да, можете показать пример.
Я делал по примеру в демо 3 типа. Там методом batch обновляется аватара пользователя. Я на его примере хотел добавить 5 товаров одновременно. Но, в ответ приходит ошибка 'ERROR' => 'METHOD NOT FOUND'
Я так не делал. Не помогу: тут надо много экспериментировать, чтобы подобрать нужный формат запроса.
Удалить"Хотя... проблема действительно есть (http://dev.1c-bitrix.ru/community/blogs/b24_marketplace/8324.php). Хотя, наверняка есть решение, но я пока над этим не задумывался."
ОтветитьУдалитьНе нашли решение авторизации без ввода ручками?
http://afinogen.su/article/polucenie-sessionnogo-tokena-dla-prilozenia-bitrix24 - нашел сам что то. Но внедрить не получается(((
УдалитьНа странице https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=5378&LESSON_PATH=3913.5377.5378 появилось примечание: "С версии главного модуля 16.5.11 доступна возможность разработки приложений для коробочных версий как для облачных. Коробочные продукты начинают поддерживать REST API. Если серверные приложения с явной авторизацией по протоколу OAuth 2.0 для облачного Битрикс24 было разработано ранее, то для использования в коробочных версиях они должны быть доработаны так как возникает вопрос безопасности. Суть необходимых изменений: отправление запроса на авторизацию на отдельный сервер https://oauth.bitrix.info/." Видимо, как раз решение проблемы авторизации.
УдалитьДобрый день.
ОтветитьУдалитьЕсть портал в облаке, хочется свое приложение написать. Где посмотреть какой нибудь мануал для новечка, чтобы прямо по шагам объяснили :)
К сожалению, я не знаю такого источника. Если было бы понятное изложение, как же разрабатывать приложения под Битрикс24, то не появлялись бы такие статьи, как эта. А так, придётся по крупицам собирать информацию и бодро шагать по граблям.
УдалитьОгромное спасибо!
ОтветитьУдалитьКстати в index.php есть ссылка на "?test=deal.list", но case для него отсутствует.
Здравствуйте, помогите, пожалуйста разобраться.
ОтветитьУдалитьУстановил скрипт на событие ONCRMLEADADD и смотрю, что приходит в переменной $_REQUEST от CRM.
В некоторых случаях приходит :
'auth' =>
array (
'access_token' => 'tu8cvj74kyn8roia8h7k4qj5x7hty53e',
'expires_in' => '3600',
'scope' => 'crm,user,log',
'domain' => 'my_portal.bitrix24.ru',
'server_endpoint' => 'https://oauth.bitrix.info/rest/',
'status' => 'L',
'client_endpoint' => 'https://my_portal.bitrix24.ru/rest/',
'member_id' => 'xxxxxxxxxxxxxxxxxxxxx',
'user_id' => '6',
'application_token' => 'yyyyyyyyyyyyyyyyyyyyyyyyyyyy',
),
А иногда:
'auth' =>
array (
'domain' => 'my_portal.bitrix24.ru',
'client_endpoint' => 'https://my_portal.bitrix24.ru/rest/',
'server_endpoint' => 'https://oauth.bitrix.info/rest/',
'member_id' => 'xxxxxxxxxxxxxxxxxxxxx',
'application_token' => 'yyyyyyyyyyyyyyyyyyyyyyyyyyyy',
),
Дальше стоит команда:
$lead_data = call($_REQUEST["auth"]["domain"], "crm.lead.get?id=$lead_id", array(
"auth" => $_REQUEST["auth"]["access_token"])
);
И понятно, что во втором случае, раз $_REQUEST["auth"]["access_token"] нет, то дальше скрипту не с чем работать.
Возможно дело в том, кто является ответственным, вызвавшим это событие. Всё работает нормально, если это я, тот кто настраивал. Но по факту не я пользуюсь CRM.
УдалитьНе могу сказать, в чём тут может быть проблема. Но я настраивал интеграцию с Битрикс24, когда был авторизован под своей учётной записью, а сами события плодят другие пользователи Битрикс24, - всё равно скрипт (по описанию из http://ekhlakov.blogspot.ru/2016/10/24.html) срабатывал.
УдалитьМожет быть сервер тормозит и проходят отведённые 30 секунд?
УдалитьНужно ли в файле, который вызывается по событию прописывать начало фыйла index.php с процедурой авторизации и обновления авторизации?
"Затем в строках 65 - 91 описывается метод обновить истекшую авторизацию."
Я посмотрел свой скрипт, который запрашивается при срабатывании события в Битрикс24. Обновления авторизации у меня там нет. В таком варианте скрипта сделки импортируются уже больше года. так что авторизация пока не протухла.
УдалитьОлег, здравствуйте. Посмотрите, пожалуйста мои поиски проблем в комментариях ниже.
УдалитьА для чего строка "Укажите ссылку-callback для
ОтветитьУдалитьсобытия установки (необязательно)" ?
http://joxi.ru/D2PyvzdcpwGKGA
Это может влиять на работу скриптов, вызываемых при событии?
Может быть ещё дело в процессе, каким был установлен обработчик?
УдалитьВ документации так написано: "event.bind.json", а в примерах здесь: "event.bind".
За что отвечает ".json" ?
Я выяснил вот что:
УдалитьПоскольку функция call возвращает ошибку:
'error' => 'NO_AUTH_FOUND',
'error_description' => 'Wrong authorization data',
То это связано с этим методом: http://bxapi.ru/src/?module_id=rest&name=CRestUtil%3A%3AcheckAuth
который возвращает эту ошибку если ExecuteModuleEventEx($eventHandler, array($query, $scope, &$res)) == null
Открываю описание http://bxapi.ru/src/?module_id=main&name=ExecuteModuleEventEx
и вижу такой код:
if(
isset($arEvent["TO_MODULE_ID"])
&& $arEvent["TO_MODULE_ID"]<>""
&& $arEvent["TO_MODULE_ID"]<>"main"
)
{
if(!CModule::IncludeModule($arEvent["TO_MODULE_ID"]))
return null;
}
//остальной код
}
Смотрю дальше: https://dev.1c-bitrix.ru/api_help/main/reference/cmodule/includemodule.php
написано:
"Проверяет установлен ли модуль и если установлен, то подключает его (точнее подключает файл /bitrix/modules/ID модуля/include.php). Возвращает "true", если модуль установлен, иначе - "false". Статический метод."
Что-то стало ясно, но абсолютно не представляю, как решить мою проблему, потому что ни разу не работал со всякими модулями и классами. Почему, если в условиях выше первый if сработал, а второй нет? Это как понимать, ID модуля есть, а сам модуль не установлен?
Скорее всего, "Укажите ссылку-callback для
Удалитьсобытия установки (необязательно)" - это для указания скрипта, который будет вызван из Битрикс24, когда будет срабатывание события установки обработчика (event.bind). Это не влияет на работу скриптов, вызываемых при событии.
Почему в примере документации указано event.bind.json - не знаю. Возможно, для одного метода работают несколько форматов передаваемых данных - JSON и encoded_url
По поводу того, что вы выясняли про подключение модуля по module_id: возможно, у вас вызывается какой-то модуль, для которго вы не разрешили права доступа (в настройках Битрикс24 - [Приложения / Мои приложения / Изменить / Права доступа])
Олег а как с вами связаться?
ОтветитьУдалитьзагрузил приложение на сервер, вбил нужные данные, в итоге появляется ошибка:
ОтветитьУдалитьFatal error: Uncaught Error: Call to undefined function curl_init() in /home/bitrix/www/bx.app/include/config.php:70 Stack trace: #0 /home/bitrix/www/bx.app/index.php(47): query('GET', 'https://d22.bit...', Array) #1 {main} thrown in /home/bitrix/www/bx.app/include/config.php on line 70
Вероятно не установлен curl (http://php.net/manual/ru/curl.installation.php). На сервер должен быть установлен пакет типа php-curl
УдалитьДа нет, установлен curl...
УдалитьДобрый день!
ОтветитьУдалитьПосле нажатия на кнопку Авторизоваться сообщает код 500 Internal Server Error, подскажите как это исправить. Я полагаю что это связано с тем что у меня домен с https а в конфиге автора http стоит. Что сделать?
В логах сервера вот это показывает Bad header: HTTP 302 Found, referer: далее урл
УдалитьВероятнее всего, проблема действительно с смешанных редиректах HTTP/HTTPS. Сервер не пропускает редирект с защищённого на незащищённый ресурс. Попробуйте везде реализовать HTTPS
УдалитьЭтот комментарий был удален администратором блога.
ОтветитьУдалитьДобрый день.
ОтветитьУдалитьСпасибо за понятную статью! Все сделал как Вы описали, все работает, кроме одного - unbind. Есть подозрение что он не работает.
Еще изначально смутил и сам case, который идентичен bind и тоже дергает event.php зачем-то. И по факту, после того как я жму на "Удаление установленного обработчика события" и потом жму "Просмотреть" - я вижу что он все еще висит.
Посмотрел сейчас ещё раз код. По виду всё должно работать. unbind работает так: 1) отправляет запрос в Битрикс24 функцией call(); 2) в эту функцию в параметре EVENT указываем код события, отслеживание которого хотим убрать на стороне Битрикс24 (тут вам надо перепроверить правильность написания вашего события); 3) в параметре HANDLER указываем "обратный" адрес - на это адрес Битрикс24 отправит результат выполнения этой операции unbind (в тестовом примере обработчик - event.php - просто пишет в лог ответ, который пришёл от Битрикс24) - тут также надо проверить правильность пути к вашему принимающему ответ скрипту. Если запись в логе добавляется - значит ответ пришёл. Ну а см ответ даст понять, что же в результате сделал Битрикс24 (если пришлёт ошибку, значит что-то пошло не так и Битрикс24 не смог удалить событие - должен указать причину, чтобы вы смогли разобраться)
УдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьДобрый день. Вы знаете, Ваши слова об отсутствии документации актуальны и через 6 лет после написания этой статьи. Удивительно стабильное раздолбайство. Теперь для упрощения ситуации с мануалами решили перевесить саппорт на интеграторов. Известно ли вам что либо, о работе REST API c Битрикс Управление сайтом ? О котором они заявляют на сайте https://disk.yandex.ru/i/1P3z23D-qnL_WA
ОтветитьУдалитьВ ядре битрикса сделали некий каркас для создания REST API. Мне не приходилось пока с этим работать. Весьма примерно знаю. Там только базовые вещи есть, типа авторизации, разграничения доступа, запросы на получение данных из инфоблоков. А дальше - всё в руках разработчика, - пилить собственные классы с собственными методами API.
Удалить