Интеграция Битрикса с лысым чертом

122.png

Сайт на 1С-Битрикс можно связать с чем угодно

Интеграция, обмен информацией, импорт-экспорт данных

Определение: Интеграция — обмен информацией с другими сайтами, базами данных, программами.

В 21 веке любая серьезная разработка обменивается данными с другими системами.

Интеграция нужна почти всем и почти всегда.

Почему Битрикс?

Платформа 1С-Битрикс прекрасно подходит для интеграции с любыми информационными системами. Возможности, партнерская сеть и поддержка Битрикса позволяют делать на нем почти любые бизнес-проекты. 20 000 из 49 000 российских интернет-магазинов сделаны на Битриксе (Data Insight, 2013).

Открытая архитектура дает свободу разработчику для интеграции сайта на Битриксе с любой внешней системой.

Интеграция двух сложных систем редко бывает простой, но с Битриксом — всегда возможна.

Эта статья про интеграцию сайта с чем угодно и про технологии 1С-Битрикс для этого. 
Текст статьи ориентирован на менеджера с хорошим уровнем понимания технологий. Идеальный случай — «программист в завязке».

С чем можно интегрировать сайт на 1С-Битрикс?

C чем угодно. Нужна задача, “песочница”, проектировщик и программист.

«Песочница» это игрушечная, тестовая система, которая на этапе разработки изображает, эмулирует реальную систему. Это может быть пример файла выгрузки, структуру которого обе стороны подписали. Лучше — кровью.

Отсутствие песочницы — путь к проблемам.

Проектировщик и программист должны быть умными и опытными. Это значит: знать Битрикс, иметь опыт работы с большими объемами данных и высокой нагрузкой и уметь думать вперед на несколько шагов.

Плохая реализация интеграции обойдется дорого. При кажущейся простоте задачи интеграции порождают наибольшее число рисков и являются одними из самых проблемных при запуске реальных систем.

Что обычно имеется в виду под интеграцией:

  • интеграция Битрикса с 1С;

  • как сделать на Битриксе выгрузку в Яндекс.Маркет;

  • импорт и экспорт данных в Битрикс в csv и xml;

  • интеграция с социальными сетями, вставка «лайков» на сайт на Битриксе;

  • получение данных с других сайтов;

  • подключение к внешней базе данных;

  • интеграция Битрикса с внешним API.

интеграция Битрикса с яндекс-маркетом, 1С

Какие будут проблемы с интеграцией и как их решать

«Никогда не пытайтесь повторить удачный эксперимент»

Закон Мерфи

Вы сделали интеграцию, не дождавшись получения реальной выгрузки

«Чисто писано в бумаге, да забыли про овраги»

Лев Толстой, 1857 г

Если нужна интеграция и мало времени, то есть искушение взять ТЗ (согласованный формат обмена, протокол, спецификацию) и «сделать свою часть», не дожидаясь данных от второй системы.

Это очень опасно.

Вам потребуется многое переделывать после поступления реальных данных. Изменится структура, данные будут неверно распределены по полям, вместо xml по POST придет json по SOAP и так далее.

Дело не в программистах. «Овраги» в реальных данных всегда мешают точному исполнению ТЗ. Даже если его писали вы сами.

Слова «вы сделайте, мы потом под вас подстроимся» означают, что каждая из сторон будет подстраиваться несколько раз.

Мы стараемся даже ТЗ на интеграцию не писать до получения доступа к «песочнице».

png;base643ec810055e420e6b.png


Произошли неожиданные изменения в структуре данных. Все сломалось

— Они формат ответа поменяли

devanswers.ru/a/8b

Интеграция готова, все хорошо.

Сколько времени все проработает без изменений, которые сломают интеграцию? На практике — не более года. А если вам повезет, что-то может измениться уже после первого успешного теста.

Универсального решения нет. Бизнес изменчив, и протокол любого обмена будет меняться.  x_78fecdba.png Чтобы избежать тяжелых технических проблем, обе стороны должны понять, что изменение протокола разрешено только после согласования, планирования и аккуратного выполнения изменений.

Хуже нет, чем утром в понедельник 1-го числа узнать что во-первых, РосАлкогольРегулирование изменило отчеты, а во-вторых, программисты как раз вчера что-то обновили до новой версии.

