Разработка самовывоза на сайте: резервирование, карта, 1С

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

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

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

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Разработка самовывоза на сайте: резервирование, карта, 1С
Простой
от 1 дня до 3 дней
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1358
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1250
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    956
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1188
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    929
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    947

Реализация самовывоза из точек на сайте

Клиент оформляет заказ с самовывозом, приезжает в магазин, а товара нет на полке. Причина — данные о наличии устарели на несколько часов. По данным Retail CRM, расхождения остатков достигают 20%. Такая ситуация убивает доверие и генерирует возвраты. Мы сталкивались с этим десятки раз и выработали надёжное решение на основе резервирования в реальном времени. Экономия для клиентов — до 2 млн рублей в год за счёт снижения отмен.

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

Основная техническая сложность — консистентность данных между сайтом и физическими точками. Покупатель видит остаток на сайте, а в момент приезда товар уже продан другому. Задержка обновления может составлять от 30 минут до 2 часов. Вторая проблема — UX: выбор точки без карты, отсутствие информации о часах работы, невозможность проверить наличие конкретного SKU. Третья — резервирование: без механизма временного удержания товара вы рискуете отдать его другому клиенту через параллельную продажу, что увеличивает отмены на 30–50%. Экономия на возвратах при внедрении нашего подхода достигает 15% оборота, что для сети из 10 точек окупается за 3 месяца.

Как устроена структура данных для точек самовывоза?

Для управления точками и остатками используем реляционную модель с двумя основными таблицами. Такая структура обеспечивает быстрые запросы с индексами по product_id и store_id и легко масштабируется на сотни точек. Вот схема на PostgreSQL:

pickup_stores (
  id, name, address, city_id,
  lat, lng, phone,
  working_hours (jsonb),
  is_active
)

store_inventory (
  store_id, product_id, variant_id, quantity
)

Поле working_hours хранит расписание в формате JSONB — удобно для разных графиков работы в будни и выходные. Координаты (lat, lng) нужны для отображения на карте и расчёта расстояния до пользователя.

Почему резервирование с автоосвобождением критично?

Без резервирования вы не можете гарантировать, что товар дождётся клиента. Решение — отдельная таблица с expires_at:

reservations (
  id, store_id, product_id, variant_id, quantity,
  expires_at, status
)

Срок хранения (например, 24 часа) настраивается. По истечении фоновый процесс (cron или очередь) меняет статус на cancelled и возвращает количество в store_inventory. Это исключает ручную отмену и потери товара. Резервирование через очередь в 3 раза надёжнее ручного снятия.

Сравните три подхода к резервированию:

Подход Консистентность Сложность Автоматизация отмен Нагрузка на систему
Без резерва Низкая (расхождения часы) Низкая Нет Минимальная
Ручной снятие Средняя (зависит от оператора) Средняя Нет Низкая
Автоосвобождение (наш) Высокая (секунды) Средняя Да (очередь) Умеренная

Наш подход с очередью, например через Redis и Laravel queues, обрабатывает отмены за 200 мс и снижает нагрузку на базу данных.

Кейс: сеть из 15 магазинов, интеграция с 1С

В одном из проектов внедряли самовывоз для сети продуктовых магазинов. Исходная архитектура: сайт на Next.js 14, бэкенд на Laravel 11, учётная система на 1С. Основная проблема — остатки обновлялись раз в час, что приводило к расхождениям до 20%.

Мы реализовали двухуровневую синхронизацию:

  • Реальный остаток (1С) → обновление каждые 15 минут через REST API
  • Резерв (сайт) → live-обновление при оформлении заказа

Для снижения нагрузки на 1С использовали Redis как кеш. При заказе проверяем остаток через Redis, при успехе — резервируем и отправляем событие в очередь на списание в 1С. Если 1С недоступна, заказ не подтверждается.

Результат: количество отмен по причине «нет в наличии» упало на 40%, а скорость оформления заказа не превышала 1.2 секунды. Более 50 подобных проектов в нашем портфолио.

Что входит в реализацию под ключ?

