Разработка SDK и универсального модуля «1С-Битрикс» для API Mindbox, QSOFT

Все проекты

2019г

Сайт: mindbox.ru
В работе:2019г
Ключевые участники:Даниил Эйзерман, Анастасия Зимина, Артем Голубков, Владимир Манеров
Технологии: «1C-Битрикс: Управление Сайтом», PHP, MySQL

О заказчике

Mindbox — лидер рынка автоматизации маркетинга в России. C 2006 года компания занимается разработкой и внедрением облачной платформы для автоматизации маркетинга для ecommerce, retail и других b2c компаний. Входит в десятку крупнейших B2B SaaS сервисов России. Постепенно выходит на международный рынок, работает с клиентами из СНГ, Европы и США.

Основные направления работы:

  • Маркетинг CRM
  • Email маркетинг
  • SMS маркетинг
  • Программы лояльности
  • Управление скидками
  • Товарные рекомендации

О проекте

В QSOFT компания Mindbox обратилась с двумя запросами.

Во-первых, создание универсального модуля для партнеров компании. Его основная задача — прямая интеграция интернет-магазинов, разработанных на базе 1С-Битрикс, с системой лояльности MindBox. Во-вторых, разработка PHP SDK для упрощенной интеграции и работы с API Mindbox.

Задачи

01

Создание программного модуля для CMS 1С-Битрикс, позволяющего провести интеграцию с API MIndbox средствами API самой CMS

02

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

03

Разработка PHP SDK для сервиса Mindbox для упрощенной интеграции и работы с API

04

Создать условия для прямой интеграции клиентов Mindbox с самой платформой

Решения

Универсальный модуль для CMS «1С-Битрикс»

Команда QSOFT разработала модуль для партнеров Заказчика для упрощения их интеграции с системой лояльности MindBox.

Интеграция с модулем позволяет:

— производить расчет публичных и персональных скидок, процессинг бонусных баллов и промокодов;

— осуществить интеграцию с Личным кабинетом:

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

— передавать события просмотра товаров и категорий;

— передавать события удаления и добавления товаров в корзину;

— оформлять заказы;

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

PHP SDK для сервиса Mindbox

PHP библиотека разработана для упрощенного взаимодействия PHP приложения клиента компании Mindbox с API. От стороннего разработчика должны быть инкапсулированы нюансы реализации API Mindbox и протокола обмена данными — созданное решение позволяет работать с объектами php, не задумываясь о сетевых взаимодействиях.

Функциональность SDK

  • Поддержка двух версий API: v2.
    1, v3;
  • Реализована удобная система логирования;
  • Синхронные и асинхронные вызовы операций для API v3;
  • Код Mindbox PHP SDK написан в соответствии со стандартом PSR-4: файлы классов могут загружаться автоматически;
  • Возможность выбора HTTP клиента: PHP cURL, PHP Stream.

Результаты

Команде QSOFT удалось создать универсальное решение, которое позволяет клиентам Заказчика напрямую интегрироваться с платформой Mindbox. Модуль избавляет от необходимости привлечения дополнительных специалистов. Модуль включает в себя различные компоненты и обработчики событий SDK , а SDK в свою очередь предоставляет функции для обмена данными с API MindBox и передает их разрабатываемому модулю.

API Mindbox

интеграция с модулем

API

поддержка двух версий: v2.1, v3

Прямая

интеграция клиентов Mindbox с платформой

HTTP

возможность выбора клиента: PHP cURL, PHP Stream

Mindbox — лидер рынка автоматизации маркетинга в России. C 2006 года компания занимается разработкой и внедрением облачной платформы для автоматизации маркетинга для ecommerce, retail и других b2c компаний. Входит в десятку крупнейших B2B SaaS сервисов России. Постепенно выходит на международный рынок, работает с клиентами из СНГ, Европы и США.

OkayCMS 2.2.0

Почти год мы работали над улучшением OkayCMS. «Куда еще лучше?» – спроосите вы, а вот мы нашли. Технологии все время развиваются, и мы не хотим отставать. Наша цель – вести свою систему к простоте и функциональности, своевременно удовлетворять запросы пользователей. Поэтому обновление принесло в OkayCMS новые полезные штуки и унесло неиспользуемый функционал и какие-то недочеты, которые в том числе и вы нам помогали искать. Что же в итоге получилось, узнаете из текста.

 

  • Появились шаблоны описаний для страниц с фильтрами. Можно задавать мета-теги для страниц:
  • категория+бренд
  • категория+свойство
  • категория+определенное свойство

