Внедрение накопительной карты в 1С-Битрикс

В 2020 году мы разрабатывали интернет магазин для магазина «Авангард». И вот спустя 4 года поступила заявка по внедрению физической накопительной карты (которая есть у огромного количества покупателя в их офлайн-магазинах). Информация по накопительной карте хранится на дисконт-сервере от 1С. В результате недолгих обсуждений выяснили требования к этой интеграции:

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

Решение задачи по интеграции

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

Задачу по внедрению разбили на несколько несложных подзадач.

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

2) Делаем привязку накопительных карт на стороне интернет-магазина. Для хранения привязанной карты создаем 4 пользовательских поля с привязкой к пользователю сайта: Id карты (внутри системы дисконт-сервера 1С), штрих-код карты (чтобы в будущем отобразить на сайте), сумма покупок по карте (чтобы потом на основе неё давать скидку), время обновления суммы (чтобы не перегружать сервер 1С запросами).

Доп поля для привязки накопительной карты

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

Привязка накопительной карты

Когда пользователь отправляет данные формы (нам главное штрих-код), вешаемся на событие сохранения результатов и передаем их в 1С (с помощью curl, по стандарту согласованному с 1С-программистом вначале). В ответ от 1С приходит либо, ID карты, либо текст с ошибкой (например, нет такой карты). Эти данные мы сохраняем в созданные дополнительные поля. Всё, карта привязана.

3) Выпуск новой виртуальной карты. Как и в предыдущем пункте, создаем форму для выпуска карты и аналогичным образом отправляем данные в 1С. В ответ приходят данные новой созданной карты, либо ошибка. А мы результат сохраняем в доп. поля созданные в предыдущем шаге.

4) Применение скидки в зависимости от накопления по карте. Для скидок используем стандартный функционал 1С-Битрикс. Создаем несколько групп пользователей и создаем несколько правил корзины для применения скидок в зависимости от группы пользователя.

Правила скидки

Остается только проверить сумму накоплений пользователя и добавить его в соответствующую группу. Мы решили, что оптимально будет это делать раз в полчаса и только для активного пользователя (который сейчас зашел на сайт). Именно для этого мы создавали доп. поля  для хранения суммы и даты её обновления (чтобы помнить какое было последнее значение и когда мы его запрашивали у 1С). Тут разные варианты реализации, мы выбрали самый простой, делать это на хите пользователя (стараемся не допустить глупых ошибок, помним, что 1С - это другой сервер и он может не ответить и тогда ваш хит повиснет в ожидании).

5) Передача номера накопительной карты в 1С при оформлении заказа. Чтобы 1С понимала к какой карте привязать покупку. Это было самое простое, учитывая, что интеграция заказов с 1С уже давно работает через штатный функционал. Создали свойство заказа с номером карты и при создании заказа заполняем его из профиля покупателя (вешаемся на событие создания заказа). А далее передаем это свойство вместе с заказом стандартными средствами 1С Битрикс.

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