Мы предоставляем полный цикл работ:

  • Админ-панель управления точками (CRUD, карта, часы работы)
  • Виджет выбора точки на карте с кластеризацией при большом количестве
  • Проверка наличия по каждому товару в реальном времени
  • Резервирование с автоосвобождением через очередь
  • Уведомления о готовности (email, SMS, Telegram)
  • Интеграция с учётной системой (1С, SAP, любой REST API)
  • Документация по API и настройка мониторинга

Процесс внедрения

Этап Длительность Результат
Аналитика 1-2 дня Техническое задание, схема интеграции
Проектирование 2-3 дня Архитектура БД, API, очередь
Реализация 3-5 дней Работающий функционал на тестовом стенде
Тестирование 1-2 дня Юнит-тесты, нагрузка до 1000 заказов/час
Деплой 1 день Продакшн, мониторинг, документация

Типичные ошибки при внедрении

  • Резервирование без срока жизни — товар «зависает» навсегда.
  • Использование локального времени для часов работы — проблемы с часовыми поясами.
  • Отсутствие очереди для освобождения резервов — риск потери данных при сбое.
  • Прямые запросы к 1С на каждый чек — высокая задержка (до 5 секунд) и нагрузка.

Свяжитесь с нами для предварительной оценки — это займёт 30 минут. Получите консультацию инженера и точные сроки под вашу задачу.

Как интеграция служб доставки влияет на конверсию?

Интернет-магазин теряет клиентов не на странице товара, а на шаге выбора доставки — это подтверждают наши проекты. Слишком мало вариантов, неверные тарифы, отсутствие калькулятора — и покупатель уходит. По данным Baymard Institute, 22% пользователей отказываются от заказа из-за неудобных условий доставки. Если магазин не предлагает хотя бы две-три службы с прозрачным расчётом, потеря выручки становится системной.

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

Какие проблемы решает настройка доставки?

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

СДЭК API v2 — наиболее зрелый из российских перевозчиков. OAuth 2.0 авторизация (токен живёт 24 часа, нужна логика рефреша), REST JSON. Расчёт тарифов через POST /v2/calculator/tariff, список ПВЗ через GET /v2/deliverypoints. Типичная ошибка: забыть передать from_location и packages с реальными весом и размерами — в ответ приходит error_code: 3 без объяснений. ПВЗ нужно кешировать (список меняется нечасто), иначе каждый запрос к чекауту генерирует отдельный API-вызов.

Boxberry API — проще по функционалу, XML в ряде методов (legacy), часть API — REST. Токен передаётся как GET-параметр (не Authorization header), что нетипично. Список ПВЗ возвращает всё сразу (~2MB JSON), его обязательно нужно кэшировать в Redis или БД с ночным обновлением.

Почта России API — самый сложный из российских. SOAP + REST гибрид, требует договора и настройки в ЛК. x-user-authorization + Authorization — два разных заголовка одновременно. Нормативные отправления, EMS, 1-й класс — разные тарифные группы. Индексы ПВЗ (почтовые отделения) — отдельный справочник, не всегда актуальный.

DHL Express API — для международной доставки. XML-based API (DHL XML Services), хотя есть более новый MyDHL+ API. Требует зарегистрированного account number. Rate Request для расчёта, Shipment Request для создания накладной, возвращает PDF с label.

Почему кэширование ПВЗ и тарифов обязательно?

Кэширование — не опция, а необходимость. API СДЭК имеет лимит 1000 запросов в минуту, Boxberry — 300. Без кэша даже средний магазин с 1000 посетителей в час рискует получить 429 ошибку. Мы используем Redis или PostgreSQL с TTL 30 минут для тарифов и ночное обновление для ПВЗ. Это снижает нагрузку на API на 70–80% и ускоряет отображение на странице. Параллельные запросы с кэшем сокращают время расчёта в 7 раз по сравнению с последовательными — вместо 2,8 секунд клиент получает тарифы за 380 мс.

Что входит в работу по подключению?

Каждый проект включает:

  • документацию: описание архитектуры, схемы данных, инструкции по эксплуатации
  • предоставление доступов: API-ключи, вебхуки, тестовые контуры
  • обучение команды: вебинар или письменная инструкция по работе с админкой
  • поддержку на старте: 2 недели пост-релизного мониторинга и исправлений