Любого из этих событий было бы достаточно для интересной насыщенной недели. И если госструктуры управляются плохо, то программисты должны быть воспитаны в духе взаимной вежливости.

Производительность выгрузки. Импорт тупит

— Нужно докупить два сервера,

чтобы нормально работало

devanswers.ru/a/gg


Песочница удобна для отладки логики, но перед пуском нужно проверить работу интеграции в боевых условиях: с реальным объемом данных на реальном железе с реальной частотой обмена.

png;base64b57d2aeae536e9e7.png

Нагрузка и время часто зависят от объема нелинейно. Например, данных вдвое больше, а время выросло в 4.

Универсального решения нет, но есть несколько простых советов:

  • Запомните: задача интеграции — серьезная. Пишите ТЗ, качественный код, делайте тестирование, ведите историю изменений.
    «Тяп-ляп» допустим только для простой однократной загрузки.

  • По возможности всегда используйте штатные возможности интеграции 1С-Битрикс.
    Когда потребуется расширить функции или повысить скорость — измените их.

  • Ведите журналы ошибок обмена данными. Это сэкономит массу времени на поиск проблемных мест. Не злоупотребляйте длинными и подробными лог-файлами.


Штатные механизмы интеграции

— Не сломано - не чини.

Армейская мудрость.

В Битриксе есть много штатных возможностей для связи с внешними системами. В любом случае начинать нужно с них. Они не подойдут вам идеально, но для пилотной выгрузки лучше обойтись стандартными возможностями.

Это:

  • импорт и экспорт данных в инфоблоки Битрикс в форматах csv и xml;

  • стандартная выгрузка в Яндекс.Маркет;

  • контроллер сайтов;

  • агенты для запуска заданий по расписанию (можно использовать агенты, вызываемые при открытии страниц, но лучше агенты, запускаемые с помощью cron);

  • штатный обмен с 1С: Управление торговлей;

  • штатный обмен Корпоративного портала с 1С: Зарплата и управление персоналом.

  • … много всего. Следите за обновлениями, как говорится 1c.png

Проблемы со штатными механизмами могут оказаться двух видов:

  1. Они не умеют чего-то, что вам кажется очевидным. Писать нужно в Битрикс (конкретно — на страницу idea.1c-bitrix.ru ), а винить себя. Про песочницу я уже писал, проблема зеркальна.

    Ничего не мешает протестировать особо важные вещи до принятия решения.
    Для опытного менеджера слепое доверие маркетингу граничит с профнепригодностью.

    Настоящие ошибки в стандартных обменах бывают крайне редко.

  2. Ваши задачи нестандартны. Это не проблема, так и должно быть. Серьезным задачам — особые инструменты. Не хватает скорости, настроек, функциональности? Развивайте штатную реализацию или в крайнем случае пишите свою.

Файловый обмен с инфоблоками

Может, там исо конвертится в вин,
а потом уже бьется в юникоде

devanswers.ru/a/Nf

проблемы с интеграцией с 1С

Представьте ситуацию:

  • вам нужно сделать интеграцию Битрикса с чем-то непонятным,

  • времени и денег мало,

  • определенность низкая,

  • глубина и перспективы интеграции пока не просматриваются.

AK-47-Kalashnikov-[LIMITED-to-500px].jpg

Что делать? Делать на файлах, на инфоблоках, по расписанию. Именно этот вид интеграции проще всего запустить и понять каковы реальные потребности.

Вполне можно сделать простую и надежную, как автомат Калашникова, реализацию «на коленке».

Для того, чтобы жизнь стала прекрасна, а глупой работы — меньше, нужно сделать новый модуль импорта/экспорта в инфоблоки.
Естественно, это задача для матерого разработчика. Вот чего не хватает в стандартном модуле:

  • Инфоблоки = Торговые каталоги
    Не делать разницы между инфоблоками и торговыми каталогами. Сейчас по факту это разные реализации

  • Поддержка всех типов свойств
    Импортировать ВСЕ свойства элементов и ВСЕ свойства категорий (в т.ч. пользовательских).
    Сейчас Битрикс не импортирует пользовательские свойства категорий и поля типа text/html для элементов.

  • Кодировка
    Выбор кодировки импортируемого файла (несколько популярных)

  • Связанные поля
    Возможность импортировать xml_id, заданный в другом ИБ, и указать что связать элементы ИБ нужно по ID.