Для каждого свойства в новой версии доступны варианты слова (падежи и синонимы), которые позже можно использовать для заполнения метаданных фильтров.

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

  • Чтобы перелинковка была более качественной, теперь можно делать свойство в товаре ссылкой на страницу фильтра <категория +это свойство>
  • Изменилась работа ЧПУ-фильтра: теперь индексируется категория+одно значение фильтра, остальное – нет
  • Для страниц, которые создаются через админпанель, появилась возможность задавать отдельный от названия страницы Н1 прямо в админке
  • Sitemap. xml теперь более универсальный и сам создает пагинацию карт сайта, когда количество ссылок в нем превышает 50 000
  • Улучшена микроразметка, добавлена разметка twittercard
  • Настроен 301-й редирект со страниц с «/page-1» на основную страницу категории
  • Убрано дублирование текста на страницах фильтров, сортировок и пагинации. Текст категории выводится после обновления только на основной странице категории
  • В title при пагинации теперь автоматически подставляется номер страницы
  • Для индексации теперь доступны только страницы фильтрации категория+бренд или категория+1 свойство.

 

  • Переверстана страница thank you page. Она стала более информативной для покупателя и правильной с точки зрения e-commerce

  • В категориях появилась возможность отфильтровать по рекомендуемым товарам или товарам со скидкой
  • Слева над фильтром теперь будут подкатегории
  • Переделано отображение страницы ошибки 404
  • Старая цена теперь лучше выделяется за счет того, что она перечеркнута
  • Комментарии администратора также лучше выделяются среди комментариев обычных пользователей
  • Сделано корректное определение варианта в наличии в Safari. Проблема была описана в теме на форуме
  • Исправлена ошибка, когда в редких случаях после применения фильтра некорректно отображался каталог
  • Исправлена верстка корзины для мобильных устройств

 

 

  • Теперь есть возможность создавать несколько меню и добавлять к пунктам свои ссылки

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

Собственные меню можно выводить в любом месте шаблона.

  • Вставлять скрипты стало проще

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

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

  • Появился экспорт заказов в csv для дальнейшего импорта в сервисы рассылок e-mail, SMS и т.п. Выгружать можно по статусу, по меткам, по дате заказов
  • В админпанель добавлен фильтр по необработанным комментариям, заказам обратного звонка и обращениям с формы обратной связи
  • Сделана возможность искать информацию в комментариях и обратной связи. Поиск проходит по сообщениям, имени и e-mail
  • Теперь можно выбрать количество отображаемых комментариев и сообщений обратной связи на одной странице
  • Вместо стандартной капчи можно будет использовать reCAPTCHA или reCAPTCHA invisible, активировав нужную в настройках сайта
  • Сделана возможность включать и отключать автоматическое одобрение комментариев
  • Теперь добавить карту на страницу контактов можно просто вставкой iframe в специальное поле
  • Заблокировано удаление или изменение URL для системных страниц

Это сделано для избежания ошибок, которые возникают вследствие изменения адреса или удаления страниц типа главная, бренды, 404 и т. п. Даже при попытке массового удаления страниц, появится уведомление.

  • Сделано форматирование сообщений в техподдержке
  • Сделан счетчик символов в meta title и description
  • Добавлено отображение фильтров в админпанели на мобильных устройствах
  • При экспорте категории для облегчения работы с файлом экспорта теперь выгружаются только свойства этой категории, а не все доступные
  • Исправлены ошибки, возникающие при попытке изменить порядок категорий в товаре: порядок не менялся, не всплывала кнопка «Применить»
  • Нельзя было задать порядок фото до сохранения товара. Теперь можно
  • Также при изменении порядка фото не появлялась кнопка «Применить». Уже исправили
  • Убрана в админпанели ненужная часть комментария админа
  • Удалены редкоиспользуемые разделы «Яндекс.Метрика для сайта» и «Импорт/экспорт переводов»
  • Поле «Активность» в разделе «Свойства» теперь называется более понятно – «В фильтре»
  • При импорте товаров из 1С основное и дополнительные фото теперь обрабатываются более корректно.

 

  • Сделана возможность включать отдельную тему для админа

Когда она активирована, все действия в пунктах: «Файлы шаблонов», «Стили шаблонов», «Скрипты», «Изображения», «Переводы» –  выполняются в теме для админа.

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

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

Например, иногда нужно все картинки сделать одного размера (даже пренебречь небольшой частью изображения). Т.е. широкие и высокие привести к единому форм-фактору, как здесь:

Для этого в параметрах ресайза нужно указать 5-й и 6-й параметры {$c->image|resize:140:140:false:$config->resizedcategoriesdir:center:top}:

  • 5-й параметр отвечает за положение результирующего изображения, если работали с широкой картинкой. Возможные значения: left, center, right
  • 6-й параметр отвечает за положение результирующего изображения, если работали с высокой картинкой. Возможные значения: top, center, bottom