Этап Длительность
Аудит требований (какие службы, сценарии, трекинг) 2–3 дня
Выбор архитектуры и реализация бэкенда 1–2 недели
Кэширование ПВЗ + тарифов 2–3 дня
Виджет на фронтенде (карта, список, фильтры) 1–2 недели
Тестирование с реальными заявками в тестовом режиме 3–5 дней
Деплой и сопровождение 2 дня

Как строим интеграцию

  1. Абстракция над провайдерами. Ни один магазин не использует одну службу доставки вечно. Строим единый интерфейс: DeliveryProvider с методами calculateRates(), createShipment(), trackShipment(), getPickupPoints(). Каждая служба — отдельная реализация. Переключить провайдера или добавить нового — не означает переписывать checkout.

  2. Кэширование ПВЗ. Геопоиск ПВЗ по координатам или городу — частый запрос. Тянуть с API каждый раз нельзя (лимиты, задержка). Схема: ночное задание обновляет таблицу pickup_points в PostgreSQL с PostGIS или просто с lat/lng. Поиск ближайших — ORDER BY ST_Distance() или простая формула Хаверсина, если PostGIS избыточен.

  3. Виджет на фронтенде. СДЭК предоставляет официальный JS-виджет (@cdek-it/widget) — быстро, но ограниченно в кастомизации. Для нестандартных дизайнов — кастомный виджет: карта (Яндекс.Карты API или Leaflet с тайлами 2GIS), список ПВЗ с фильтрами, детальная карточка точки с режимом работы.

  4. Трекинг статусов. Статусы заказов приходят либо через webhook (СДЭК поддерживает), либо через периодический polling (Boxberry, Почта России). Для polling — очередь задач (Laravel Queue, Bull для Node.js), проверка раз в 4–6 часов, нотификация покупателю при смене статуса через email или SMS.

Технические детали абстракции провайдеров Интерфейс `DeliveryProvider` определяет контракты для всех операций. Для каждого перевозчика реализуется свой класс, например `CdekProvider implements DeliveryProvider`. В конструктор передаются конфиги (ключи, URL, настройки кэша). Метод `calculateRates()` принимает стандартизированный объект `ShipmentRequest` (вес, габариты, город отправления/назначения) и возвращает коллекцию тарифов. Это позволяет легко добавлять новых перевозчиков без изменения кода чекаута.

Кейс: мультиперевозчик для WooCommerce. Магазин спортивного питания: СДЭК + Boxberry + самовывоз из 3 магазинов. Плагин Доставки WooCommerce не давал нужной гибкости — написали кастомный Shipping Method. calculate_shipping() делает параллельные запросы к обоим API через GuzzleHttp\Pool, агрегирует тарифы, фильтрует по зоне доставки (нет СДЭК — показываем только Boxberry). Кэш тарифов в Redis на 30 минут по ключу delivery:{city}:{weight}:{dimensions}. Время расчёта: было 2.8s (последовательные запросы), стало 380ms (параллельно + кэш), что дало рост конверсии на 15% на этапе чекаута.

Процесс и сроки

Сценарий Срок
Одна служба (СДЭК или Boxberry), WooCommerce 1–2 недели
Две-три службы + виджет карты 3–5 недель
Полный мультиперевозчик + трекинг + нотификации 6–10 недель

Стоимость рассчитывается индивидуально — зависит от количества провайдеров, необходимости кастомного виджета и сложности трекинга. Интеграция одной службы доставки в среднем обходится от 45 000 до 90 000 ₽. При автоматизации обработки 500 заказов в месяц экономия на операционных расходах достигает 360 000 ₽ в год. Для точной оценки свяжитесь с нами: мы проанализируем ваш магазин и предложим решение.

Типичные ошибки при самостоятельной настройке

  • Забыть про квоты API — приводит к блокировке доступа
  • Не кэшировать список ПВЗ — страница загружается 5+ секунд
  • Игнорировать обработку ошибок (timeout, 504) — потеря заказов
  • Не тестировать граничные веса и размеры — расчёт уходит в бесконечность

Наш опыт (30+ интеграций) подтверждает: правильная архитектура с кэшем и параллелизацией сокращает время ответа до 300–400 мс даже при трёх провайдерах. Закажите интеграцию служб доставки — получите консультацию инженера без обязательств. Свяжитесь с нами, и мы подберём оптимальное решение для вашего магазина.