i_027.jpg
  • Шаги
    Пошаговая работа, порционность и настройки. Кнопки «пауза» и «возобновить».

  • Категории
    Импорт категорий любой вложенности (максимальный уровень вложенности должен указываться в настройках)

  • Профили

    • Создание профилей настроек для повторного использования (чтобы в будущем снова не указывать соответствие. полей и т.д.)

    • Генерация строки для 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

Диван Колосс

Широкий

Зеленый



импорт SKU товарных предложений в Битрикс

Так видит Битрикс, такой файл он ждет. Если Вы не можете дать его в таком виде — программистам вашей учетной системы и веб-студии предстоит развлечение не на один час. При этом приходится идти на военную хитрость, как например перечисление всех значений в одной строчке, используя какой-нибудь редкий разделитель. Обычно проблема решается созданием примерно такого файла обмена:


IE_XML_ID

IE_NAME

IP_TYPE

IP_COLOR

000126

Диван Колосс

Узкий///Широкий

Красный///Синий///Зеленый

Получив такой (или примерно такой) вид файла, программист веб-студии сможет сделать разбиение текста по символам-разделителям (в нашем случае это «///») и поставлять данные в Битрикс как полагается.

Обычно веб-разработчикам проще докрутить что-то на своей стороне, чем убеждать сделать это программистов или админов извне. Часто это всем очевидно, и система обрастает подобными «костылями».

Злоупотребление этим — путь к бардаку.

Передача данных в отсутствующие справочники. Проблема брендов

debranded-no-noise_popsop_com.png

Другая частая проблема (почти в каждом интернет-магазине она рано или поздно встретится) — это компании-производители товаров. В учетных системах, как правило, бренд товара — одна короткая строка, без подробностей.

Иногда там вместо названия фирмы написано просто «Китай».

В то время как на сайте хорошо было бы сделать отдельный раздел о производителях товаров, с изображениями и историей создания фирмы. SEO такое SEO.

Взять контент из воздуха из учетной системы не получится, придется создавать отдельную сущность — Бренд, у которой будут имя, описание, изображение и уникальный номер, по которому можно будет найти фирму. Вот только Ваша учетная система не будет знать про эти уникальные номера, а будет по-старинке называть бренды своими именами. Но и такая проблема решаема, просто не «из коробки».

Программист напишет код, который будет при импорте искать Бренд по названию (или создавать, если не найдет) и подставлять нужный уникальный номер.






Связывание сайта на Битриксе с внешней базой данных на другом сайте

— Копать будем с двух сторон сразу, погрешность... 
Ну, в крайнем случае будет два туннеля

Анекдот.

Когда нужно интегрироваться с внешней базой данных? Чаще всего — когда ваш интернет-магазин (реже — личный кабинет на сайте) должен брать товары из внешнего источника, и важен прямой доступ.

Есть несколько вариантов:

  • прямое подключение к внешней базе и работа с ней прямыми запросами на SQL.
    Решение неаккуратное, но идеологии Битрикса ничем не противоречит (разумеется, если не делать этого в шаблонах компонентов и прочих ненужных местах);

integration-1kscm1o.png
  • применение API внешней базы — если API сделано с умом и работает как часы — радуйтесь, вам повезло;

  • периодический импорт данных к себе в базу для того, чтобы работать с ними родными для Битрикса средствами.
    Способ этот ничем не проще чем получать информацию из любого другого формата. Подразумевает много ручной малоприятной возни.
    Плюс в том, что на стороне Битрикса переписывать ничего не надо. Это минимизирует объем работы и отладки.

  • получение из внешней системы дампа базы данных и дальнейший его разбор с попутным решением коллизий.

Лучшим решением тут является создание специального API информационного обмена, работающего по какому-то удобному протоколу и имеющего все нужные функции.

Тогда на стороне Битрикса создается небольшая культурная конструкция, делающая обмен стройным, предсказуемым и стабильно работающим.

Разумеется, такая реализация должна иметь механизмы обнаружения и отслеживания ошибок в запросах и результатах и прочие атрибуты нормальной программной разработки.

Если, конечно, вам нужен один нормальный туннель вместо двух кривых.


png;base64c57a6a06b4595517.png


Связывание нескольких сайтов на Битриксе между собой

— А скажите, это любую стенку так убрать можно? 
И в интернет-магазине тоже?

png;base64a8c95808c6f0d0a3.png

1С-Битрикс — хорошая, но платная система. А аппетит приходит во время еды. Это значит что часто заказчик хочет получить второй, третий, пятый сайт, но при этом не тратить лишние деньги на лицензию.

Вообще говоря, Битрикс позволяет развернуть на одной лицензии несколько сайтов через механизм «многосайтовости». При этом сайт (панель управления, база данных, пользователи, хостинг) остается один, но у него несколько доменных имен. У каждого доменного имени свой дизайн и контент, но физически это один сайт.

Не такая уж это многосайтовость, честно говоря. И если сайты разные, а логика сложная, то вреда от экономии на лицензиях больше чем пользы.

Мы считаем что два интернет-магазина с разными товарами, покупателями и рекламными каналами делать на одной лицензии неправильно: программисту за его головную боль придется заплатить больше, чем Битриксу за еще одну новую лицензию, а качество такого сдвоенного сайта будет ниже.

Это примерно как варить компот и сосиски в одной кастрюле. Можно, но лучше этого не делать.

В платформе есть также контроллер сайтов . Это технология обмена информацией между сайтами, которая включена в самые старшие редакции 1С-Битрикс. По этой причине технология крайне редко используется.

Как следствие, чаще всего применяются разные самописные конструкции и тем важнее уметь делать их хорошо.

Получение и использование информации с посторонних сайтов

«Знания без размышлений вредны. 
Размышления без знаний опасны.»

Конфуций

Оставим в стороне погодные и валютные информеры, видео с Youtube и аналогичные задачи — для них есть простые и качественные решения.

Как быть, если нужная вам информация есть на другом сайте. Классическая ситуация — дистрибьютор использует информацию с сайта производителя.

Вручную такую информацию не перетянешь — долго, дорого и некачественно. Нужно работать головой, а не только руками, и верное решение — написать программный код для прокачки данных в полуавтоматическом режиме.

png;base64d2c54f924992edda.png

Вопрос в том, как это сделать чтобы решение получилось качественное? Основная проблема — как правило, отсутствие какого-либо цивилизованного формата получения данных. Приходится «парсить» (от английского to parse) сайты «как есть».

Даже если вам разрешили использовать эту информацию, это не означает что к ней будет предоставлен удобный доступ. Обычно наоборот: через полгода обсуждений вам говорят «можно». А как — неясно.

1.png

Давайте рассмотрим самый популярный случай: нужно разместить у себя каталог товаров поставщика, находящийся на его сайте. Тут есть 2 способа: простой и качественный.

Простой плохой способ — каждый раз при открытии страницы нашего сайта скачивать страницу с сайта поставщика, преобразовывать ее (например вырезать описание товара) и показывать. Самый большой недостаток этого метода — скорость работы Вашего сайта, ведь если сайт поставщика подвиснет — ваш последует за ним. Если уж вы решились на такое — сделайте чтобы вторичная информация грузилась во вторую очередь.

Есть и другой способ — качественный и сложный.
Нужно полностью получить каталог поставщика, разобрать его на составные части (разбить HTML-страничку товара на изображение, название, описание и характеристики). Затем сформировать данные в структурированные таблицы и загрузить в Битрикс, например через стандартный CSV-импорт. Несмотря на кажущуюся простоту, риски у этого метода достаточно большие. Мы чаще всего сталкиваемся со следующими проблемами:

  1. Какие-то данные на странице подгружаются по AJAX (нужна полная эмуляция работы браузера, ожидание того, когда данные появятся на странице). Крайне неприятная работа.

  2. Отсутствие полной информации обо всех данных и их возможных представлениях. Постоянно бывает следующая ситуация: проанализировали 50 страниц на сайте поставщика, выделили все нужные данные, написали код. А когда начали парсить, выяснилось, что состав и оформление полей на сайте-доноре «гуляет». Исследование сайта перед парсингом можно вести долго и все равно не получить исчерпывающей картины.

  3. Для сайта нужны характеристики, а на сайте поставщика эти характеристики либо написаны как бог на душу положит, либо выведены в такой верстке что невозможно отличить одну характеристику от другой. 

    HomerSimpsonEatingPics.jpg
  4. Некорректная работа сайта поставщика.  Был у нас такой случай. Когда мы тянули данные в 1 поток — требовалось 3 недели на то, чтобы утащить весь каталог.
    Когда попытались сделать несколько параллельных потоков - сайт стал безбожно врать, выдавать некорректную информацию. Не выдавать ошибку, а именно врать!
    Сайт, например, сообщал что Lexus производит автомобили модели Focus. Такие содержательные ошибки обнаружить крайне сложно.

  5. Сайт защищается. Или глючит. Или и то и другое. Это касается случаев когда вы без разрешения пытаетесь утащить чужой контент.
    Брать чужое просто так неправильно даже в 21 веке, и в УК РФ тоже есть кое-что про это.
    Например, попытка парсить любой из сайтов Яндекса быстро приводит к наблюдению капчи вместо целевой страницы :-).
    В таких случаях приходится или договариваться с сайтом, который вы разбираете, или использовать сеть подставных proxy.
    Кроме того, сам процесс получения данных сайта снаружи — ресурсоемкая нагружающая процедура. Желательно поменьше доставлять неудобств донору, раз уж вы им пользуетесь.

