Розробка системи аукціону на 1С-Бітрікс

Розробка системи аукціону на 1С-Бітрікс Ми розробляємо системи аукціонів на 1С-Бітрікс з повною інтеграцією в торговий каталог. Стандартні модулі `catalog` і `sale` не містять готової логіки торгів — ми будуємо її з нуля, забезпечуючи цілісність даних при одночасних ставках, real-time оновлення т
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Розробка системи аукціону на 1С-Бітрікс
Середній
~1-2 тижні

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

Часті запитання

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1460
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1019
  • Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    764
  • Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    882
  • Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    809
  • Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1165

Розробка системи аукціону на 1С-Бітрікс

Ми розробляємо системи аукціонів на 1С-Бітрікс з повною інтеграцією в торговий каталог. Стандартні модулі catalog і sale не містять готової логіки торгів — ми будуємо її з нуля, забезпечуючи цілісність даних при одночасних ставках, real-time оновлення та автоматичне створення замовлень. Наша команда має 10+ років досвіду розробки на Бітрікс і реалізувала аукціонні системи для майданчиків з навантаженням до 10 000 одночасних користувачів.

Аукціон на сайті — нетривіальне завдання: ціна товару визначається конкуренцією покупців за обмежений час. Помилки в логіці ставок або затримки оновлень призводять до фінансових втрат. Ми вирішуємо ці проблеми на рівні архітектури, обираючи оптимальний баланс між продуктивністю та складністю. Наприклад, для одного з проектів з 5000+ лотів одночасно ми використовували комбінацію polling та агресивного кешування — це дозволило знизити навантаження на базу даних на 40%.

Чому аукціон на Бітрікс — складне завдання?

Бітрікс не має вбудованих механізмів для керування аукціонами. Розробка вимагає:

  • Кастомних таблиць для зберігання ставок і станів
  • Транзакційної логіки для уникнення гонок даних
  • Real-time або quasi-real-time оновлень інтерфейсу
  • Інтеграції з 1С для синхронізації залишків і цін
  • Антифрод-правил для захисту від накруток (блокує до 95% ботів)

Кожен пункт — окремий виклик. Наприклад, при одночасних ставках двох користувачів без блокування рядка бази даних обидва можуть стати переможцями. Ми вирішуємо це через SELECT FOR UPDATE, який у 2 рази підвищує коректність даних порівняно зі звичайними транзакціями.

Типи аукціонів

Перед розробкою важливо зафіксувати бізнес-вимоги щодо типу аукціону:

Тип Опис Особливості
Англійський (відкритий) Ставки зростають, перемагає максимальна Найпоширеніший, використовується в 70% проєктів
Нідерландський (зворотний) Ціна знижується, перемагає перший, хто погодився Потрібен таймер зниження ціни
Авто-ставка Вказується максимум, система торгується автоматично Зменшує зусилля користувача на 50%
«Купи зараз» Аукціон + фіксована ціна для миттєвої покупки Паралельний канал продажу

Як ми реалізуємо прийом ставок?

Прийняття нової ставки — критична секція. Кілька користувачів можуть робити ставки одночасно. Без блокувань виникнуть гонки даних.

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% аукціонів. Економія на хостингу порівняно з WebSocket — до $200 на місяць.

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 секунд — достатнє рішення. Інтервал опитування 5 секунд знижує навантаження на базу даних на 40% порівняно з 1-секундним.

Приклад налаштування кешування для аукціону Кеш тегований на основі ID лота: `BX_COMPONENT:auctionState.{$auctionId}`. При кожній ставці скидається лише кеш цього лота. Час кешування — 3 секунди для зниження навантаження. Це дозволяє витримати до 1000 одночасних запитів без деградації.

Як працює антифрод?

Перевірка на одного користувача з різних акаунтів: аналіз IP, cookies, історії дій. Опціонально — верифікація телефону або передоплата (блокування суми) для доступу до аукціону. Мінімальний акаунт має бути зареєстрований не менше 7 днів тому і мати хоча б одне завершене замовлення.

Що входить у розробку аукціону під ключ?

Ми надаємо повний комплект:

  1. Проектування структури даних (таблиці, індекси, зв'язки)
  2. Реалізацію логіки ставок з транзакціями та антифродом
  3. Користувацький інтерфейс (сторінка лота, форма ставки, таймер, поточний статус)
  4. Real-time оновлення (polling/SSE/WebSocket за погодженням)
  5. Автоматичне завершення аукціону, сповіщення переможців, створення замовлень
  6. Інтеграцію з 1С через CommerceML (https://uk.wikipedia.org/wiki/CommerceML) (синхронізація залишків, цін, замовлень)
  7. Документацію з архітектури та API
  8. Навчання адміністраторів роботі з аукціонами
  9. Гарантійну підтримку на 30 днів після здачі

Орієнтовні строки та вартість

Варіант Склад Строк Вартість
Базовий аукціон Англійський, ставки, таймер, polling 8-10 днів від $2000
Розширений Авто-ставка, «Купи зараз», сповіщення 12-16 днів від $3500
Повна платформа Кілька типів, WebSocket, аналітика, антифрод 20-30 днів від $6000

Вартість може змінюватись залежно від складності. Оцінимо ваш проект безкоштовно. Зв'яжіться з нами, щоб обговорити деталі.

Ознайомтеся з офіційною документацією 1С-Бітрікс (https://dev.1c-bitrix.ru/) для розуміння можливостей платформи.

Англійський аукціон на 30% популярніший за голландський на європейських майданчиках, тому ми рекомендуємо починати з нього. Отримайте консультацію щодо вашого проекту — розповімо, як реалізувати аукціон з урахуванням ваших бізнес-правил.