В отдельной статье мы детально расскажем, как работать с новой библиотекой.

  • Сборка PHP библиотек gregwar, smarty, mobiledetect и phpmailer теперь осуществляется через composer
  • Теперь можно задавать ресайз для баннеров
  • Сделана возможность добавлять config/config.local.php, в котором можно переопределить любую директиву из обычного config-а

Это удобно, когда проект на Git, и часть config.php нужно добавить в игнор.

  • В config/config.php сделана директива sql_debug = true, которая включает логирование нерабочих запросов

Она включена по умолчанию, но можно и выключить. Логи собираются в файл log/sql.log. Папка закрыта в htaccess, просматривать можно только по FTP.

  • Улучшено определение пути к карте сайта для более легкой настройки действий по крону
  • В раздел системной информации добавлен IP-адрес, с которого осуществляются curl-запросы

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

  • Метод отправки e-mail админу перенесен из Callback.php в Notify.php

 

  • Исправлены проблемы, проявлявшиеся при работе с MySQL версии 5.7
  • Исправлена проблема с сохранением свойств, описанная на форуме в теме
  • Исправлено несколько ошибок, связанных с переключением языка на странице 404
  • Исправлена проблема с отображением каталога на планшетах с большим разрешением (>992px), при которой меню каталога не срабатывало по нажатию.
  • Исправлена ситуация, когда картинка была доступна по разным URL
  • Исправлена 500 ошибка при попытке открыть несуществующее изображение
  • При редактировании заказа, если поменять способ доставки «Оплачивается отдельно» на другой, не считалась стоимость. Сейчас проблему устранили. Описание есть на форуме
  • Исправлена ошибка, когда при клике на плюсик в корзине нельзя было добавить больше 50 товаров в заказ
  • В текущей версии можно удалить изображение в баннере (раньше нужно было только заменять его на другое)
  • Оптимизировано удаление валют из БД при включенной мультиязычности сайта
  • Оптимизирован запрос search_products. php
  • Убраны дублирующиеся элементы в верстке админпанели
  • Исправлена проблема, при которой пароль для базы данных со спецсимволами не принимался системой
  • Исправлена работа сортировки по цене после применения фильтра по цене
  • Убраны ссылки на страницы с 302-м редиректом, которые появлялись при включении более чем одной валюты на сайте
  • Исправлена ошибка при сохранении JS в админке
  • Исправлена работа кнопки «Печать заказа». Больше не появляется ошибка 500
  • Раньше к комментариям на странице грузились все ответы на все возможные комментарии

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

  • Исправили баг в «Обратной связи»

Если одобрить фидбек, но не написать ответ, то его больше нельзя будет написать. Сделали так, что ответов можно писать любое количество.

  • Исправили баг в подсчете кол-ва заказов при использовании фильтра по дате

Раньше после фильтрации всегда показывало 0 заказов. Сейчас подсчет корректный.

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

 

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

Использование cURL для парсинга веб-страниц

В этом сообщении блога вы узнаете:

  • Что такое cURL?
  • Как использовать cURL?
  • Почему cURL так популярен?
  • Использование cURL с прокси
  • Как изменить User-Agent
  • Веб-скрапинг с помощью cURL

Что такое cURL?

cURL — это инструмент командной строки, который можно использовать для передачи данных по сетевым протоколам. Имя cURL означает «URL-адрес клиента» и также пишется как «curl». Эта популярная команда использует синтаксис URL для передачи данных на серверы и с них. Curl основан на «libcurl», бесплатной и простой в использовании библиотеке для передачи URL-адресов на стороне клиента.

Почему лучше использовать curl?

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

  • Аутентификация пользователя
  • сообщений HTTP
  • SSL-подключения
  • Поддержка прокси
  • загрузок по FTP

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

Протоколы Curl

Хотя curl имеет длинный список поддерживаемых протоколов, по умолчанию он будет использовать HTTP, если вы не укажете конкретный протокол. Вот список поддерживаемых протоколов:

Установка curl

Команда curl установлена ​​по умолчанию в дистрибутивах Linux.

Как проверить, установлен ли уже curl?

1. Откройте консоль Linux

2. Введите curl и нажмите Enter.

3. Если у вас уже установлен curl, вы увидите следующее сообщение:

4. Если у вас еще не установлен curl, вы увидите следующее сообщение: «команда не найдена». Затем вы можете обратиться к своему дистрибутиву и установить его (подробнее ниже).

Как использовать cURL

Синтаксис Curl довольно прост:

Например, если вы хотите загрузить веб-страницу: webpage.com, просто введите:

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

Если вы забудете добавить ://, curl угадает протокол, который вы хотите использовать.

Мы кратко рассказали об основном использовании команды, но вы можете найти список опций на сайте документации curl. Параметры — это возможные действия, которые вы можете выполнять с URL-адресом. Когда вы выбираете вариант, он сообщает curl, какое действие следует предпринять для указанного вами URL-адреса. URL-адрес сообщает cURL , где необходимо выполнить это действие. Затем cURL позволяет перечислить один или несколько URL-адресов.