Отдельная задача — очищать данные с сайта поставщика (лишние стили, относительные ссылки, вставленные картинки).

Есть программы, которые немного помогают в этом процессе, но и они не идеальны. Редко удается обойтись без написания кода специально для этого.

tumblr_lz27v51v6t1r2fq6xo1_500.gif

Простая на первый взгляд задача получить таблицу с данными с другого сайта становится очень нетривиальной, если решать ее «как надо». Можно составить описание требуемых способностей для программиста, который будет проводить для Вас парсинг:

  • все про сайты :-)

  • regexp, xpath

  • proxy, multithreading

  • async sockets

  • и еще много страшных слов


В итоге задача не для средних умов, но вполне решаемая, если сразу оценить калибр.

Интеграция Битрикса с 1С. Строим мост.

Люди «с улицы» обычно говорят про Битрикс что главное преимущество этой системы в том, что она «на ты» с 1С и легко настроить интеграцию.
На первый взгляд (после изучения маркетинговых материалов) все так и есть. Если же смотреть глубже, то можно докопаться до истины. Вот она:

  • интегрировать действительно можно, и это выйдет проще чем с другими системами;

  • ручной труд, настройка, программирование при интеграции требуется почти всегда, и его немало. «из коробки» почти никогда сразу не работает потому, что 1С допилена, исправлена и далеко ушла от «штатной поставки»;

  • связать сайт с какой-то экзотической 1С-системой можно, но процесс этот далеко не тривиален и требует хорошего знания обоих берегов.

