Her Mutfak хотел принимать заказы через собственный домен, а не отдавать комиссию агрегатору с каждого заказа. Получилась система на ядре WooCommerce, которая решает оплату обеденными картами, кухонный экран, передачу курьеру и права персонала в одном месте.
Платформа онлайн-заказа еды на базе WooCommerce. Добавлены: собственный платёжный шлюз WooCommerce для обеденных карт Multinet, кухонная панель для отслеживания заказов в реальном времени, webhook-интеграция ZirveGo для передачи заказов курьерской службе и ролевой доступ персонала со скрытием данных о выручке. Маркетинговый сайт и система заказов разделены: основной сайт — статический HTML, система заказов работает на WordPress/WooCommerce.
Главная проблема ресторана с онлайн-заказами обычно не техническая, а экономическая: агрегаторы берут комиссию с каждого заказа, а данные клиента до ресторана не доходят. Her Mutfak хотел выйти из этого круга.
Решением стало использовать WooCommerce как ядро, а не писать систему заказов с нуля. Корзина, склад, статусы заказа, налоги и возвраты в WooCommerce давно зрелые. Написать нужно было то, чего ядро не знает: обеденные карты, кухонный экран, курьеров и сменный персонал.
Сайт разделили надвое. Меню и маркетинг — hermutfak.com — статический HTML; сторона заказов — siparis.hermutfak.com — работает на WordPress. Маркетинговые страницы не несут веса WordPress, а система заказов не подвергается риску при каждом изменении лендинга.
В Турции значительная часть офисных сотрудников оплачивает обед картами Multinet, Sodexo или Setcard. Сайт заказа еды, который их не принимает, теряет существенную часть аудитории уже на шаге оплаты. В WooCommerce этих карт нет.
Поэтому для Multinet был написан собственный платёжный шлюз WooCommerce. Он расширяет класс WC_Payment_Gateway и управляет следующим процессом:
Критичны последние два пункта. Самая частая ошибка в платёжных интеграциях — прочитать параметры URL, на который провайдер вернул клиента, и считать заказ оплаченным. Этот адрес проходит через браузер клиента и может быть изменён. Правильное поведение — отдельный серверный запрос при возврате, чтобы узнать реальное состояние транзакции. Именно так и построен этот процесс.
Настоящая проблема начинается после оформления заказа. Административный список заказов WooCommerce спроектирован для склада интернет-магазина, а не для повара, который стоит у экрана с занятыми руками.
Поэтому была построена отдельная кухонная панель. Её решения родились из наблюдения за кухней:
Настоящая инженерная работа в такой панели — не в данных, а в том, чтобы экран оставался читаемым в загруженную смену.
Когда заказ готов, он должен перейти в доставку. Webhook-интеграция передаёт заказ в курьерскую систему, когда статус заказа WooCommerce достигает нужной стадии.
Интеграция написана отдельным плагином ради поддерживаемости: при смене службы доставки или окончании договора отключается один плагин. Остальная система заказов не затрагивается.
Не всем, кто открывает панель, следует видеть одно и то же. Сотруднику на смене нужно управлять заказами; выручка за день, отчёты по продажам и вся база клиентов ему не нужны.
Поэтому настроен ролевой ограниченный доступ персонала на основе преднастроенных наборов прав. Пользователь в роли персонала ведёт поток заказов, а экраны выручки и отчётов для этих ролей скрыты. Так как это построено на собственной системе возможностей WordPress, добавление нового сотрудника сводится к назначению роли.
Подавляющее большинство заказов еды приходит с телефонов, часто через мобильный интернет. Производительность здесь — не косметика, а напрямую потерянные заказы.
preload, и он начинает загрузку, не дожидаясь обработки CSS.Her Mutfak принимает заказы через собственный домен, со своими способами оплаты и своими данными клиентов. Система работает в продакшене.
Переносимый вывод: при построении системы заказов для ресторана писать ПО с нуля почти всегда неверно. Верно — взять зрелое ядро (WooCommerce) и разработать только то, чего это ядро не знает: обеденные карты, кухонный экран, курьера, сменный персонал. Нагрузка на поддержку остаётся небольшой, и система растёт вместе с рестораном.
При определённом объёме заказов — да. Комиссия агрегатора удерживается с каждого заказа, тогда как собственная система — это разовая разработка с низкими постоянными расходами, и данные клиентов остаются у вас. Отказываться от агрегатора полностью не обязательно: большинство ресторанов используют оба канала.
В качестве ядра — да. Корзина, статусы заказов, платёжная инфраструктура, налоги и возвраты идут из коробки. Не хватает специфики ресторана: оплаты обеденными картами, кухонного экрана, передачи курьеру, часов работы и прав сменного персонала. Написанные как плагины, они дают и функциональность, и поддерживаемость.
Да, но не готовым плагином — нужен собственный платёжный шлюз, написанный по документации провайдера. Договор эквайринга и данные интеграции оформляются на бизнес; работа разработчика — корректно связать платёжный процесс с жизненным циклом заказа WooCommerce.
Список заказов WooCommerce создан для операций интернет-магазина: фильтры, поиск, массовые действия. Кухне нужен экран, читаемый с одного взгляда, отмечающий опоздания цветом и показывающий только сегодняшний день. Один интерфейс не может закрыть обе потребности.