Чтобы загрузить несколько URL-адресов, добавьте к каждому URL-адресу префикс -0, за которым следует пробел. Вы можете сделать это в одной строке или написать отдельную строку для каждого URL-адреса. Вы также можете загрузить часть URL-адреса, перечислив страницы. Например:

 

Сохранение загрузки

Вы можете сохранить содержимое URL-адреса в файл с помощью curl двумя разными способами:

1. Метод -o: позволяет добавить имя файла вместо URL-адреса. будет спасен. Эта опция имеет следующую структуру:

2. Метод -O: Здесь вам не нужно добавлять имя файла, так как эта опция позволяет сохранить файл под именем URL. Чтобы использовать эту опцию, вам просто нужно добавить к URL-адресу префикс -O.

Возобновление загрузки

Может случиться так, что загрузка остановится посередине. В этом случае перепишите команду, добавив в начале параметр -C:

Почему curl так популярен?

Curl — настоящий «швейцарский нож» команд, созданный для сложных операций. Однако есть альтернативы, например, «wget» или «Kurly», которые хороши для более простых задач.

Curl является фаворитом среди разработчиков, потому что он доступен почти для каждой платформы. Иногда он даже установлен по умолчанию. Это означает, что какие бы программы/задания вы ни запускали, команды curl должны работать.

Кроме того, есть вероятность, что если вашей ОС меньше десяти лет, у вас будет установлен curl. Вы также можете прочитать документы в браузере и проверить документацию по curl. Если вы используете последнюю версию Windows, у вас, вероятно, уже установлен curl. Если нет, прочтите этот пост на Stack Overflow, чтобы узнать больше о том, как это сделать.

Использование cURL с прокси

Некоторые пользователи предпочитают использовать cURL в сочетании с прокси. Преимущества здесь включают в себя:

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

Для этого вы можете использовать возможности «-x» и «(- – proxy)», уже встроенные в cURL. Вот пример командной строки, которую вы можете использовать для интеграции прокси-сервера, который вы используете с cURL:

$ curl -x 026.930.77.2:6666 http://linux.com/

В приведенном выше фрагменте кода «6666» — это номер порта, а «026.930.77.2» — это IP-адрес.


Полезно знать: cUrl совместим с большинством распространенных типов прокси-серверов, используемых в настоящее время, включая HTTP, HTTPS и SOCKS.

Как изменить User-Agent

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

В качестве аргумента предположим, что сайт, на который вы ориентируетесь, «предпочитает» просить стороны использовать Chrome в качестве браузера. Чтобы получить желаемый набор данных с помощью cURL, необходимо эмулировать эту «черту браузера» следующим образом:

curl -A «Goggle/9.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Chrome/103.0. 5060.71” https://getfedora.org/

Веб-скрейпинг с помощью cURL

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

Вы можете использовать curl , чтобы автоматизировать повторяющийся процесс при просмотре веб-страниц, что поможет вам избежать утомительных задач. Для этого вам нужно будет использовать PHP. Вот пример, который мы нашли на GitHub:

Когда вы используете curl для очистки веб-страницы, есть три варианта, которые вы должны использовать:

  • curl_init($url) -> Инициализирует сеанс
  • curl_exec() -> Выполняет
  • curl_close() -> Закрывает

Другие варианты, которые вы должны использовать, включают:

  • Curlopt_url -> Устанавливает URL-адрес, который вы хотите очистить
  • Curlopt_returntransfer -> Приказывает curl сохранить очищенную страницу как переменную. (Это позволит вам получить именно то, что вы хотели извлечь со страницы.)

Практический результат

Несмотря на то, что cURL является мощным инструментом веб-скрейпинга, он требует от компаний использования драгоценного времени разработчиков как для сбора данных, так и для очистки данных. Компания Bright Data выпустила полностью автоматизированный парсер веб-страниц, который не требует написания кода. Это позволяет предприятиям собирать данные с целевых веб-сайтов одним нажатием кнопки или просто заказывать нужный набор данных. Это освобождает DevOps и других членов технических групп, чтобы они могли сосредоточиться на разработке продуктов и устранении неполадок.

Начать бесплатную пробную версию

PHP — php cURL не включен.

  • НЕТ официального Discord-сервера Отланда и НЕТ официального списка серверов Отланда. Персонал Отланда не управляет каким-либо сервером Discord или списком серверов. Модераторы или администраторы любых серверов Discord или списков серверов НЕ имеют связи с персоналом Otland. Не дайте себя обмануть!

  • Если вы используете Gesior 2012 или MyAAC, ознакомьтесь с этой веткой для получения информации о серьезной уязвимости в системе безопасности и ее исправлении.

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