png;base64200e2c64c3537317.png

Рекомендую старую и очень хорошую статью на эту тему: http://habrahabr.ru/post/137888/ . Автор хорошо показал все проблемы интеграции сайта с 1С.

Кроме того, в нашем блоге описаны многие вопросы интеграции 1С-Битрикс и системы 1С .

С чем чаще всего приходится сталкиваться?

1С-Битрикс и «одинэска семерка»

1С версии 7.7 — не самый плохой вариант. Неплохой благодаря модулю обмена Битрикса с 1С 7.7 от одного из партнеров, доступен в Маркетплейсе. Использовали, рекомендуем.

Все недостатки в основном из-за самой 1С. Наибольший из них — проблемы с картинками. Их приходится загружать отдельно, указывая в 1С название файла.

Проблем тем больше, чем сильнее «семерка» прокачана нестандартными для нее бизнес-процессами.

png;base64289d47280086414.png

Даже обычные на первый взгляд операции: удаление групп товаров, замена части фотографий могут стать очень непросты.

1С-Битрикс и Управление торговлей 10.X - 11.X

Штатная интеграция работает. Особенно если на стороне 1С «ничего не допиливалось» и у Вас установлена свежая версия модуля обмена. Как уже сказано, такого почти не бывает.

png;base64f55264cae498a411.png

Поэтому готовьтесь взять за основу стандартный код импорта-экспорта товаров и заказов и творчески доработать его под себя.

Писать с нуля крайне не рекомендуется. Попытка 1С-программиста руками сгенерировать CommerceML нужной структуры это отложенный на несколько месяцев суицид.

Помучившись, 1С-ники обычно приходят к мысли о CSV-обмене, который резко сужает возможности обмена, но все же реализуем с нуля.

Компании 1С и 1С-Битрикс постоянно развивают возможности интеграции. В частности, на 2014 год анонсирован режим работы в реальном времени. Более того, буквально в середине апреля прошла презентация технологии . С нетерпением ждем в боевых проектах.

