Вариант реализации REST API для 1С-Битрикс Управление сайтом

29.10.20

Интеграция - Сайты и интернет-магазины

В статье опишу вариант обмена 1С УТ 11.4 и 1С-Битрикс управление сайтом с иcпользованием компонентов Symfony, в качестве примера обмен данными по товарам.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Вариант реализации REST API для 1С-Битрикс Управление сайтом:
.zip 1,02Mb
15
15 Скачать (1 SM) Купить за 1 850 руб.

Вводные

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

Слеш в конце строки сделал для унификации, т.к. в некоторых настройках БУС автодобавление слеша.

 
 Пример маршрута

 

В маршрутах можно использовать regex, что удобно при работе и через id и через xml_id

 
 Пример маршрута получения элемента

 

Организация точки входа

В файле index.php описываем приложение, подключаем контроллеры с данными.

 
 Содержимое index.php

1. Аутентификация по токену

1.1 Заголовок токена, его значения, инфоблоки для работы с товарами заданы в Helpers/ConfigAPI

 

Работа с товарами

 
 Содержимое \Controllers\References\ProductController

 

Основная логика описана в "ReferenceIblockController" и "ReferenceController"

 
 Содержимое ReferenceIblockController

 

 
  Содержимое ReferenceController

 

Для чтения списка товаров используется "Iblock\ElementTable", т.к. поддерживает limit/offset, для работы с элементами используется CIBlockElement, потому что в новом движке через ElementTable элемент не поменять.

Наследование использую для уменьшения количества кода, т.к. операции с элементами повторяются.

Для проверки параметров запроса и данных в теле запроса использую https://symfony.com/doc/current/validation.html, существенно удобнее чем вручную все проверять и писать сообщения. При ошибки проверки вызываю исключение BadRequestException в которое передаю массив ошибок.

 

Работа со справочником товары, реализация со стороны 1С

 
 Процедура загрузки списка

 

Гружу без пагинации, т.к. каталог небольшой, текущего limit 1000 хватает.

Для обновления элемента используется код

 
 Функция обновления xml_id

 

Итог

Реализация обмена через REST не сложна, гибка и структурирована, понятно на каком именно элементе произошла ошибка.

Сборка symfony нестандартная, если получится нормально настроить ErrorHandler, то будет чуть проще.

 

Благодарю за внимание.

Битрикс REST API Обмен 1С.

См. также

Сайты и интернет-магазины Платформа 1С v8.3 1С:Розница 2 Розничная и сетевая торговля (FMCG) Россия Платные (руб)

Готовое интеграционное решение для оплаты покупок Долями в 1C:Розница 2.3. Реализовано в виде расширения. Интеграция сервиса dolyame.ru для приема платежей в рассрочку. Поддерживает работу от разных юридических лиц. Работа: в составе РИБ, отдельно от РИБ, тонкий, толстый клиент, web-клиент (через интернет-браузер).

22440 руб.

19.12.2023    6121    40    11    

37

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 1C:Бухгалтерия 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    18552    20    22    

18

Сайты и интернет-магазины Платформа 1С v8.3 1С:Розница 3.0 Розничная и сетевая торговля (FMCG) Россия Платные (руб)

Готовое интеграционное решение для оплаты покупок Долями в 1C:Розница 3.0. Реализовано в виде расширения. Интеграция сервиса dolyame.ru для приема платежей в рассрочку. Поддерживает работу от разных юридических лиц. Работа: в составе РИБ, отдельно от РИБ, тонкий, толстый клиент, web-клиент (через интернет-браузер). Интегрировано в Чек ККМ, Рабочее место кассира (РМК)

24000 руб.

02.11.2024    761    3    0    

4

Сайты и интернет-магазины Платформа 1С v8.3 1С:Розница 2 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Управленческий учет Платные (руб)

Склад Вашего магазина онлайн в Telegram. С картинками, ценами, описанием и характеристиками. Используйте Telegram как торговую площадку и увеличивайте продажи.

