Обсудить задачу

Селлер на маркетплейсе · схема FBS

Кабинет печати этикеток для маркетплейса

Сделать кабинет, в котором сборщик заказов видит отправления к отгрузке и печатает по ним этикетки пачкой — вместо выгрузок в Excel и печати по одной из личного кабинета.

PHP 8.4 · Ozon Seller API · ghostscript · шаред-хостинг

Что мешало

  • Этикетки печатали поштучно, сверяясь с выгрузкой в Excel
  • Никто не помнил, по каким заказам уже печатали, а по каким нет
  • Маркетплейс отдаёт максимум 20 отправлений за один запрос печати
  • Часть методов API отключена и отвечает «устаревший метод», а документация закрыта антиботом
  • Хостинг — шаред: ни собственного сервера, ни привычных утилит

Что сделали

  • Собрали закрытый раздел на сайте: два рубежа доступа — пароль на весь раздел и ключи продавца, которые вводит сам пользователь
  • Ключи маркетплейса на сервере не хранятся: живут во вкладке браузера и уходят в теле каждого запроса
  • Таблица отправлений с фильтрами прямо в заголовках колонок: сортировка, поиск, выбор значений галочками
  • Печать пачками по 20 — ограничение API — и склейка в один PDF на сервере
  • Свой журнал печати: маркетплейс такого признака не отдаёт, проверено сверкой всех полей у печатанного и непечатанного заказа
  • Файлы печатей хранятся вне корня сайта, с описью и сроком хранения
  • Выгрузка в CSV в том же формате, к которому привыкли в Excel

Что стало

80 этикеток за один прогон вместо печати по одной
20 отправлений в пачке — предел API, дальше склейка
51 поле сверено, чтобы доказать: признака печати нет
0,3 с склейка PDF после прогрева вместо ручной сборки

Сборщик открывает страницу, фильтрует по складу и статусу, отмечает нужные заказы и получает один PDF со всеми этикетками. Рядом видно, по каким заказам печать уже была и когда — включая повторные. Файл можно скачать заново из журнала.

Чему это научило

Самое дорогое открытие было отрицательным: маркетплейс не отдаёт признак того, что этикетка напечатана. Мы доказали это, сравнив у двух заказов — печатанного и непечатанного — все 51 поле ответа, включая список доступных действий. Отрицательный результат тоже результат: он избавил от поиска несуществующего поля и обосновал собственный журнал. Второй урок дешевле, но чаще: проверять надо не «запись прошла», а «файл читается» — первое вложение в отчёт записалось успешно и при этом не открывалось.

Похожая задача

Если узнали свою ситуацию — расскажите, что происходит у вас. Вернёмся с оценкой в часах и планом работ.

Обсудить задачу Услуга: Парсинг данных