Интеграция Битрикса с лысым чертом
23.05.2014 | Автор: Степан Овчинников, Алексей Шкарупа, Анатолий Ерофеев, Сергей Покоев
Определение: Интеграция — обмен информацией с другими сайтами, базами данных, программами.
В 21 веке любая серьезная разработка обменивается данными с другими системами.
Платформа 1С-Битрикс прекрасно подходит для интеграции с любыми информационными системами. Возможности, партнерская сеть и поддержка Битрикса позволяют делать на нем почти любые бизнес-проекты. 20 000 из 49 000 российских интернет-магазинов сделаны на Битриксе (Data Insight, 2013).
Открытая архитектура дает свободу разработчику для интеграции сайта на Битриксе с любой внешней системой.
Интеграция двух сложных систем редко бывает простой, но с Битриксом — всегда возможна.
Эта статья про интеграцию сайта с чем угодно и про технологии 1С-Битрикс для этого.Текст статьи ориентирован на менеджера с хорошим уровнем понимания технологий. Идеальный случай — «программист в завязке».
С чем можно интегрировать сайт на 1С-Битрикс? C чем угодно. Нужна задача, «песочница», проектировщик и программист.
«Песочница» это игрушечная, тестовая система, которая на этапе разработки изображает, эмулирует реальную систему. Это может быть пример файла выгрузки, структуру которого обе стороны подписали. Лучше — кровью.
Отсутствие песочницы — путь к проблемам.
Проектировщик и программист должны быть умными и опытными. Это значит: знать Битрикс, иметь опыт работы с большими объемами данных и высокой нагрузкой и уметь думать вперед на несколько шагов.
Плохая реализация интеграции обойдется дорого. При кажущейся простоте задачи интеграции порождают наибольшее число рисков и являются одними из самых проблемных при запуске реальных систем.
Что обычно имеется в виду под интеграцией:
интеграция Битрикса с 1С;
как сделать на Битриксе выгрузку в Яндекс.Маркет;
импорт и экспорт данных в Битрикс в csv и xml;
интеграция с социальными сетями, вставка «лайков» на сайт на Битриксе;
получение данных с других сайтов;
подключение к внешней базе данных;
интеграция Битрикса с внешним API.
Какие будут проблемы с интеграцией и как их решать «Никогда не пытайтесь повторить удачный эксперимент»
Закон Мерфи
Вы сделали интеграцию, не дождавшись получения реальной выгрузки «Чисто писано в бумаге, да забыли про овраги»
Лев Толстой, 1857 г
Если нужна интеграция и мало времени, то есть искушение взять ТЗ (согласованный формат обмена, протокол, спецификацию) и «сделать свою часть», не дожидаясь данных от второй системы.
Это очень опасно.
Вам потребуется многое переделывать после поступления реальных данных. Изменится структура, данные будут неверно распределены по полям, вместо xml по POST придет json по SOAP и так далее.
Дело не в программистах. «Овраги» в реальных данных всегда мешают точному исполнению ТЗ. Даже если его писали вы сами.
Слова «вы сделайте, мы потом под вас подстроимся» означают, что каждая из сторон будет подстраиваться несколько раз.
Мы стараемся даже ТЗ на интеграцию не писать до получения доступа к «песочнице».
Произошли неожиданные изменения в структуре данных. Все сломалось — Они формат ответа поменяли
devanswers.ru/a/8b
Интеграция готова, все хорошо.
Сколько времени все проработает без изменений, которые сломают интеграцию? На практике — не более года. А если вам повезет, что-то может измениться уже после первого успешного теста.
Универсального решения нет. Бизнес изменчив, и протокол любого обмена будет меняться. Чтобы избежать тяжелых технических проблем, обе стороны должны понять, что изменение протокола разрешено только после согласования, планирования и аккуратного выполнения изменений.
Хуже нет, чем утром в понедельник 1-го числа узнать что во-первых, РосАлкогольРегулирование изменило отчеты, а во-вторых, программисты как раз вчера что-то обновили до новой версии.
Любого из этих событий было бы достаточно для интересной насыщенной недели. И если госструктуры управляются плохо, то программисты должны быть воспитаны в духе взаимной вежливости.
Производительность выгрузки. Импорт тупит — Нужно докупить два сервера, чтобы нормально работало
devanswers.ru/a/gg
Песочница удобна для отладки логики, но перед пуском нужно проверить работу интеграции в боевых условиях: с реальным объемом данных на реальном железе с реальной частотой обмена.
Нагрузка и время часто зависят от объема нелинейно. Например, данных вдвое больше, а время выросло в 4.
Универсального решения нет, но есть несколько простых советов:
Запомните: задача интеграции — серьезная. Пишите ТЗ, качественный код, делайте тестирование, ведите историю изменений.«Тяп-ляп» допустим только для простой однократной загрузки.
По возможности всегда используйте штатные возможности интеграции 1С-Битрикс.Когда потребуется расширить функции или повысить скорость — измените их.
Ведите журналы ошибок обмена данными. Это сэкономит массу времени на поиск проблемных мест. Не злоупотребляйте длинными и подробными лог-файлами.
Штатные механизмы интеграции — Не сломано — не чини.
Армейская мудрость.
В Битриксе есть много штатных возможностей для связи с внешними системами. В любом случае начинать нужно с них. Они не подойдут вам идеально, но для пилотной выгрузки лучше обойтись стандартными возможностями.
Это:
импорт и экспорт данных в инфоблоки Битрикс в форматах csv и xml;
стандартная выгрузка в Яндекс.Маркет;
контроллер сайтов;
агенты для запуска заданий по расписанию (можно использовать агенты, вызываемые при открытии страниц, но лучше агенты, запускаемые с помощью cron);
штатный обмен с 1С: Управление торговлей;
штатный обмен Корпоративного портала с 1С: Зарплата и управление персоналом.
… много всего. Следите за обновлениями, как говорится
Проблемы со штатными механизмами могут оказаться двух видов:
Они не умеют чего-то, что вам кажется очевидным. Писать нужно в Битрикс (конкретно — на страницу idea.1c-bitrix.ru), а винить себя. Про песочницу я уже писал, проблема зеркальна.
Ничего не мешает протестировать особо важные вещи до принятия решения.Для опытного менеджера слепое доверие маркетингу граничит с профнепригодностью.
Настоящие ошибки в стандартных обменах бывают крайне редко.
Ваши задачи нестандартны. Это не проблема, так и должно быть. Серьезным задачам — особые инструменты. Не хватает скорости, настроек, функциональности? Развивайте штатную реализацию или в крайнем случае пишите свою.
Файловый обмен с инфоблоками Может, там исо конвертится в вин, а потом уже бьется в юникоде
devanswers.ru/a/Nf
Представьте ситуацию:
вам нужно сделать интеграцию Битрикса с чем-то непонятным,
времени и денег мало,
определенность низкая,
глубина и перспективы интеграции пока не просматриваются.
Что делать? Делать на файлах, на инфоблоках, по расписанию. Именно этот вид интеграции проще всего запустить и понять каковы реальные потребности.
Вполне можно сделать простую и надежную, как автомат Калашникова, реализацию «на коленке».
Для того, чтобы жизнь стала прекрасна, а глупой работы — меньше, нужно сделать новый модуль импорта/экспорта в инфоблоки.Естественно, это задача для матерого разработчика. Вот чего не хватает в стандартном модуле:
Инфоблоки = Торговые каталогиНе делать разницы между инфоблоками и торговыми каталогами. Сейчас по факту это разные реализации
Поддержка всех типов свойствИмпортировать ВСЕ свойства элементов и ВСЕ свойства категорий (в т.ч. пользовательских).Сейчас Битрикс не импортирует пользовательские свойства категорий и поля типа text/html для элементов.
КодировкаВыбор кодировки импортируемого файла (несколько популярных)
Связанные поляВозможность импортировать xml_id, заданный в другом ИБ, и указать что связать элементы ИБ нужно по ID.
ШагиПошаговая работа, порционность и настройки. Кнопки «пауза» и «возобновить».
КатегорииИмпорт категорий любой вложенности (максимальный уровень вложенности должен указываться в настройках)
Профили
Создание профилей настроек для повторного использования (чтобы в будущем снова не указывать соответствие. полей и т.д.)
Генерация строки для CRON-а и агента 1С-Битрикс с указанием конкретной сохраненной настройки для возможности импорта по расписанию.Должно работать по принципу «скопировал-вставил», чтобы человеку не приходилось лезть в справку и смотреть как же пишутся агенты и CRON-задачи…
Загрузка картинок
из папки, находящейся на сервере. в настройках указывается папка, в ячейке csv — относительный путь и имя файла
из внешних источников (если указан не путь до картинки, а http, ftp, https — она должна скачиваться, а потом загружаться в поле ИБ)
РазделительВыбор произвольного символа разделителя, а не только табы и запятая
Значение по умолчаниюВозможность для любого поля (элемента или категории) произвольное значение «по умолчанию». может понадобиться если свойство обязательное, а в файле отсутствует.
ЛогиПротоколирование работы и мониторинг ошибок с уведомлением на емайл об успешности или ошибке (и указания базовой отладочной информации, шаг такой-то строка такая-то и т.л.)Нужно чтобы при сообщении об ошибке фиксировался и присылался на почту также контекст: 20 символов после-до или 1 строка
СсылкаУмение получить входной файл по ссылке http:// или ftp://
РасширяемостьПоддержка файла result_modifier, где написан код, который применяется к данным перед вставкой в ИБТакой файл при создании профиля должен генерироваться автоматически с указанием всех возможных входных параметров и примером такого кода.Все это может быть взято в комментарий или if (0)
Это позволит решить много задач: парсить видео с Youtube; выполнять любое преобразование данных; формировать различных цен; проставить остатки.
Флаг импортаПоддержка флага «импортировать эту строку»
Если все это сделать, многие задачи интеграции будут решаться просто настройкой, а не проектированием и программированием.
Такие вещи вряд ли в обозримом будущем станут частью платформы.Мы понимаем это и планируем выпустить свой модуль для Маркетплейса 1С-Битрикс.
Особенности файлового обмена с инфоблоками — Это не баг, это фича
Подслушано в трамвае
SKU, разноцветные диваны и печаль В самом простом случае файл обмена — это таблица, где строки — это товары, записи или элементы инфоблока, а столбцы — свойства, параметры или характеристики. Например:
IE_XML_ID
IE_NAME
IP_MATERIAL
IP_COLOR
000123
Стул Президент
Дерево
Коричневый
000124
Простыня бежевая
Хлопок
Бежевый
Все просто до тех пор, пока не встретятся товары с множественными характеристиками, например сразу нескольких типов:
IE_XML_ID
IE_NAME
IP_MATERIAL
IP_COLOR
000125
Диван Престиж
Дерево
Светло-коричневый
000125
Диван Престиж
Хлопок
Светло-коричневый
000125
Диван Престиж
Пластик
Светло-коричневый
Как ни странно, в идеологии Битрикса это будет воспринято как один и тот же диван «Престиж», но выполняемый в трех разных материалах. Обратите внимание, что у дивана в таблице одинаковы все столбцы, кроме материала. А если вы хотите продавать товары из трех материалов и двух цветов, то узнаете, что такое Декартово произведение:
IE_XML_ID
IE_NAME
IP_TYPE
IP_COLOR
000126
Диван Колосс
Узкий
Красный
000126
Диван Колосс
Узкий
Синий
000126
Диван Колосс
Узкий
Зеленый
000126
Диван Колосс
Широкий
Красный
000126
Диван Колосс
Широкий
Синий
000126
Диван Колосс
Широкий
Зеленый
Так видит Битрикс, такой файл он ждет. Если Вы не можете дать его в таком виде — программистам вашей учетной системы и веб-студии предстоит развлечение не на один час. При этом приходится идти на военную хитрость, как например перечисление всех значений в одной строчке, используя какой-нибудь редкий разделитель. Обычно проблема решается созданием примерно такого файла обмена:
IE_XML_ID
IE_NAME
IP_TYPE
IP_COLOR
000126
Диван Колосс
Узкий///Широкий
Красный///Синий///Зеленый
Получив такой (или примерно такой) вид файла, программист веб-студии сможет сделать разбиение текста по символам-разделителям (в нашем случае это »///») и поставлять данные в Битрикс как полагается.
Обычно веб-разработчикам проще докрутить что-то на своей стороне, чем убеждать сделать это программистов или админов извне. Часто это всем очевидно, и система обрастает подобными «костылями».
Злоупотребление этим — путь к бардаку.
Передача данных в отсутствующие справочники. Проблема брендов
Другая частая проблема (почти в каждом интернет-магазине она рано или поздно встретится) — это компании-производители товаров. В учетных системах, как правило, бренд товара — одна короткая строка, без подробностей.
Иногда там вместо названия фирмы написано просто «Китай».
В то время как на сайте хорошо было бы сделать отдельный раздел о производителях товаров, с изображениями и историей создания фирмы. SEO такое SEO.
Взять контент из воздуха из учетной системы не получится, придется создавать отдельную сущность — Бренд, у которой будут имя, описание, изображение и уникальный номер, по которому можно будет найти фирму. Вот только Ваша учетная система не будет знать про эти уникальные номера, а будет по-старинке называть бренды своими именами. Но и такая проблема решаема, просто не «из коробки».
Программист напишет код, который будет при импорте искать Бренд по названию (или создавать, если не найдет)
Связывание сайта на Битриксе с внешней базой данных на другом сайте — Копать будем с двух сторон сразу, погрешность…
Ну, в крайнем случае будет два туннеля
Анекдот.
Когда нужно интегрироваться с внешней базой данных? Чаще всего — когда ваш интернет-магазин (реже — личный кабинет на сайте) должен брать товары из внешнего источника, и важен прямой доступ.
Есть несколько вариантов:
прямое подключение к внешней базе и работа с ней прямыми запросами на SQL.Решение неаккуратное, но идеологии Битрикса ничем не противоречит (разумеется, если не делать этого в шаблонах компонентов и прочих ненужных местах);
применение API внешней базы — если API сделано с умом и работает как часы — радуйтесь, вам повезло;
периодический импорт данных к себе в базу для того, чтобы работать с ними родными для Битрикса средствами.Способ этот ничем не проще чем получать информацию из любого другого формата. Подразумевает много ручной малоприятной возни.Плюс в том, что на стороне Битрикса переписывать ничего не надо. Это минимизирует объем работы и отладки.
получение из внешней системы дампа базы данных и дальнейший его разбор с попутным решением коллизий.
Лучшим решением тут является создание специального API информационного обмена, работающего по какому-то удобному протоколу и имеющего все нужные функции.
Тогда на стороне Битрикса создается небольшая культурная конструкция, делающая обмен стройным, предсказуемым и стабильно работающим.
Разумеется, такая реализация должна иметь механизмы обнаружения и отслеживания ошибок в запросах и результатах и прочие атрибуты нормальной программной разработки.
Если, конечно, вам нужен один нормальный туннель вместо двух кривых.
Связывание нескольких сайтов на Битриксе между собой — А скажите, это любую стенку так убрать можно?
И в интернет-магазине тоже?
1С-Битрикс — хорошая, но платная система. А аппетит приходит во время еды. Это значит что часто заказчик хочет получить второй, третий, пятый сайт, но при этом не тратить лишние деньги на лицензию.
Вообще говоря, Битрикс позволяет развернуть на одной лицензии несколько сайтов через механизм «многосайтовости». При этом сайт (панель управления, база данных, пользователи, хостинг) остается один, но у него несколько доменных имен. У каждого доменного имени свой дизайн и контент, но физически это один сайт.
Не такая уж это многосайтовость, честно говоря. И если сайты разные, а логика сложная, то вреда от экономии на лицензиях больше чем пользы.
Мы считаем что два интернет-магазина с разными товарами, покупателями и рекламными каналами делать на одной лицензии неправильно: программисту за его головную боль придется заплатить больше, чем Битриксу за еще одну новую лицензию, а качество такого сдвоенного сайта будет ниже.
Это примерно как варить компот и сосиски в одной кастрюле. Можно, но лучше этого не делать.
В платформе есть также контроллер сайтов. Это технология обмена информацией между сайтами, которая включена в самые старшие редакции 1С-Битрикс. По этой причине технология крайне редко используется.
Как следствие, чаще всего применяются разные самописные конструкции и тем важнее уметь делать их хорошо.
Получение и использование информации с посторонних сайтов «Знания без размышлений вредны.
Размышления без знаний опасны.»
Конфуций
Оставим в стороне погодные и валютные информеры, видео с Youtube и аналогичные задачи — для них есть простые и качественные решения.
Как быть, если нужная вам информация есть на другом сайте. Классическая ситуация — дистрибьютор использует информацию с сайта производителя.
Вручную такую информацию не перетянешь — долго, дорого и некачественно. Нужно работать головой, а не только руками, и верное решение — написать программный код для прокачки данных в полуавтоматическом режиме.
Вопрос в том, как это сделать чтобы решение получилось качественное? Основная проблема — как правило, отсутствие какого-либо цивилизованного формата получения данных. Приходится «парсить» (от английского to parse) сайты «как есть».
Даже если вам разрешили использовать эту информацию, это не означает что к ней будет предоставлен удобный доступ. Обычно наоборот: через полгода обсуждений вам говорят «можно». А как — неясно.
Давайте рассмотрим самый популярный случай: нужно разместить у себя каталог товаров поставщика, находящийся на его сайте. Тут есть 2 способа: простой и качественный.
Простой плохой способ — каждый раз при открытии страницы нашего сайта скачивать страницу с сайта поставщика, преобразовывать ее (например вырезать описание товара) и показывать. Самый большой недостаток этого метода — скорость работы Вашего сайта, ведь если сайт поставщика подвиснет — ваш последует за ним. Если уж вы решились на такое — сделайте чтобы вторичная информация грузилась во вторую очередь.
Есть и другой способ — качественный и сложный.Нужно полностью получить каталог поставщика, разобрать его на составные части (разбить HTML-страничку товара на изображение, название, описание и характеристики). Затем сформировать данные в структурированные таблицы и загрузить в Битрикс, например через стандартный CSV-импорт. Несмотря на кажущуюся простоту, риски у этого метода достаточно большие. Мы чаще всего сталкиваемся со следующими проблемами:
Какие-то данные на странице подгружаются по AJAX (нужна полная эмуляция работы браузера, ожидание того, когда данные появятся на странице). Крайне неприятная работа.
Отсутствие полной информации обо всех данных и их возможных представлениях. Постоянно бывает следующая ситуация: проанализировали 50 страниц на сайте поставщика, выделили все нужные данные, написали код. А когда начали парсить, выяснилось, что состав и оформление полей на сайте-доноре «гуляет». Исследование сайта перед парсингом можно вести долго и все равно не получить исчерпывающей картины.
Для сайта нужны характеристики, а на сайте поставщика эти характеристики либо написаны как бог на душу положит, либо выведены в такой верстке что невозможно отличить одну характеристику от другой.
Некорректная работа сайта поставщика. Был у нас такой случай. Когда мы тянули данные в 1 поток — требовалось 3 недели на то, чтобы утащить весь каталог.Когда попытались сделать несколько параллельных потоков — сайт стал безбожно врать, выдавать некорректную информацию. Не выдавать ошибку, а именно врать! Сайт, например, сообщал что Lexus производит автомобили модели Focus. Такие содержательные ошибки обнаружить крайне сложно.
Сайт защищается. Или глючит. Или и то и другое. Это касается случаев когда вы без разрешения пытаетесь утащить чужой контент.Брать чужое просто так неправильно даже в 21 веке, и в УК РФ тоже есть кое-что про это.Например, попытка парсить любой из сайтов Яндекса быстро приводит к наблюдению капчи вместо целевой страницы :-).В таких случаях приходится или договариваться с сайтом, который вы разбираете, или использовать сеть подставных proxy.Кроме того, сам процесс получения данных сайта снаружи — ресурсоемкая нагружающая процедура. Желательно поменьше доставлять неудобств донору, раз уж вы им пользуетесь.
Отдельная задача — очищать данные с сайта поставщика (лишние стили, относительные ссылки, вставленные картинки).
Есть программы, которые немного помогают в этом процессе, но и они не идеальны. Редко удается обойтись без написания кода специально для этого.
Простая на первый взгляд задача получить таблицу с данными с другого сайта становится очень нетривиальной, если решать ее «как надо». Можно составить описание требуемых способностей для программиста, который будет проводить для Вас парсинг:
В итоге задача не для средних умов, но вполне решаемая, если сразу оценить калибр.
Интеграция Битрикса с 1С. Строим мост. Люди «с улицы» обычно говорят про Битрикс что главное преимущество этой системы в том, что она «на ты» с 1С и легко настроить интеграцию.На первый взгляд (после изучения маркетинговых материалов) все так и есть. Если же смотреть глубже, то можно докопаться до истины. Вот она:
интегрировать действительно можно, и это выйдет проще чем с другими системами;
ручной труд, настройка, программирование при интеграции требуется почти всегда, и его немало. «из коробки» почти никогда сразу не работает потому, что 1С допилена, исправлена и далеко ушла от «штатной поставки»;
связать сайт с какой-то экзотической 1С-системой можно, но процесс этот далеко не тривиален и требует хорошего знания обоих берегов.
Рекомендую старую и очень хорошую статью на эту тему: http://habrahabr.ru/post/137888/. Автор хорошо показал все проблемы интеграции сайта с 1С.
Кроме того, в нашем блоге описаны многие вопросы интеграции 1С-Битрикс и системы 1С.
С чем чаще всего приходится сталкиваться?
1С-Битрикс и «одинэска семерка» 1С версии 7.7 — не самый плохой вариант. Неплохой благодаря модулю обмена Битрикса с 1С 7.7 от одного из партнеров, доступен в Маркетплейсе. Использовали, рекомендуем.
Все недостатки в основном из-за самой 1С. Наибольший из них — проблемы с картинками. Их приходится загружать отдельно, указывая в 1С название файла.
Проблем тем больше, чем сильнее «семерка» прокачана нестандартными для нее бизнес-процессами.
Даже обычные на первый взгляд операции: удаление групп товаров, замена части фотографий могут стать очень непросты.
1С-Битрикс и Управление торговлей 10.X — 11.X Штатная интеграция работает. Особенно если на стороне 1С «ничего не допиливалось» и у Вас установлена свежая версия модуля обмена. Как уже сказано, такого почти не бывает.
Поэтому готовьтесь взять за основу стандартный код импорта-экспорта товаров и заказов и творчески доработать его под себя.
Писать с нуля крайне не рекомендуется. Попытка 1С-программиста руками сгенерировать CommerceML нужной структуры это отложенный на несколько месяцев суицид.
Помучившись, 1С-ники обычно приходят к мысли о CSV-обмене, который резко сужает возможности обмена, но все же реализуем с нуля.
Компании 1С и 1С-Битрикс постоянно развивают возможности интеграции. В частности, на 2014 год анонсирован режим работы в реальном времени. Более того, буквально в середине апреля прошла презентация технологии. С нетерпением ждем в боевых проектах.
Интеграция сайта на Битриксе с Яндекс.Маркет Важность Я.Маркета для интернет-магазинов сложно переоценить. Это один из самых больших агрегаторов предложений, способный дать большой объем продаж.
Что же предлагает нам 1С-Битрикс для интеграции с Яндекс.Маркетом?
Есть штатная интеграция, которая умеет выгружать небольшой каталог в одном из 4х основных форматов (default, vendor.model и др). Его основной недостаток — прожорливость, требования к оперативной памяти.
Например, если вы на виртуальном хостинге или не очень мощном сервере будете выгружать 1–2 тысячи товаров, вам может не хватить памяти, выделенной под процесс php.Быстрое решение — добавить памяти. Более тонкий подход — кастомизация (создание на основе этого кода своего мастера) и ковырянием в коде в течение 1–2 часов. Помогает, проверено.
Яндекс.Маркет постоянно развивается. Меняется и бизнес интернет-магазина. Есть много такого, что требуется интернет-магазину, и чего в стандартном обмене нет:
Выгрузка сразу нескольких инфоблоков как одного каталога (чтобы не создавать по 1й рекламной кампании на каждый ИБ). Особо остро вопрос стоит для магазинов, архитектура которых схожа с популярным тиражным решением «Битроник».
Часто данные нужно обрабатывать перед выгрузкой (из названия убрать бренд, из цены выкинуть копейки, какой-нибудь параметр заполнить константным текстом — про доставку например). Тут очень пригодилась бы функция предварительной обработки данных перед выгрузкой.
Выгрузка разных групп каталога в разных форматах или с разными настройками.
Есть несколько модулей в маркетплейс: одни сложно настраивать, другие падают при больших объемах данных. Полноценного хорошего решения на апрель 2014 года до сих пор нет.
Мы планируем разработку и выпуск собственного модуля интеграции с Я.Маркетом, который будет хорошо решать самые большие проблемы выгрузки:
поддержка больших объемов данных в условиях ограниченного объема памяти;
гибкая работа с инфоблоками — одна выгрузка из разных ИБ;
гибкая и легкая кастомизация, в том числе передача особых полей для дополнительных форматов обмена Я.Маркета;
максимальное покрытие всех полей формата по спецификации.
Работа большая, но мы ее сделаем.
Связываем Битрикс с внешними системами по протоколу SOAP SOAP — протокол обмена структурированными сообщениями в распределённой вычислительной среде. Первоначально SOAP предназначался в основном для реализации удалённого вызова процедур (RPC). Сейчас протокол используется для обмена произвольными сообщениями в формате XML.
SOAP и PHP В PHP можно пользоваться SOAP. Есть расширение php_soap (в версии 5.2.9). Там все как надо, и все работает.
Дело в том, что появилось это великолепие относительно недавно, гораздо позже чем поддержка SOAP появилась в Битриксе.
SOAP и 1С-Битрикс В Битриксе есть SOAP. Называется это модуль «веб-сервисы», который входит в «эксперт», «бизнес» и старшие редакции.
Как водится, в Битриксе есть пользовательская документация и описание для разработчика. Документация могла бы быть и подробнее, хотя для старта ее вполне достаточно.
C помощью битриксового SOAP можно реализовать собственный SOAP / WDSL сервер без расширения php-soap.
Битриксовая реализация SOAP хорошо работает, если учитывать ее особенности:
Механизм отладки созданных вами методов имеет особенность: он не сообщает о внутренних ошибках при вызове. Вам xml будет возвращен без ошибок. Механизм позволит только отладить ваши функции, но не протестировать обмен до конца.
Из первого вытекает второе — нам необходимо использовать реальный внешний обмен по soap, а не тот, что предоставляет Битрикс, для финального тестирования. Например, можно использовать программу SoapUI.
Все возвращаемые методами данные должны быть явным образом приведены к тем типам данных, которые наш метод должен вернуть согласно описанию. В противном случае получим критическую ошибку.Это несколько неожиданно для PHP-программистов, избалованных автоматическим приведением типов в PHP.
Надо помнить и учитывать особенности синтаксиса XML. Например, особенно актуальная проблема — значением в XML не может быть числом. Например, если мы получили массив данных, где ключи автоматически созданы (0,1,2) и мы возвращаем этот массив — XML будет не корректен.
Веб-сервисы 1С-Битрикс работают с версией SOAP 1.0 и используют WSDL 1.1. Это может стать критичным ограничением, если мобильное приложение пришлет запрос используя SOAP 1.1.
Работа с SOAPом по сложности и неопределенности сравнима с интеграцией с 1С неизвестной версии.
Эти риски нужно учитывать. Если вы встречаете в ТЗ на интеграцию упоминание SOAP — расслабляться рано.Все как всегда: протокол, версия, доступы, песочница, реальные данные, условия для тестов и логи.
Внешняя авторизация на Битриксе Немного теории Многие крупные (даже можно сказать гиганты) веб-проекты с социальным уклоном (Google, Facebook, Yandex, Mail.ru…), предоставляют своим пользователями возможность входить на новые сайты без процедуры регистрации. Все это называется волшебным словом OAuth — открытый протокол авторизации, который в своей сфере является надежным стандартом.
Практическое применение этого протокола налицо. Провайдер авторизации (уже перечисленные Google, Facebook, Yandex, Mail.ru…) говорит сайту, что на свете есть такой замечательный человек — Вася Пупкин, что он из плоти и крови, а вовсе не робот, что у него есть имя и фамилия и даже электронная почта. Рядовому сайту большего знать и не требуется, поэтому он с радостью без лишних проволочек даст Васе Пупкину доступ к своим недрам.
Внешняя авторизация Сегодня нельзя удивить пользователя возможностью войти на сайт, используя его профиль в любимом ВК/Facebook/Twitter… В нынешних условиях это уже стало стандартным требованием к хоть сколько-то крупным веб-проектам.
Зная эту тенденцию, Битрикс разработал модуль Социальные сервисы, который входит во все редакции продукта, начиная со «Старта». Но есть маленькое «но» — одно наличие этого модуля на вашем сайте не делает авторизацию через социальные сети возможной. Второе обязательное требование к сайту — это регистрация его как веб-приложения.
Это несложная задача, с которой можно справиться буквально за несколько минут, но есть несколько важных деталей:
В большинстве случаев при регистрации сайта в социальной сети у Вас спросят адрес сайта. Авторизация будет работать до тех пор, пока адрес будет актуален. Если разработка сайта ведется на техническом домене (у нас в ИНТЕРВОЛГЕ разработка ведется на техническом домене четвертого уровня, общая длина ссылки на сайт в разработке в большинстве случаев 20–25 символов), а запуск будет осуществляться на другом, более приятном и коротком, нужно не забыть и обновить адрес сайта везде, где он зарегистрирован.
Владельцем профиля сайта в соцсетях может быть как веб-студия, так и владелец сайта. Но лучше, если это будет владелец — и дело не только в этической стороне вопроса. Это может породить трудности, если развитием сайта будет заниматься другое агентство, или изменится протокол обмена данными между социальной сетью и сайтом, или вы получите новый красивый адрес для вашего проекта. Многие действия требуют подтверждения по коду, высылаемому на телефон — не будете же вы искать того программиста, который три года назад при разработке записал сайт на себя, а сейчас уже уволился и уехал жить отшельником в Сибирь?
Отсюда вытекает следующая важная деталь — вы сами должны быть зарегистрированы в социальных сетях, чтобы быть владельцем сайта в ее глазах.
После этой нехитрой процедуры помимо стандартных строк «логин-пароль-подтверждение пароля-зарегистрироваться» посетители смогут заходить на сайт из своих социальных профилей, и ничем не будут отличаться в глазах вашего сайта от прочих пользователей. А если посетитель уже был зарегистрирован обычным способом на сайте, он сможет связать все свои профили в один.
Интеграция сайта на Битриксе с социальными сетями Интеграцию с социальными сетями можно делать по-разному.
Социальные «лайки»
Вторая по популярности задача интеграции после авторизации через соцсети. Блок не занимает много места на странице,
Полный текст статьи читайте на CMS Magazine