Вариант реализации REST API для 1С-Битрикс Управление сайтом
В статье опишу вариант обмена 1С УТ 11.4 и 1С-Битрикс управление сайтом с иcпользованием компонентов Symfony, в качестве примера обмен данными по товарам.
- Описание
- Подробнее
Описание
Вводные
1. В Битрикс заведен каталог товаров без привязки к 1С. В 1С УТ 11 аналогичный каталог.
2. Типовая обработка не позволяет состыковать номенклатуру, результат её работы дубли либо со стороны 1С либо со стороны БУС.
3. Реализация обмена со стороны БУС "черный ящик", в который даже продвинутые программисты по битрикс не горят желанием лезть.
4. Реализация обмена со стороны 1С вызывает ряд вопросов (по логичности и по реализации).
5. Установка доп модуля https://1c.1c-bitrix.ru/ecommerce/download.php проблему не решает, усложняет обновление конфигурации.
Все вышесказанное вынес из собственного опыта взаимодействия при реализации обменов различными способами.
Вариант решения
Реализовать
- точку подключения
- аутентификацию
- роутер
- возможность подключения к классам битрикс
- проверки параметров и данных в запросах (тема отдельной статьи)
Настройка проекта
Есть опыт работы с symfony, взял его.
В ходе реализации получил ошибку "Case mismatch between loaded and declared class names: "CCatalogSKU" vs "CCatalogSku". В коде вызывается $catalogInfo = \CCatalogSKU::getInfoByProductIBlock($this->iblockId); хотя внутри class CCatalogSku extends CAllCatalogSku, что отражает не высокое качество кода БУС (как минимум отсутствие проверок).
Так же присутствуют ошибки по проверке доступности реквизитов (PSR-4).
Для обхода ошибок был собран symfony без errorhandler.
В папке /local БУС создал папку api_min, в ней создал проект (архив проекта будет в фйлах для скачивания)
Создал папку public, в ней index.php, это будет точкой входа в API
В админке БУС добавил правило обработки адреса, раздел "Рабочий стол — Настройки — Настройки продукта — Обработка адресов — Правила обработки"
- Условие #^/api_min/#
- Файл /local/api_min/public/index.php
Роутинг реализован через https://symfony.com/doc/current/create_framework/routing.html, пример для ping
Слеш в конце строки сделал для унификации, т.к. в некоторых настройках БУС автодобавление слеша.