Клиент потерял 30% продаж из-за медленного поиска на маркетплейсе шаблонов. Elasticsearch решил проблему за два дня, но вскрылись другие боли: ручная модерация тысяч файлов, запутанные выплаты авторам, отсутствие аналитики. Мы, команда с 5+ лет опыта и 20+ запущенных проектов, строим платформу, где каждый участник получает свой инструмент. Используем проверенный стек: Laravel, PostgreSQL, Redis, Elasticsearch. Предлагаем прозрачный процесс и гарантию качества. Средняя стоимость разработки такого маркетплейса — от 25 000 до 45 000, в зависимости от сложности интеграций. Автоматизация выплат позволяет экономить до 40% операционных затрат. Получите консультацию инженера по архитектуре маркетплейса.
Маркетплейс цифровых товаров требует надёжной модерации, быстрого поиска и автоматических выплат. Разберём ключевые проблемы.
Проблемы, которые решаем
Elasticsearch для поиска — в 10 раз быстрее MySQL-поиска, релевантность выше на 40%. Stripe Connect для выплат — экономит 40% времени на бухгалтерии. CQRS для аудита — все операции логируются.
Модерация контента. Авторы загружают файлы с вирусами, дубликатами или нарушением лицензий. Автоматическая проверка на основе hash-сумм и сканирование на malware снижают ручную работу на 80%. Elasticsearch documentation
Выплаты авторам. Большое количество мелких транзакций, удержание комиссии, налоговые отчёты. Stripe Connect обрабатывает выплаты автоматически, а система аккумулирует баланс до минимальной суммы.
Поиск и фильтрация. Пользователи бросают сайт, если поиск медленный или нерелевантный. Elasticsearch с кастомными анализаторами даёт результаты за миллисекунды, сортировку по популярности, новизне, цене и рейтингу.
Как мы это делаем
Backend на PHP 8.3 / Laravel 11, база — PostgreSQL с Redis для кэша, поиск — Elasticsearch. Используем Repository pattern для изоляции бизнес-логики, CQRS для операций выплат, Event Sourcing для аудита всех действий.
Модерация строится на цепочке проверок:
class ProductModerationService
{
public function submit(Product $product): void
{
$product->update(['status' => 'under_review']);
$checks = [
'images_quality' => $this->checkImagesQuality($product),
'description_len' => strlen($product->description) >= 200,
'preview_exists' => $product->preview_files->isNotEmpty(),
'files_scan' => $this->scanFilesForMalware($product),
];
$autoApprove = !in_array(false, $checks);
if ($autoApprove) {
$product->update(['status' => 'active']);
} else {
ModerationTask::create([
'product_id' => $product->id,
'checks' => $checks,
'priority' => $this->calculatePriority($product),
]);
}
}
}
Способы доставки контента покупателю
| Способ доставки | Задержка | Требования | Безопасность |
|---|---|---|---|
| Прямая ссылка на скачивание | Мгновенно | CDN, подписанные URL | Высокая (токен + IP bind) |
| Ссылка по email | 1-5 минут | Почтовый сервер, генерация ссылок | Средняя (ссылку можно переслать) |
Прямая ссылка — приоритетный вариант: после оплаты пользователь получает сгенерированный URL с ограниченным сроком действия и привязкой к IP. Повторное скачивание доступно в личном кабинете.
Автоматизация выплат авторам
class AuthorPayoutService
{
public function processPayout(int $authorId): PayoutResult
{
$author = User::findOrFail($authorId);
$balance = $author->payout_balance;
if ($balance < config('marketplace.min_payout')) {
return PayoutResult::belowMinimum($balance);
}
if ($author->stripe_connect_id) {
$transfer = $this->stripe->transfers->create([
'amount' => (int)($balance * 100),
'currency' => 'rub',
'destination' => $author->stripe_connect_id,
'metadata' => ['author_id' => $authorId],
]);
$author->decrement('payout_balance', $balance);
Payout::create([
'author_id' => $authorId,
'amount' => $balance,
'stripe_id' => $transfer->id,
'status' => 'completed',
]);
return PayoutResult::success($balance);
}
return PayoutResult::noPaymentMethod();
}
}
Аналитика для авторов в реальном времени
Route::get('/api/author/stats', function (Request $request) {
$author = auth()->user();
return response()->json([
'total_revenue' => Sale::where('author_id', $author->id)->sum('author_payout'),
'total_sales' => Sale::where('author_id', $author->id)->count(),
'this_month' => Sale::where('author_id', $author->id)
->whereMonth('created_at', now()->month)
->sum('author_payout'),
'top_products' => Sale::where('author_id', $author->id)
->groupBy('product_id')
->orderByRaw('COUNT(*) DESC')
->limit(5)
->with('product:id,name,thumbnail')
->selectRaw('product_id, COUNT(*) as sales_count, SUM(author_payout) as revenue')
->get(),
'pending_payout' => $author->payout_balance,
]);
})->middleware('auth');
Как автоматизировать модерацию цифровых товаров?
Используем hash-файлов (md5/sha1) для поиска дубликатов, анализ EXIF-данных изображений, проверку лицензионных меток. При прохождении всех проверок товар публикуется автоматически, иначе создается задача модератору с приоритетом. Такой подход сокращает время модерации с 2 дней до 5 минут.
Почему стоит использовать Elasticsearch для поиска?
Elasticsearch даёт полнотекстовый поиск с морфологией русского языка, фасетную фильтрацию, сортировку по любым полям. Обрабатывает сотни запросов в секунду без нагрузки на БД. Индексируем не только названия, но и мета-поля, описания, теги — релевантность повышается на 40% по сравнению с LIKE-запросами.
Сравнение поисковых решений
| Решение | Скорость (мс) | Релевантность | Нагрузка на сервер |
|---|---|---|---|
| Elasticsearch | 5-50 | Высокая | Низкая (асинхронно) |
| Meilisearch | 10-100 | Средняя | Низкая |
| MySQL LIKE | 500-2000 | Низкая | Высокая (блокировки) |
Процесс работы
- Аналитика — изучаем специфику товаров, ожидаемую нагрузку, требования к модерации.
- Проектирование — архитектура БД, схема выплат, структура API.
- Реализация — спринты по 2 недели, daily-митинги, code review.
- Тестирование — нагрузочное тестирование (k6), проверка безопасности, юзабилити.
- Деплой — CI/CD на Vercel или собственный сервер, мониторинг ошибок.
Сроки ориентировочно: 25–35 рабочих дней
Стоимость рассчитывается индивидуально после аудита вашего ТЗ. Напишите — оценим проект.
Примерная архитектура микросервисов
При высоких нагрузках разбиваем монолит на микросервисы: сервис пользователей, сервис продуктов, сервис выплат, сервис аналитики. Общение через очередь (RabbitMQ) и API Gateway. Это позволяет горизонтально масштабировать каждый компонент.Что входит в работу
- Исходный код (Laravel + Vue) в закрытом репозитории
- Полная документация API (Swagger)
- Доступы к админке и серверу
- Обучение команды (2-3 вебинара)
- Гарантия 3 месяца на баги
- Поддержка по SLA после запуска
Типичные ошибки при разработке маркетплейса
- Отсутствие защиты от повторного скачивания — злоумышленники распространяют ссылки. Решение: использовать одноразовые токены.
- Ручная модерация без автоматизации — узкое горлышко. Решение: авто-проверки с доверием к авторам.
- Плохой поиск — пользователи уходят. Решение: Elasticsearch/Meilisearch.
- Неверная архитектура выплат — проблемы с налогами. Решение: Stripe Connect с учётом комиссий.
Получите консультацию инженера по архитектуре маркетплейса. Мы с опытом 5+ лет уже запустили 20+ таких платформ. Гарантируем качество и прозрачное сотрудничество.







