Битрикс? Очень приятно...
Определение: Интеграция — обмен информацией с другими сайтами, базами данных, программами.
В 21 веке любая серьезная разработка обменивается данными с другими системами.
Интеграция нужна почти всем и почти всегда.
Платформа 1С-Битрикс прекрасно подходит для интеграции с любыми информационными системами. Возможности, партнерская сеть и поддержка Битрикса позволяют делать на нем почти любые бизнес-проекты. 20 000 из 49 000 российских интернет-магазинов сделаны на Битриксе (Data Insight, 2013).
Открытая архитектура дает свободу разработчику для интеграции сайта на Битриксе с любой внешней системой.
Интеграция двух сложных систем редко бывает простой, но с Битриксом — всегда возможна.
Эта статья про интеграцию сайта с чем угодно и про технологии 1С-Битрикс для этого.
Текст статьи ориентирован на менеджера с хорошим уровнем понимания технологий. Идеальный случай — «программист в завязке».
C чем угодно. Нужна задача, «песочница», проектировщик и программист.
«Песочница» это игрушечная, тестовая система, которая на этапе разработки изображает, эмулирует реальную систему. Это может быть пример файла выгрузки, структуру которого обе стороны подписали. Лучше — кровью.
Отсутствие песочницы — путь к проблемам.
Проектировщик и программист должны быть умными и опытными. Это значит: знать Битрикс, иметь опыт работы с большими объемами данных и высокой нагрузкой и уметь думать вперед на несколько шагов.
Плохая реализация интеграции обойдется дорого. При кажущейся простоте задачи интеграции порождают наибольшее число рисков и являются одними из самых проблемных при запуске реальных систем.
Что обычно имеется в виду под интеграцией:
интеграция Битрикса с 1С;
как сделать на Битриксе выгрузку в Яндекс.Маркет;
импорт и экспорт данных в Битрикс в csv и xml;
интеграция с социальными сетями, вставка «лайков» на сайт на Битриксе;
получение данных с других сайтов;
подключение к внешней базе данных;
интеграция Битрикса с внешним API.
«Никогда не пытайтесь повторить удачный эксперимент»
Закон Мерфи
«Чисто писано в бумаге, да забыли про овраги»
Лев Толстой, 1857 г
Если нужна интеграция и мало времени, то есть искушение взять ТЗ (согласованный формат обмена, протокол, спецификацию) и «сделать свою часть», не дожидаясь данных от второй системы.
Это очень опасно.
Вам потребуется многое переделывать после поступления реальных данных. Изменится структура, данные будут неверно распределены по полям, вместо xml по POST придет json по SOAP и так далее.
Дело не в программистах. «Овраги» в реальных данных всегда мешают точному исполнению ТЗ. Даже если его писали вы сами.
Слова «вы сделайте, мы потом под вас подстроимся» означают, что каждая из сторон будет подстраиваться несколько раз.
Мы стараемся даже ТЗ на интеграцию не писать до получения доступа к «песочнице».
— Они формат ответа поменяли
Интеграция готова, все хорошо.
Сколько времени все проработает без изменений, которые сломают интеграцию? На практике — не более года. А если вам повезет, что-то может измениться уже после первого успешного теста.
Универсального решения нет. Бизнес изменчив, и протокол любого обмена будет меняться. Чтобы избежать тяжелых технических проблем, обе стороны должны понять, что изменение протокола разрешено только после согласования, планирования и аккуратного выполнения изменений.
Хуже нет, чем утром в понедельник
Любого из этих событий было бы достаточно для интересной насыщенной недели. И если госструктуры управляются плохо, то программисты должны быть воспитаны в духе взаимной вежливости.
— Нужно докупить два сервера,
чтобы нормально работало
Песочница удобна для отладки логики, но перед пуском нужно проверить работу интеграции в боевых условиях: с реальным объемом данных на реальном железе с реальной частотой обмена.
Нагрузка и время часто зависят от объема нелинейно. Например, данных вдвое больше, а время выросло в 4.
Универсального решения нет, но есть несколько простых советов:
Запомните: задача интеграции — серьезная. Пишите ТЗ, качественный код, делайте тестирование, ведите историю изменений.
«Тяп-ляп» допустим только для простой однократной загрузки.
По возможности всегда используйте штатные возможности интеграции 1С-Битрикс.
Когда потребуется расширить функции или повысить скорость — измените их.
Ведите журналы ошибок обмена данными. Это сэкономит массу времени на поиск проблемных мест. Не злоупотребляйте длинными и подробными лог-файлами.
— Не сломано — не чини.
Армейская мудрость.
В Битриксе есть много штатных возможностей для связи с внешними системами. В любом случае начинать нужно с них. Они не подойдут вам идеально, но для пилотной выгрузки лучше обойтись стандартными возможностями.
Это:
импорт и экспорт данных в инфоблоки Битрикс в форматах csv и xml;
стандартная выгрузка в Яндекс.Маркет;
контроллер сайтов;
агенты для запуска заданий по расписанию (можно использовать агенты, вызываемые при открытии страниц, но лучше агенты, запускаемые с помощью cron);
штатный обмен с 1С: Управление торговлей;
штатный обмен Корпоративного портала с 1С: Зарплата и управление персоналом.
... много всего. Следите за обновлениями, как говорится
Проблемы со штатными механизмами могут оказаться двух видов:
Они не умеют чего-то, что вам кажется очевидным. Писать нужно в Битрикс (конкретно — на страницу idea.1c-bitrix.ru), а винить себя. Про песочницу я уже писал, проблема зеркальна.
Ничего не мешает протестировать особо важные вещи до принятия решения.
Для опытного менеджера слепое доверие маркетингу граничит с профнепригодностью.
Настоящие ошибки в стандартных обменах бывают крайне редко.
Ваши задачи нестандартны. Это не проблема, так и должно быть. Серьезным задачам — особые инструменты. Не хватает скорости, настроек, функциональности? Развивайте штатную реализацию или в крайнем случае пишите свою.
Может, там исо конвертится в вин,
а потом уже бьется в юникоде
Представьте ситуацию:
вам нужно сделать интеграцию Битрикса с чем-то непонятным,
времени и денег мало,
определенность низкая,
глубина и перспективы интеграции пока не просматриваются.
Что делать? Делать на файлах, на инфоблоках, по расписанию. Именно этот вид интеграции проще всего запустить и понять каковы реальные потребности.
Вполне можно сделать простую и надежную, как автомат Калашникова, реализацию «на коленке».
Для того, чтобы жизнь стала прекрасна, а глупой работы — меньше, нужно сделать новый модуль импорта/экспорта в инфоблоки.
Естественно, это задача для матерого разработчика. Вот чего не хватает в стандартном модуле:
Инфоблоки = Торговые каталоги
Не делать разницы между инфоблоками и торговыми каталогами. Сейчас по факту это разные реализации
Поддержка всех типов свойств
Импортировать ВСЕ свойства элементов и ВСЕ свойства категорий (в т.ч. пользовательских).
Сейчас Битрикс не импортирует пользовательские свойства категорий и поля типа text/html для элементов.
Кодировка
Выбор кодировки импортируемого файла (несколько популярных)
Связанные поля
Возможность импортировать xml_id, заданный в другом ИБ, и указать что связать элементы ИБ нужно по ID.
Шаги
Пошаговая работа, порционность и настройки. Кнопки «пауза» и «возобновить».
Категории
Импорт категорий любой вложенности (максимальный уровень вложенности должен указываться в настройках)
Профили
Создание профилей настроек для повторного использования (чтобы в будущем снова не указывать соответствие. полей и т.д.)
Генерация строки для CRON-а и агента 1С-Битрикс с указанием конкретной сохраненной настройки для возможности импорта по расписанию.
Должно работать по принципу «скопировал-вставил», чтобы человеку не приходилось лезть в справку и смотреть как же пишутся агенты и CRON-задачи..
Загрузка картинок
из папки, находящейся на сервере. в настройках указывается папка, в ячейке csv — относительный путь и имя файла
из внешних источников (если указан не путь до картинки, а http, ftp, https — она должна скачиваться, а потом загружаться в поле ИБ)
Разделитель
Выбор произвольного символа разделителя, а не только табы и запятая
Значение по умолчанию
Возможность для любого поля (элемента или категории) произвольное значение «по умолчанию». может понадобиться если свойство обязательное, а в файле отсутствует.
Логи
Протоколирование работы и мониторинг ошибок с уведомлением на емайл об успешности или ошибке (и указания базовой отладочной информации, шаг такой-то строка такая-то и т.л.)
Нужно чтобы при сообщении об ошибке фиксировался и присылался на почту также контекст: 20 символов после-до или 1 строка
Ссылка
Умение получить входной файл по ссылке http:// или ftp://
Расширяемость
Поддержка файла result_modifier, где написан код, который применяется к данным перед вставкой в ИБ
Такой файл при создании профиля должен генерироваться автоматически с указанием всех возможных входных параметров и примером такого кода.
Все это может быть взято в комментарий или if(0)
Это позволит решить много задач: парсить видео с Youtube; выполнять любое преобразование данных; формировать различных цен; проставить остатки.
Флаг импорта
Поддержка флага «импортировать эту строку»
Если все это сделать, многие задачи интеграции будут решаться просто настройкой, а не проектированием и программированием.
Такие вещи вряд ли в обозримом будущем станут частью платформы.
Мы понимаем это и планируем выпустить свой модуль для Маркетплейса 1С-Битрикс.
— Это не баг, это фича
Подслушано в трамвае
В самом простом случае файл обмена — это таблица, где строки — это товары, записи или элементы инфоблока, а столбцы — свойства, параметры или характеристики. Например:
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.
Кроме того, сам процесс получения данных сайта снаружи — ресурсоемкая нагружающая процедура. Желательно поменьше доставлять неудобств донору, раз уж вы им пользуетесь.
Отдельная задача — очищать данные с сайта поставщика (лишние стили, относительные ссылки, вставленные картинки).
Есть программы, которые немного помогают в этом процессе, но и они не идеальны. Редко удается обойтись без написания кода специально для этого.
Простая на первый взгляд задача получить таблицу с данными с другого сайта становится очень нетривиальной, если решать ее «как надо». Можно составить описание требуемых способностей для программиста, который будет проводить для Вас парсинг:
все про сайты :-)
regexp, xpath
proxy, multithreading
async sockets
и еще много страшных слов
В итоге задача не для средних умов, но вполне решаемая, если сразу оценить калибр.
Люди «с улицы» обычно говорят про Битрикс что главное преимущество этой системы в том, что она «на ты» с 1С и легко настроить интеграцию.
На первый взгляд (после изучения маркетинговых материалов) все так и есть. Если же смотреть глубже, то можно докопаться до истины. Вот она:
интегрировать действительно можно, и это выйдет проще чем с другими системами;
ручной труд, настройка, программирование при интеграции требуется почти всегда, и его немало. «из коробки» почти никогда сразу не работает потому, что 1С допилена, исправлена и далеко ушла от «штатной поставки»;
связать сайт с какой-то экзотической 1С-системой можно, но процесс этот далеко не тривиален и требует хорошего знания обоих берегов.
Рекомендую старую и очень хорошую статью на эту тему: http://habrahabr.ru/post/137888/. Автор хорошо показал все проблемы интеграции сайта с 1С.
Кроме того, в нашем блоге описаны многие вопросы интеграции 1С-Битрикс и системы 1С.
С чем чаще всего приходится сталкиваться?
1С версии 7.7 — не самый плохой вариант. Неплохой благодаря модулю обмена Битрикса с 1С 7.7 от одного из партнеров, доступен в Маркетплейсе. Использовали, рекомендуем.
Все недостатки в основном из-за самой 1С. Наибольший из них — проблемы с картинками. Их приходится загружать отдельно, указывая в 1С название файла.
Проблем тем больше, чем сильнее «семерка» прокачана нестандартными для нее бизнес-процессами.
Даже обычные на первый взгляд операции: удаление групп товаров, замена части фотографий могут стать очень непросты.
Штатная интеграция работает. Особенно если на стороне 1С «ничего не допиливалось» и у Вас установлена свежая версия модуля обмена. Как уже сказано, такого почти не бывает.
Поэтому готовьтесь взять за основу стандартный код импорта-экспорта товаров и заказов и творчески доработать его под себя.
Писать с нуля крайне не рекомендуется. Попытка 1С-программиста руками сгенерировать CommerceML нужной структуры это отложенный на несколько месяцев суицид.
Помучившись, 1С-ники обычно приходят к мысли о CSV-обмене, который резко сужает возможности обмена, но все же реализуем с нуля.
Компании 1С и 1С-Битрикс постоянно развивают возможности интеграции. В частности, на 2014 год анонсирован режим работы в реальном времени. Более того, буквально в середине апреля прошла презентация технологии. С нетерпением ждем в боевых проектах.
Важность Я.Маркета для интернет-магазинов сложно переоценить. Это один из самых больших агрегаторов предложений, способный дать большой объем продаж.
Что же предлагает нам 1С-Битрикс для интеграции с Яндекс.Маркетом?
Есть штатная интеграция, которая умеет выгружать небольшой каталог в одном из 4х основных форматов (default, vendor.model и др). Его основной недостаток — прожорливость, требования к оперативной памяти.
Например, если вы на виртуальном хостинге или не очень мощном сервере будете выгружать
Быстрое решение — добавить памяти. Более тонкий подход — кастомизация (создание на основе этого кода своего мастера) и ковырянием в коде в течение
Яндекс.Маркет постоянно развивается. Меняется и бизнес интернет-магазина. Есть много такого, что требуется интернет-магазину, и чего в стандартном обмене нет:
Выгрузка сразу нескольких инфоблоков как одного каталога (чтобы не создавать по 1й рекламной кампании на каждый ИБ). Особо остро вопрос стоит для магазинов, архитектура которых схожа с популярным тиражным решением «Битроник».
Часто данные нужно обрабатывать перед выгрузкой (из названия убрать бренд, из цены выкинуть копейки, какой-нибудь параметр заполнить константным текстом — про доставку например). Тут очень пригодилась бы функция предварительной обработки данных перед выгрузкой.
Выгрузка разных групп каталога в разных форматах или с разными настройками.
Есть несколько модулей в маркетплейс: одни сложно настраивать, другие падают при больших объемах данных. Полноценного хорошего решения на апрель 2014 года до сих пор нет.
Мы планируем разработку и выпуск собственного модуля интеграции с Я.Маркетом, который будет хорошо решать самые большие проблемы выгрузки:
поддержка больших объемов данных в условиях ограниченного объема памяти;
гибкая работа с инфоблоками — одна выгрузка из разных ИБ;
гибкая и легкая кастомизация, в том числе передача особых полей для дополнительных форматов обмена Я.Маркета;
максимальное покрытие всех полей формата по спецификации.
Работа большая, но мы ее сделаем.
SOAP — протокол обмена структурированными сообщениями в распределённой вычислительной среде. Первоначально SOAP предназначался в основном для реализации удалённого вызова процедур (RPC). Сейчас протокол используется для обмена произвольными сообщениями в формате XML.
В PHP можно пользоваться SOAP. Есть расширение php_soap (в версии 5.2.9). Там все как надо, и все работает.
Дело в том, что появилось это великолепие относительно недавно, гораздо позже чем поддержка SOAP появилась в Битриксе.
В Битриксе есть 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... В нынешних условиях это уже стало стандартным требованием к хоть сколько-то крупным веб-проектам.
Зная эту тенденцию, Битрикс разработал модуль Социальные сервисы, который входит во все редакции продукта, начиная со «Старта». Но есть маленькое «но» — одно наличие этого модуля на вашем сайте не делает авторизацию через социальные сети возможной. Второе обязательное требование к сайту — это регистрация его как веб-приложения.
Это несложная задача, с которой можно справиться буквально за несколько минут, но есть несколько важных деталей:
В большинстве случаев при регистрации сайта в социальной сети у Вас спросят адрес сайта. Авторизация будет работать до тех пор, пока адрес будет актуален. Если разработка сайта ведется на техническом домене (у нас в ИНТЕРВОЛГЕ разработка ведется на техническом домене четвертого уровня, общая длина ссылки на сайт в разработке в большинстве случаев
Владельцем профиля сайта в соцсетях может быть как веб-студия, так и владелец сайта. Но лучше, если это будет владелец — и дело не только в этической стороне вопроса. Это может породить трудности, если развитием сайта будет заниматься другое агентство, или изменится протокол обмена данными между социальной сетью и сайтом, или вы получите новый красивый адрес для вашего проекта. Многие действия требуют подтверждения по коду, высылаемому на телефон — не будете же вы искать того программиста, который три года назад при разработке записал сайт на себя, а сейчас уже уволился и уехал жить отшельником в Сибирь?
Отсюда вытекает следующая важная деталь — вы сами должны быть зарегистрированы в социальных сетях, чтобы быть владельцем сайта в ее глазах.
После этой нехитрой процедуры помимо стандартных строк «логин-пароль-подтверждение пароля-зарегистрироваться» посетители смогут заходить на сайт из своих социальных профилей, и ничем не будут отличаться в глазах вашего сайта от прочих пользователей. А если посетитель уже был зарегистрирован обычным способом на сайте, он сможет связать все свои профили в один.
Интеграцию с социальными сетями можно делать по-разному.
Вторая по популярности задача интеграции после авторизации через соцсети. Блок не занимает много места на странице, обычно его располагают в конце основного контента. Блок позволяет посетителям выражать свое отношение к контенту, а так же поделиться ссылкой на страницу.
Размещение подобного блока на странице сайта, работающего на Битриксе, состоит из двух шагов:
Регистрация сайта в социальных сетях (как в первом случае"Авторизация через соцсети«)
Получение специального кода для размещения блока на своей странице
Обычно такие блоки ставятся массово под статьями, постами блога, страницами товаров. Позволяют посетителям сайта, которые пользуются социальными сетями, в два клика разместить ссылку на сайт на своей страничке.
Что хорошего в таком способе интеграции с социальными сетями?
Во-первых, Вы даете пользователям простой и удобный способ рассказать друзьям и знакомым о вашем сайте, а сами можете получить ссылки в соцсетях и переходы по этим ссылкам.
Во-вторых, добавить такой блок на сайт не требует лишних телодвижений — есть масса сервисов, которые сгенерируют вам ссылки подобного вида (Яндекс, Share42, AddThis), есть стандартный компонент Битрикса.
Мы на такие объемы данных не рассчитывали
Размещение ссылок и анонсов новых событий в соцсетях становится все более явной тенденцией в вебе. И, как любой процесс, он может быть автоматизирован.
Для любого разработчика под Битрикс известна студия DEFA и их полезнейший модуль DEFA Tools. Менее известен модуль для автоматической публикации новостей в социальных сетях DEFA SocialMediaPoster. Разработчики обещают поддерживать его и развивать, им хочется верить.
Модуль позволяет автоматически выкладывать новый контент в социальные сети, снимая эту обязанность с менеджеров. Но, как и все в этом мире, модуль не идеален.
Например, DEFA SocialMediaPoster публикует только новые элементы инфоблоков, свою информацию размещать было невозможно. А на нашей практике был случай, когда требовалось осуществлять еженедельный отчет в твиттер о состоянии конкурса, общем количестве участников и количестве новых работ за прошедшие семь дней.
Задача тем не менее была решена за счет создания дополнительного служебного инфоблока «отчеты», который создавался по агенту каждые семь дней, из которого уже силами модуля осуществлялась отправка текста в Твиттер.
Итак, у вас есть сайт на Битриксе, и нужно связать его с чем-то снаружи. Бояться не надо, надо работать.
Чтобы ничего не пропустить, задайте вопросы и проанализируйте ответы на них:
Данные. Что?
Что передаем? Объем, кодировка, возможные вариации в обменах?
Обмен будет регулярным или разовым?
Известен ли реальный объем данных, частота обмена? Можно ли получить доступ к реальному потоку?
Есть ли выгрузка в виде файла для упрощения тестирования?
Есть ли режим частичного обмена, когда передаются только измененные данные?
Формат/протокол обмена известен, документирован и не будет меняться?
Серверы. Откуда и куда?
Какая система инициирует обмен?
Есть ли «песочница»?
Сколько сайтов-доноров? Будут ли меняться www- и ip-адреса, версии систем?
Какие ограничения на процессорное время, память, длительность одной операции будут на серверах?
Сервер-донор умеет возвращать коды ошибок на неверные запросы?
Сервер-донор, адреса и способ доступа известны, документированы и не будут меняться?
Процесс. Как?
Делалась ли в прошлом кем-либо такая интеграция? Что получилось? Можно ли поговорить с теми, кто делал?
Требования к времени обмена?
Будет ли пошаговый режим?
Какие параметры обмена должны настраиваться без участия программистов? Нужна ли настройка и хранение профилей обмена?
Какие требования к логированию обмена? Коды ошибок, детализация операций?
Какие требования к защите данных? Шифрование, ssl?
Получив цельную картину, зафиксируйте ее в коротком, но информативном ТЗ, и подпишите его с постановщиком.
И принимайтесь за работу.
PS. Я хочу поблагодарить людей, которые писали эту статью вместе со мной. Это Алексей Шкарупа, Анатолий Ерофеев, Сергей Покоев. Также я благодарен за тщательную проверку и многочисленные замечания Владимиру Федянову, Сергею Горелову и Ольге Семироговой.
За картинки спасибо Александру Стрельцову.
Если у вас есть задача интеграции вебсайта на Битриксе с чемто сложным — мы с удовольствием ей займемся. Обращайтесь в ИНТЕРВОЛГУ.
Вне сомнений, 1С-Битрикс - сегодня самая популярная платформа для разработки сайтов. Нужен разработчик на Битриксе? Специально для таких случаев мы ежегодно обновляем данные независимого рейтинга веб-студий. Поверьте, почти все участники топ-100, прекрасно знают все особенности, плюсы и минусы данной CMS.
Оригинал: http://www.intervolga.ru/blog/bitrix/bitrix-site-integration-with-anything/
Проведите конкурс среди участников CMS Magazine
Узнайте цены и сроки уже завтра. Это бесплатно и займет ≈5 минут.
Директор в Ай Ти Констракт
Разработка интернет-магазинов с интеграцией с 1С и другими внешними системами — это основное направление работы нашей компании, поэтому я с удовольствием откликнулся на запрос о комментарии.
Действительно, среди разработчиков сайтов с одной стороны, и программистов 1С (и других систем), с другой, «гуляет» очень много мифов относительно связки 1С-Битрикс с 1С, 1С-Битрикс и других систем и программирования на 1С-Битрикс в целом.
Часто эти мифы связаны либо с неумением работать с системой, либо с неумением программировать (или вести проекты по интеграции).
Поэтому хотел бы выделить и подчеркнуть несколько моментов, которые автор описывает:
Например, у нас обмен между 1С и сайтом — это часто одна из самых существенных статей бюджета при разработке интернет-магазина. И значительное время уходит именно на проверку корректности передаваемых данных и загрузки-выгрузки этих данных.
Статья достаточно длинная, но при этом заслуживает того, чтобы ее прочитать до конца и обращаться к ней в случае, если перед вами возникает проект по интеграции. Особенно если раньше вы не вели такие проекты. Статья поможет оценить риски, а небольшой опросник в конце статьи позволит не упустить ряд важных моментов.