Каждый раз, когда заходит речь о создании мобильного приложения для интернет-магазина на битрикс (будь то Flutter или нативная разработка под iOS и Android) или разработка сайта с использованием React, Angular, Vue - перед нами стоит задача получения данных по REST.
По этой причине на просторах интернета очень часто встает вопрос: "как запустить REST API в БУС?". Это довольно легко сделать в Битрикс24, но именно в "Битрикс: Управление сайтом" нет раздела, который может сгенерировать нам доступ к REST
Разобравшись в данном вопросе, я решил поделиться пошаговой инструкцией для запуска:
1. Проверяем, что модуль REST установлен
2. Создаем страницу для добавления вебхука
require_once($_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/include/prolog_admin.php");
< div class="adm-workarea">
$APPLICATION->IncludeComponent(
"bitrix:rest.hook",
".default",
[
"SEF_MODE" => "Y",
"SEF_FOLDER" => "/local/rest/",
"COMPONENT_TEMPLATE" => ".default",
"SEF_URL_TEMPLATES" => [
"list" => "",
"event_list" => "event/",
"event_edit" => "event/#id#/",
"ap_list" => "ap/",
"ap_edit" => "ap/#id#/",
]
],
false
);
< a href="javascript:;" class="adm-btn adm-btn-green"
onclick="BX.PopupMenu.show('rest_hook_menu', this, [{
'href':'/local/rest/event/0/',
'text':'Исходящий вебхук'
},{
'href':'/local/rest/ap/0/',
'text':'Входящий вебхук'
}])">
Добавить вебхук
< /a>
< /div>
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_admin.php");
Array( 'CONDITION' => '#^/local/rest/#', 'RULE' => '', 'ID' => 'bitrix:rest.hook', 'PATH' => '/local/rest/index.php', )
3. Переходим на созданную страницу и создаем вебхук
4. Обращение к сайту через REST
Далее рассмотри несколько примеров того, как можно работать с REST API, используя полученные выше данные
Рассматривать будет на основе cURL PHP (не знаю кому может понадобиться отправлять запросы в БУС через cURL PHP, чаще его используют что бы отправить данные из БУС в Б24. Но думаю что вы с легкостью сможете перевести данный код во Flutter, React, Vue и т.д.)
const URL = ''; // Подставляем URL полученный на предыдущем шаге
Добавим новый заказ (sale.order.add)
$queryData = http_build_query(array( "fields" => Array( 'lid' => 's1', // ID сайта 'userId' => 1, // ID пользователя 'currency' => 'rub', // Тип валюты 'personTypeId' => 1, // Тип покупателя ) )); $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_SSL_VERIFYPEER => 0, CURLOPT_POST => 1, CURLOPT_HEADER => 0, CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => URL . 'sale.order.add', CURLOPT_POSTFIELDS => $queryData, )); $result = curl_exec($curl);
Получим данные по товару (catalog.product.get)
$queryData = http_build_query(array(
"id" => 1111 // ID товара
));
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_SSL_VERIFYPEER => 0,
CURLOPT_POST => 1,
CURLOPT_HEADER => 0,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => URL . 'catalog.product.get',
CURLOPT_POSTFIELDS => $queryData,
));
$result = curl_exec($curl);
curl_close($curl);
$result = json_decode($result, true);
$result['result']['product']['detailPicture']['url'] = str_replace('/rest/', URL, $result['result']['product']['detailPicture']['url']);
Получим данные по элементу инфоблока (iblock.Element.get)
Внимание: для получения данных из инфоблока в его настройках должнен быть "Включен доступ через REST".
$queryData = http_build_query(array( "iblockId" => 4, // ID инфоблока "elementId" => 1111 // ID элемента )); $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_SSL_VERIFYPEER => 0, CURLOPT_POST => 1, CURLOPT_HEADER => 0, CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => URL . 'iblock.Element.get', CURLOPT_POSTFIELDS => $queryData, )); $result = curl_exec($curl);
Приведенные выше примеры описаны в очень упрощенной форме. Более подробно вы можете прочитать в документации по REST API для 1С-Битрикс