Интеграция сайта на Битриксе с Яндекс.Маркет

Важность Я.Маркета для интернет-магазинов сложно переоценить. Это один из самых больших агрегаторов предложений, способный дать большой объем продаж.

Что же предлагает нам 1С-Битрикс для интеграции с Яндекс.Маркетом?

png;base647dfedc96dc8e2cd7.png

Есть штатная интеграция, которая умеет выгружать небольшой каталог в одном из 4х основных форматов (default, vendor.model и др). Его основной недостаток — прожорливость, требования к оперативной памяти.

Например, если вы на виртуальном хостинге или не очень мощном сервере будете выгружать 1-2 тысячи товаров, вам может не хватить памяти, выделенной под процесс php.
Быстрое решение — добавить памяти. Более тонкий подход — кастомизация (создание на основе этого кода своего мастера) и ковырянием в коде в течение 1-2 часов. Помогает, проверено.

Яндекс.Маркет постоянно развивается. Меняется и бизнес интернет-магазина. Есть много такого, что требуется интернет-магазину, и чего в стандартном обмене нет:

  1. Выгрузка сразу нескольких инфоблоков как одного каталога (чтобы не создавать по 1й рекламной кампании на каждый ИБ). Особо остро вопрос стоит для магазинов, архитектура которых схожа с популярным тиражным решением «Битроник».

  2. Часто данные нужно обрабатывать перед выгрузкой (из названия убрать бренд, из цены выкинуть копейки, какой-нибудь параметр заполнить константным текстом — про доставку например). Тут очень пригодилась бы функция предварительной обработки данных перед выгрузкой.

  3. Выгрузка разных групп каталога в разных форматах или с разными настройками.

Есть несколько модулей в маркетплейс: одни сложно настраивать, другие падают при больших объемах данных. Полноценного хорошего решения на апрель 2014 года до сих пор нет.

Мы планируем разработку и выпуск собственного модуля интеграции с Я.Маркетом, который будет хорошо решать самые большие проблемы выгрузки:

  • поддержка больших объемов данных в условиях ограниченного объема памяти;

  • гибкая работа с инфоблоками — одна выгрузка из разных ИБ;

  • гибкая и легкая кастомизация, в том числе передача особых полей для дополнительных форматов обмена Я.Маркета;

  • максимальное покрытие всех полей формата по спецификации.

Работа большая, но мы ее сделаем.

Связываем Битрикс с внешними системами по протоколу SOAP

SOAP - протокол обмена структурированными сообщениями в распределённой вычислительной среде. Первоначально SOAP предназначался в основном для реализации удалённого вызова процедур (RPC). Сейчас протокол используется для обмена произвольными сообщениями в формате XML.

SOAP и PHP

В PHP можно пользоваться SOAP. Есть расширение php_soap (в версии 5.2.9). Там все как надо, и все работает.

Дело в том, что появилось это великолепие относительно недавно, гораздо позже чем поддержка SOAP появилась в Битриксе.

SOAP и 1С-Битрикс

В Битриксе есть SOAP. Называется это модуль «веб-сервисы», который входит в «эксперт», «бизнес» и старшие редакции.

soap и 1С-Битрикс

Как водится, в Битриксе есть пользовательская документация и описание для разработчика . Документация могла бы быть и подробнее, хотя для старта ее вполне достаточно.

C помощью битриксового SOAP можно реализовать собственный SOAP / WDSL сервер без расширения php-soap.

Битриксовая реализация SOAP хорошо работает, если учитывать ее особенности:

