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

29.10.20

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

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

Скачать файл

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

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

20400 руб.

19.12.2023    3245    21    8    

21

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

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

36000 руб.

03.08.2020    16861    15    19    

15

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

Расширение для 1С Управление торговлей, реализует: а) Загрузку номенклатуры с сайта с нужными параметрами. б) Позволяет быстро обновлять цены и остатки из 1С в Веб сайт на Битрикс, на лету. (онлайн). в) Моментально прогружать заказы и создавать реализации.

30000 руб.

29.03.2024    839    1    1    

1

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

В обработке реализован механизм интеграции между системой поставщика на базе конфигураций 1с(управление торговлей 11) и Личным кабинетом Hoff. Реализован обмен остатками. Обработка реализована и тестировалась для УТ 11.4 Система позволяет выгружать из базы 1с поставщика хофф остатки товаров и другие данные в систему Hoff Преимущества: оперативное и регулярное обновление информации на сайте, уходит двойная работа по вводу остатков в разных системах (1С и личном кабинете HOFF), что чревато возникновением большого количества ошибок в управленческом учете. А также сократятся трудозатраты и повысится прибыль предприятия от продаж. Целевая аудитория: отделы маркетинга, продаж и склад, управленцы из сферы крупного, среднего бизнеса и мелкие предприниматели, владельцы ИП.

29880 руб.

16.11.2022    6610    1    5    

2

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

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    19215    10    17    

16

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

Данный модуль предоставляет возможность выгружать заказы из 1С: Управление торговлей 11 версии в "MEASOFT" (ранее "Курьерская служба 2008").

9600 руб.

27.04.2022    11060    19    3    

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

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

Вопрос следующий: в БУС развивается свое REST API и планируется создать обмен с использованием его (по аналогии, как сейчас работает обмен с Битрикс24). Не сморили в сторону работы через REST API?
2. malikov_pro 1314 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;
	}
Показать
Оставьте свое сообщение