Интеграции сайта с 1С, CRM и оплатой: как это работает
Интеграция сайта с 1С — это не «подключить 1С», а договориться о трёх вещах: что считается источником правды, как часто данные обновляются и что происходит, когда обмен не прошёл. Технически всё сводится к двум режимам: пакетная выгрузка по расписанию и онлайн-запрос в момент действия пользователя. Дальше — детали, из-за которых проекты и разъезжаются по срокам.
Как вообще устроен обмен
Между сайтом и учётной системой всегда есть посредник — наш слой на Node.js, который принимает данные, проверяет их, приводит к своему формату и складывает в MongoDB. Сайт читает только из своей базы и никогда не ходит в 1С за каждым чихом. Это принципиально: 1С в рабочее время занята закрытием месяца и не обязана держать нагрузку от посетителей сайта.
Кто источник правды, определяется по каждому типу данных отдельно, и это стоит зафиксировать письменно до начала работ. Обычно так: товары, цены и остатки — 1С; контент, описания, фотографии для сайта и адреса страниц — сайт; заявки и клиенты — CRM. Каждое поле принадлежит одной системе. Как только два места начинают редактировать одно поле, у вас появляется вечная работа по разбору расхождений.
Выгрузка против онлайн‑обмена
Выгрузка — это когда 1С по расписанию формирует пакет данных и отдаёт его на сайт: обычно XML в формате CommerceML, реже JSON, если обмен пишется с нуля. Онлайн-обмен — это когда сайт в момент действия дёргает 1С через веб-сервис или OData и ждёт ответ. Оба режима нужны, но для разных данных.
| Параметр | Выгрузка по расписанию | Онлайн-обмен |
|---|---|---|
| Свежесть данных | От 15 минут до суток | Секунды |
| Нагрузка на 1С | Предсказуемая, в заданное время | Зависит от трафика сайта |
| Что будет, если 1С упала | Сайт работает на старых данных | Действие пользователя не проходит |
| Сложность | Ниже, отладка проще | Выше, нужны таймауты и запасной путь |
| Для чего подходит | Каталог, цены, описания, документы | Остаток перед оформлением, статус заказа, баланс |
| Типовой срок работ | 2–4 недели | 3–6 недель |
Рабочая схема на большинстве каталогов гибридная: номенклатура и цены приезжают выгрузкой каждые 15–60 минут, а остаток по конкретной позиции запрашивается онлайн в момент оформления заказа — с таймаутом в 2–3 секунды и понятным поведением, если ответа нет. Так каталог быстрый, а обещание «есть на складе» не превращается в звонок с извинениями.
CRM: что и когда туда отдавать
С CRM всё проще технически и сложнее организационно. Технически — заявка уходит вебхуком в Битрикс24 или amoCRM за пару секунд. Организационно — надо решить, что делать, когда CRM не ответила, и не потерять заявку.
- Заявка сначала пишется в свою базу, и только потом уходит в CRM. Если CRM недоступна, заявка не пропала — она уйдёт при следующей попытке.
- Повторные попытки по нарастающему интервалу: через минуту, пять, пятнадцать. После трёх неудач — письмо ответственному, а не тишина.
- Вместе с заявкой передаём источник: utm-метки, страницу, с которой пришёл человек, и клиентский идентификатор. Без этого через полгода нельзя ответить, какой канал приносит сделки.
- Обратный поток — статус сделки из CRM на сайт — нужен, только если есть личный кабинет. Иначе это лишняя связь, которую придётся чинить.
Оплата
Приём платежей — самая зарегулированная часть, и одновременно самая предсказуемая: ЮKassa, Т-Касса и CloudPayments работают по одной логике. Сайт создаёт платёж и отправляет человека на защищённую страницу оплаты, а результат узнаёт не от вернувшегося браузера, а из вебхука от платёжного сервиса.
- Никогда не считайте заказ оплаченным по факту редиректа обратно на сайт. Человек мог закрыть вкладку, а платёж прошёл — и наоборот.
- Вебхук обязан быть идемпотентным: сервис пришлёт одно и то же уведомление несколько раз, и второй раз отгружать товар не надо.
- Проверяйте подпись уведомления. Открытый вебхук без проверки подписи — это кнопка «пометить заказ оплаченным» для всего интернета.
- Чек по 54-ФЗ формирует платёжный сервис, но состав корзины и ставку НДС передаёте вы. Ошибка в ставке всплывает у бухгалтера через месяц.
- Возвраты делаются через тот же сервис и должны отражаться и в 1С, и на сайте. Про них забывают в 8 проектах из 10.
Что ломается чаще всего
За годы список проблем почти не меняется. Ни одна из них не связана со сложным кодом — всё это про дисциплину и про то, что данные в реальной жизни грязные.
| Проблема | Как проявляется | Что помогает |
|---|---|---|
| Дубли номенклатуры в 1С | Один товар на сайте тремя карточками | Сверка по коду, а не по названию; отчёт о дублях |
| Обновили 1С — сломался формат | Обмен молча встал, данные устарели | Валидация пакета и алерт при отказе |
| Выгрузка идёт часами | Каталог обновляется раз в сутки | Обмен только изменившихся позиций |
| Пустые поля у новых товаров | На сайте карточки без описаний и фото | Товар не публикуется, пока не заполнен минимум |
| Товар пропал из выгрузки | Страница отдаёт 404, теряется трафик | Помечать как архивный, а не удалять |
| Цена уехала в ноль | Товар продаётся за 0 ₽ | Проверка границ: игнорируем нулевые и странные цены |
Отдельно про мониторинг. Обмен обязан кричать, когда он сломался. У нас на каждом проекте есть простая проверка: если последняя успешная синхронизация была больше N минут назад, уходит уведомление. Без этого типичный сценарий выглядит так — обмен встал в четверг, заметили во вторник, неделя каталога с устаревшими ценами.
Как не убить SEO каталогом из 1С
Вот здесь мы видим больше всего потерь. 1С — учётная система, её данные оптимизированы под склад и бухгалтерию, а не под поиск. Если выгрузить их на сайт как есть, получится каталог, который не находят.
- Адрес страницы не должен зависеть от названия в 1С. Складское наименование меняется, а вместе с ним меняется адрес — и все накопленные позиции обнуляются. Мы фиксируем slug в MongoDB один раз при создании товара и больше не пересчитываем.
- Заголовок и описание для людей живут на сайте и не перезатираются выгрузкой. Название вида «Кабель ВВГнг 3х2.5 ГОСТ /бухта 100м/» не должно быть H1.
- Товар кончился — не 404. Страница остаётся, показываем «нет в наличии», предлагаем аналоги. Удаление страницы каждый раз стоит трафика.
- Автогенерация фильтров без ограничений плодит десятки тысяч почти одинаковых страниц. В индекс пускаем только те комбинации, у которых есть спрос, остальное закрываем canonical.
- Массовые изменения адресов — это уже переезд, и делается он с картой редиректов, а не «мы просто перевыгрузили каталог».
На каталоге в 12 000 позиций с выгрузкой из 1С органика выросла на 68% именно за счёт этого разделения: 1С отвечает за наличие, цены и характеристики, а тексты, адреса, заголовки и структура разделов принадлежат сайту и живут своей жизнью. Никакой магии, просто данные перестали перетирать друг друга при каждой выгрузке.
Сроки и бюджет
Интеграция редко продаётся отдельно — она часть проекта. Но в смете это отдельная строка, и вот честные ориентиры по нашим работам.
| Задача | Срок | Бюджет |
|---|---|---|
| Заявки с сайта в CRM с utm-метками | 3–5 дней | от 13 000 ₽ |
| Подключение оплаты с вебхуками и возвратами | 1–2 недели | от 30 000 ₽ |
| Выгрузка каталога из 1С, до 5 000 позиций | 2–4 недели | от 60 000 ₽ |
| Каталог от 10 000 позиций с ценами по клиентам | 4–8 недель | от 115 000 ₽ |
| Онлайн-обмен для личного кабинета | 3–6 недель | от 85 000 ₽ |
Сроки сильно зависят не от нас, а от того, есть ли у вас программист 1С и как быстро он отвечает. Реальная причина срыва сроков в интеграциях почти всегда одна: со стороны учётной системы никого не выделили, и запрос «добавьте, пожалуйста, поле в выгрузку» висит три недели. Мы это заранее проговариваем и закладываем в план.
Каталог с обменом мы делаем в рамках корпоративных сайтов, онлайн-обмен для кабинетов — в веб-сервисах. Пример второго — кабинет логистической компании, где статусы отгрузок подтягиваются в реальном времени: обращений в поддержку стало на 60% меньше, но работает это только потому, что данные свежие. Кабинет с устаревшими данными раздражает сильнее, чем его отсутствие.
И последнее про скорость: тяжёлый каталог из 1С с сотнями характеристик легко превращает страницу в мегабайт данных и убивает загрузку на мобильных. Что с этим делать — в статье про Core Web Vitals.
Короткие ответы
Выгрузка — это пакет данных, который 1С формирует по расписанию: каталог, цены, описания. Онлайн-обмен — прямой запрос в момент действия пользователя: остаток перед оформлением заказа, статус отгрузки, баланс. Выгрузка проще и надёжнее, онлайн-обмен свежее, но требует запасного поведения на случай, когда 1С не отвечает.
Для большинства каталогов достаточно обмена изменившимися позициями раз в 15–60 минут. Полная выгрузка на 10 000 позиций может идти часами и грузить 1С, поэтому её запускают раз в сутки ночью как сверку. Критичные для продаж данные вроде остатка лучше запрашивать онлайн в момент оформления.
Потому что складские названия становятся заголовками, адреса страниц пересчитываются при каждом переименовании товара, а закончившиеся позиции удаляются и отдают 404. Лечится разделением зон ответственности: 1С отвечает за цены, наличие и характеристики, а адреса, заголовки и тексты фиксируются на стороне сайта и выгрузкой не перезаписываются.
Правильно спроектированный сайт этого почти не замечает: он читает данные из своей базы, а не из 1С. Каталог работает на последних полученных данных, заявки копятся и уходят позже, а онлайн-запросы вроде проверки остатка отваливаются по таймауту с понятным сообщением. Плюс приходит уведомление, что обмен встал, — молчащий обмен опаснее упавшего.
Разберём задачу и назовём вилку. Ответим в течение одного рабочего дня.