png;base64bb2e9d9f6dd267a9.png
  1. Механизм отладки созданных вами методов имеет особенность: он не сообщает о внутренних ошибках при вызове. Вам xml будет возвращен без ошибок. Механизм позволит только отладить ваши функции, но не протестировать обмен до конца.

  2. Из первого вытекает второе — нам необходимо использовать реальный внешний обмен по soap, а не тот, что предоставляет Битрикс, для финального тестирования. Например, можно использовать программу SoapUI.

  3. Все возвращаемые методами данные должны быть явным образом приведены к тем типам данных, которые наш метод должен вернуть согласно описанию. В противном случае получим критическую ошибку.
    Это несколько неожиданно для PHP-программистов, избалованных автоматическим приведением типов в PHP.

  4. Надо помнить и учитывать особенности синтаксиса XML. Например, особенно актуальная проблема — значением в XML не может быть числом. Например, если мы получили массив данных, где ключи автоматически созданы (0,1,2) и мы возвращаем этот массив — XML будет не корректен.

  5. Веб-сервисы 1С-Битрикс работают с версией SOAP 1.0 и используют WSDL 1.1. Это может стать критичным ограничением, если мобильное приложение пришлет запрос используя SOAP 1.1.

  6. Работа с SOAPом по сложности и неопределенности сравнима с интеграцией с 1С неизвестной версии.


    Эти риски нужно учитывать. Если вы встречаете в ТЗ на интеграцию упоминание SOAP — расслабляться рано.
    Все как всегда: протокол, версия, доступы, песочница, реальные данные, условия для тестов и логи.

Внешняя авторизация на Битриксе

Немного теории

Многие крупные (даже можно сказать гиганты) веб-проекты с социальным уклоном (Google, Facebook, Yandex, Mail.ru…), предоставляют своим пользователями возможность входить на новые сайты без процедуры регистрации. Все это называется волшебным словом OAuth — открытый протокол авторизации, который в своей сфере является надежным стандартом.

Практическое применение этого протокола налицо. Провайдер авторизации (уже перечисленные Google, Facebook, Yandex, Mail.ru…) говорит сайту, что на свете есть такой замечательный человек — Вася Пупкин, что он из плоти и крови, а вовсе не робот, что у него есть имя и фамилия и даже электронная почта. Рядовому сайту большего знать и не требуется, поэтому он с радостью без лишних проволочек даст Васе Пупкину доступ к своим недрам.

Внешняя авторизация

Сегодня нельзя удивить пользователя возможностью войти на сайт, используя его профиль в любимом ВК/Facebook/Twitter… В нынешних условиях это уже стало стандартным требованием к хоть сколько-то крупным веб-проектам.

Зная эту тенденцию, Битрикс разработал модуль Социальные сервисы , который входит во все редакции продукта, начиная со «Старта». Но есть маленькое «но» - одно наличие этого модуля на вашем сайте не делает авторизацию через социальные сети возможной. Второе обязательное требование к сайту - это регистрация его как веб-приложения.

ScreenShot 171.png

Это несложная задача, с которой можно справиться буквально за несколько минут, но есть несколько важных деталей:

  1. В большинстве случаев при регистрации сайта в социальной сети у Вас спросят адрес сайта. Авторизация будет работать до тех пор, пока адрес будет актуален. Если разработка сайта ведется на техническом домене (у нас в ИНТЕРВОЛГЕ разработка ведется на техническом домене четвертого уровня, общая длина ссылки на сайт в разработке в большинстве случаев 20-25 символов), а запуск будет осуществляться на другом, более приятном и коротком, нужно не забыть и обновить адрес сайта везде, где он зарегистрирован.

  2. Владельцем профиля сайта в соцсетях может быть как веб-студия, так и владелец сайта. Но лучше, если это будет владелец — и дело не только в этической стороне вопроса. Это может породить трудности, если развитием сайта будет заниматься другое агентство, или изменится протокол обмена данными между социальной сетью и сайтом, или вы получите новый красивый адрес для вашего проекта. Многие действия требуют подтверждения по коду, высылаемому на телефон — не будете же вы искать того программиста, который три года назад при разработке записал сайт на себя, а сейчас уже уволился и уехал жить отшельником в Сибирь?

  3. Отсюда вытекает следующая важная деталь — вы сами должны быть зарегистрированы в социальных сетях, чтобы быть владельцем сайта в ее глазах.

После этой нехитрой процедуры помимо стандартных строк «логин-пароль-подтверждение пароля-зарегистрироваться» посетители смогут заходить на сайт из своих социальных профилей, и ничем не будут отличаться в глазах вашего сайта от прочих пользователей. А если посетитель уже был зарегистрирован обычным способом на сайте, он сможет связать все свои профили в один.

Интеграция сайта на Битриксе с социальными сетями

Интеграцию с социальными сетями можно делать по-разному.

Социальные «лайки»

ScreenShot 169.png

Вторая по популярности задача интеграции после авторизации через соцсети. Блок не занимает много места на странице, обычно его располагают в конце основного контента. Блок позволяет посетителям выражать свое отношение к контенту, а так же поделиться ссылкой на страницу.