54000 руб.

10.09.2024    1033    2    4    

3

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 1C:Бухгалтерия Управленческий учет Платные (руб)

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23): 1С:Управление торговлей, 1С:Управление Нашей фирмой 3, 1С:Комплексная автоматизация 2, Объединенное решение: Модуль 1С:CRM 3 (3.0.21.3) +1С:ERP Управление предприятием 2. При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

7200 руб.

04.05.2021    20693    13    19    

18

Сайты и интернет-магазины Программист Бизнес-аналитик Пользователь Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Управленческий учет Платные (руб)

Программа позволяет одним кликом настроить сбор цен ваших конкурентов или дилеров в интернете. Автоматически собирает данные результата поиска Яндекса (вам не придется вручную добавлять каждый сайт, за которым нужно следить). Обновление цен происходит по заданному вами расписанию автоматически. Можете легко отслеживать позиции вашего сайта в Яндексе по ключевым словам и фразам. Этот инструмент даст вам лучшее понимание того, как ваша SEO-стратегия влияет на видимость вашего сайта в поисковой выдаче, и поможет вам улучшить контент и структуру сайта для повышения его позиций. Функция доступна во всех тарифах.

19950 руб.

23.09.2019    31307    8    12    

31
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. FreeArcher 162 30.01.20 11:57 Сейчас в теме
Не соглашусь с первыми 2 пунктами.

Но решение интересное и познавательное, спасибо за статью.

Вопрос следующий: в БУС развивается свое REST API и планируется создать обмен с использованием его (по аналогии, как сейчас работает обмен с Битрикс24). Не сморили в сторону работы через REST API?
2. malikov_pro 1327 30.01.20 14:19 Сейчас в теме
(1) "БУС развивается свое REST API" - Отсутсвие документации и включить не получилось, компонент размещенный в админке не сработал.

Общая проблема битрикса это работа как "черный ящик", пример: грузим через модуль от битрикс реализации в сторону БУС, прилетает первый, после блокировка, типа "нельзя редактировать заказ после реализации". Даже при работе с API напрямую мучаюсь со структурами данных (вытаскивал информацию о приложенных файлах), а БУС REST API это еще один слой абстракции со своими косяками.
Допом подход к архитектуре программистов дорабатывающих типовое решение, запихать остатки в пути в множественнное строковое свойство и отключить его, и хрен пойми как проверять корректность данных со стороны админки пользователем. Про качество кода и организацию сторонних библиотек еще хуже.
Если кратко - накипело, хочу по возможности перевести на другую CMS или фреймворк.

"Но решение интересное и познавательное" - есть желание развить, с упором на редактирование данных на стороне 1С, а CMS чисто обертка.
3. Bublik2011 9 03.10.22 16:56 Сейчас в теме
Ок. Не соглашусь с третьим пунктом. Элементарно кастомизируется копированием компоненты. Откровенно говоря, после копирования - первым этапом надо "нарисовать XML", а потом уже немного "своего" добавить кода в "доп модуль https://1c.1c-bitrix.ru/ecommerce" для формирования "нарисованной XML"

На дворе уже конец 2022 года. C api-rest вендора не ахти как хорошо. Мда-а.аа...
Идеально в своих задачах применять свой, самописный API, пэтому, malikov_pro , Ваше решение - блестящее и идеальная , масштабируемая абстракция !!

P.S. Кстати, в приаттаченном файле не хватает метода getItemListByIds

	/**
	 * @param array $idList
	 * @param array $order
	 *
	 * @return array
	 */
	public static function getItemListByIds(array $idList, array $order = null )
	{
		if (empty($idList)) {
			return $idList;
		}
		$ItemListByIds=[];

		$iterator = static::getClass()::getList([
			'select' => static::getItemFields(),
			'filter' => ['=ID' => $idList]
		]);

		while ($row = $iterator->fetch()) {
			$ItemListByIds[]= $row;
		}

		return $ItemListByIds;
	}
Показать
Оставьте свое сообщение