Разработка системы аукциона на 1С-Битрикс
Мы разрабатываем системы аукционов на 1С-Битрикс с полной интеграцией в торговый каталог. Стандартные модули catalog и sale не содержат готовой логики торгов — мы строим её с нуля, обеспечивая целостность данных при одновременных ставках, real-time обновления и автоматическое создание заказов. Наша команда имеет 10+ лет опыта разработки на Битрикс и реализовала аукционные системы для площадок с нагрузкой до 10 000 одновременных пользователей.
Аукцион на сайте — нетривиальная задача: цена товара определяется конкуренцией покупателей за ограниченное время. Ошибки в логике ставок или задержки обновлений ведут к финансовым потерям. Мы решаем эти проблемы на уровне архитектуры, выбирая оптимальный баланс между производительностью и сложностью. Например, для одного из проектов с 5000+ лотов одновременно мы использовали комбинацию polling и агрессивного кэширования — это позволило снизить нагрузку на базу данных на 40%.
Почему аукцион на Битрикс — сложная задача?
Битрикс не имеет встроенных механизмов для управления аукционами. Разработка требует:
- Кастомных таблиц для хранения ставок и состояний
- Транзакционной логики для избежания гонок данных
- Real-time или quasi-real-time обновлений интерфейса
- Интеграции с 1С для синхронизации остатков и цен
- Антифрод-правил для защиты от накруток
Каждый пункт — отдельный вызов. Например, при одновременных ставках двух пользователей без блокировки строки базы данных оба могут стать победителями. Мы решаем это через SELECT FOR UPDATE.
Типы аукционов
Перед разработкой важно зафиксировать бизнес-требования по типу аукциона:
| Тип | Описание | Особенности |
|---|---|---|
| Английский (открытый) | Ставки растут, побеждает максимальная | Самый распространённый |
| Нидерландский (обратный) | Цена снижается, побеждает первый согласившийся | Нужен таймер снижения цены |
| Авто-ставка | Указывается максимум, система торгуется автоматически | Сложная логика |
| «Купи сейчас» | Аукцион + фиксированная цена для мгновенной покупки | Параллельный канал продажи |
Как мы реализуем приём ставок?
Принятие новой ставки — критическая секция. Несколько пользователей могут делать ставки одновременно. Без блокировок возникнут гонки данных.
function placeBid(int $auctionId, int $userId, float $amount): BidResult { // Начало транзакции с блокировкой строки аукциона $connection = \Bitrix\Main\Application::getConnection(); $connection->startTransaction(); try { // SELECT FOR UPDATE — блокируем строку $auction = $connection->query( "SELECT * FROM b_local_auction WHERE ID = {$auctionId} FOR UPDATE" )->fetch(); // Валидации if ($auction['STATUS'] !== 'ACTIVE') { throw new \Exception('Аукцион не активен'); } if (new DateTime() > new DateTime($auction['END_TIME'])) { throw new \Exception('Аукцион завершён'); } if ($amount < $auction['CURRENT_PRICE'] + $auction['MIN_STEP']) { throw new \Exception('Ставка ниже минимальной: ' . ($auction['CURRENT_PRICE'] + $auction['MIN_STEP'])); } if ($auction['CURRENT_WINNER_ID'] === $userId) { throw new \Exception('Вы уже лидируете'); } // Записать ставку AuctionBidTable::add([ 'AUCTION_ID' => $auctionId, 'USER_ID' => $userId, 'AMOUNT' => $amount, 'CREATED_AT' => new DateTime(), ]); // Обновить текущую ставку AuctionTable::update($auctionId, [ 'CURRENT_PRICE' => $amount, 'CURRENT_WINNER_ID' => $userId, 'BIDS_COUNT' => $auction['BIDS_COUNT'] + 1, ]); // Продление времени при ставке в последние минуты if ((new DateTime($auction['END_TIME']))->getTimestamp() - time() < 300) { AuctionTable::update($auctionId, [ 'END_TIME' => (new DateTime())->modify('+5 minutes'), ]); } $connection->commitTransaction(); // Уведомить предыдущего лидера notifyOutbid($auction['CURRENT_WINNER_ID'], $auctionId, $amount); } catch (\Exception $e) { $connection->rollbackTransaction(); throw $e; } } Как обеспечить real-time обновления на Битрикс?
Аукцион требует отображения текущей ставки без перезагрузки страницы. Три подхода:
Polling — самый простой: JavaScript делает AJAX-запрос каждые 5-10 секунд. Polling в 5–10 раз проще в реализации, чем WebSocket, и подходит для 95% аукционов.
setInterval(() => { fetch('/local/ajax/auction_state.php?id=' + auctionId) .then(r => r.json()) .then(data => updateUI(data)); }, 5000); Server-Sent Events (SSE) — сервер сам отправляет события при изменении. Меньше нагрузки, чем polling, но сложнее в настройке на типовом хостинге.
WebSocket — максимально real-time, но требует отдельного сервера (Node.js, Ratchet). На Битрикс-хостинге может быть недоступно.
Для большинства аукционов polling с интервалом 5-10 секунд — достаточное решение.
Пример настройки кэширования для аукциона
Кэш тегированный на основе ID лота: `BX_COMPONENT:auctionState.{$auctionId}`. При каждой ставке сбрасывается только кэш этого лота. Время кэширования — 3 секунды для снижения нагрузки. Это позволяет выдержать до 1000 одновременных запросов без деградации.Как работает антифрод?
Проверка на одного пользователя с разных аккаунтов: анализ IP, cookies, истории действий. Опционально — верификация телефона или предоплата (блокировка суммы) для доступа к аукциону. Минимальный аккаунт должен быть зарегистрирован не менее 7 дней назад и иметь хотя бы один завершённый заказ.
Что входит в разработку аукциона под ключ?
Мы предоставляем полный комплект:
- Проектирование структуры данных (таблицы, индексы, связи)
- Реализацию логики ставок с транзакциями и антифродом
- Пользовательский интерфейс (страница лота, форма ставки, таймер, текущий статус)
- Real-time обновления (polling/SSE/WebSocket по согласованию)
- Автоматическое завершение аукциона, уведомления победителей, создание заказов
- Интеграцию с 1С через CommerceML (синхронизация остатков, цен, заказов)
- Документацию по архитектуре и API
- Обучение администраторов работе с аукционами
- Гарантийную поддержку на 30 дней после сдачи
Ориентировочные сроки
| Вариант | Состав | Срок |
|---|---|---|
| Базовый аукцион | Английский, ставки, таймер, polling | 8-10 дней |
| Расширенный | Авто-ставка, «Купи сейчас», уведомления | 12-16 дней |
| Полная платформа | Несколько типов, WebSocket, аналитика, антифрод | 20-30 дней |
Стоимость рассчитывается индивидуально и зависит от сложности. Оценим ваш проект бесплатно. Свяжитесь с нами, чтобы обсудить детали.
Ознакомьтесь с официальной документацией 1С-Битрикс для понимания возможностей платформы. Получите консультацию по вашему проекту — расскажем, как реализовать аукцион с учётом ваших бизнес-правил.