Размещение подобного блока на странице сайта, работающего на Битриксе, состоит из двух шагов:

  1. Регистрация сайта в социальных сетях (как в первом случае»Авторизация через соцсети»)

  2. Получение специального кода для размещения блока на своей странице

Публикация ссылок в социальных сетях

Обычно такие блоки ставятся массово под статьями, постами блога, страницами товаров. Позволяют посетителям сайта, которые пользуются социальными сетями, в два клика разместить ссылку на сайт на своей страничке.

ScreenShot168.png

Что хорошего в таком способе интеграции с социальными сетями?

Во-первых, Вы даете пользователям простой и удобный способ рассказать друзьям и знакомым о вашем сайте, а сами можете получить ссылки в соцсетях и переходы по этим ссылкам.

Во-вторых, добавить такой блок на сайт не требует лишних телодвижений - есть масса сервисов, которые сгенерируют вам ссылки подобного вида ( Яндекс , Share42 , AddThis ), есть стандартный компонент Битрикса.

Автоматическая публикация новостей в социальных сетях

Мы на такие объемы данных не рассчитывали

devanswers.ru/a/uc

Размещение ссылок и анонсов новых событий в соцсетях становится все более явной тенденцией в вебе. И, как любой процесс, он может быть автоматизирован.

Для любого разработчика под Битрикс известна студия DEFA и их полезнейший модуль DEFA Tools . Менее известен модуль для автоматической публикации новостей в социальных сетях DEFA SocialMediaPoster . Разработчики обещают поддерживать его и развивать, им хочется верить.

Модуль позволяет автоматически выкладывать новый контент в социальные сети, снимая эту обязанность с менеджеров. Но, как и все в этом мире, модуль не идеален.

Например, DEFA SocialMediaPoster публикует только новые элементы инфоблоков, свою информацию размещать было невозможно. А на нашей практике был случай, когда требовалось осуществлять еженедельный отчет в твиттер о состоянии конкурса, общем количестве участников и количестве новых работ за прошедшие семь дней.

Задача тем не менее была решена за счет создания дополнительного служебного инфоблока «отчеты», который создавался по агенту каждые семь дней, из которого уже силами модуля осуществлялась отправка текста в Твиттер.

Что делать, если впереди интеграция

Результатом автоматизации бардака 
всегда становится автоматизированный бардак


Итак, у вас есть сайт на Битриксе, и нужно связать его с чем-то снаружи. Бояться не надо, надо работать.

Чтобы ничего не пропустить, задайте вопросы и проанализируйте ответы на них:

  1. Данные. Что?

    1. Что передаем? Объем, кодировка, возможные вариации в обменах?

    2. Обмен будет регулярным или разовым?

    3. Известен ли реальный объем данных, частота обмена? Можно ли получить доступ к реальному потоку?

    4. Есть ли выгрузка в виде файла для упрощения тестирования?

    5. Есть ли режим частичного обмена, когда передаются только измененные данные?

    6. Формат/протокол обмена известен, документирован и не будет меняться?

  2. Серверы. Откуда и куда?

    1. Какая система инициирует обмен?

    2. Есть ли «песочница»?

    3. Сколько сайтов-доноров? Будут ли меняться www- и ip-адреса, версии систем?

    4. Какие ограничения на процессорное время, память, длительность одной операции будут на серверах?

    5. Сервер-донор умеет возвращать коды ошибок на неверные запросы?

    6. Сервер-донор, адреса и способ доступа известны, документированы и не будут меняться?

  3. Процесс. Как?

    1. Делалась ли в прошлом кем-либо такая интеграция? Что получилось? Можно ли поговорить с теми, кто делал?

    2. Требования к времени обмена?

    3. Будет ли пошаговый режим?

    4. Какие параметры обмена должны настраиваться без участия программистов? Нужна ли настройка и хранение профилей обмена?

    5. Какие требования к логированию обмена? Коды ошибок, детализация операций?

    6. Какие требования к защите данных? Шифрование, ssl?

Получив цельную картину, зафиксируйте ее в коротком, но информативном ТЗ, и подпишите его с постановщиком.

И принимайтесь за работу.

Если у вас есть задача интеграции веб-сайта с чем-то сложным — мы с удовольствием ей займемся.  Обратитесь к нам .

Оставьте заявку на интеграцию