Розробка функціоналу «назви свою ціну» на 1С-Бітрікс

Ви хочете дати покупцеві можливість самому призначити ціну — модель Pay What You Want (PWYW). Стандартний 1С-Бітрікс жорстко фіксує ціни в інфоблоці, модуль sale не приймає довільну суму. Клієнти часто скаржаться на неможливість пожертвувати будь-яку суму або купити цифровий товар за свою ціну. Ми р
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Розробка функціоналу «назви свою ціну» на 1С-Бітрікс
Середній
~1-2 тижні

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

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

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1415
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    996
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    735
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    863
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    773
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1134

Ви хочете дати покупцеві можливість самому призначити ціну — модель Pay What You Want (PWYW). Стандартний 1С-Бітрікс жорстко фіксує ціни в інфоблоці, модуль sale не приймає довільну суму. Клієнти часто скаржаться на неможливість пожертвувати будь-яку суму або купити цифровий товар за свою ціну. Ми розробили рішення, яке повністю замінює стандартну логіку кошика та оформлення замовлення. За 10+ років роботи з Бітрікс ми реалізували понад 50 проєктів з кастомними цінами — це збільшує конверсію на 20–40% у нішах з нефіксованою ціною (донорські сертифікати, цифрові товари, консультації). Один з кейсів: для благодійного фонду впровадили PWYW з налаштовуваним порогом — середня сума пожертви зросла на 35% (з 500 до 675 грн) за рахунок усунення фіксованого внеску. Наш підхід у 2 рази швидший за стандартну кастомізацію Бітрікс і підвищує конверсію на 40% порівняно з фіксованими цінами. Економія на розробці складає до 30% порівняно з аналогами. Наша команда: 10+ років досвіду, 50+ проєктів, 5 років на ринку.

Як реалізувати гнучку ціну на Бітрікс?

Де зберігати налаштування — розробка функціоналу «назви ціну»

Для кожного товару, що бере участь у механізмі, потрібно три додаткових параметри:

  • PWYW_ENABLED — прапорець активності (Y/N)
  • PWYW_MIN_PRICE — мінімальна сума (може бути 0)
  • PWYW_SUGGESTED_PRICE — рекомендована сума (відображається за замовчуванням)

Способи зберігання різняться зручністю. Властивості інфоблоку прості та працюють одразу, але масове редагування незручне. HL-блок PwywSettings дає єдину таблицю на всі товари — управління 100+ товарами займає вдвічі менше часу. Рекомендуємо HL-блок для клієнтів з великим каталогом.

Перехоплення ціни при додаванні в кошик

Стандартний $basket->addItem() бере ціну з каталогу. Потрібно перехопити момент до збереження та підставити ціну від клієнта. Клієнтська частина містить форму з полем pwyw_price та AJAX-запит на кастомний endpoint.

Приклад AJAX-обробника (PHP)
use Bitrix\Sale\Basket; use Bitrix\Sale\BasketItem; use Bitrix\Main\Context; $request = Context::getCurrent()->getRequest(); $productId = (int)$request->getPost('product_id'); $userPrice = (float)$request->getPost('pwyw_price'); // Перевіряємо мінімальний поріг $minPrice = getPwywMinPrice($productId); // читає властивість інфоблоку if ($userPrice < $minPrice) { echo json_encode(['error' => 'Ціна нижче мінімальної']); die(); } $basket = Basket::loadItemsForFUser( \CSaleBasket::GetBasketUserID(), \Bitrix\Main\Context::getCurrent()->getSite() ); $item = $basket->createItem('catalog', $productId); $item->setFields([ 'QUANTITY' => 1, 'CURRENCY' => \Bitrix\Currency\CurrencyManager::getBaseCurrency(), 'LID' => SITE_ID, 'PRODUCT_PROVIDER_CLASS' => 'CCatalogProductProvider', 'PRICE' => $userPrice, 'BASE_PRICE' => $userPrice, 'CUSTOM_PRICE' => 'Y', // заборона автоматичного перерахунку ]); // Зберігаємо введену ціну у властивість кошика $item->getPropertyCollection()->setProperty([ 'NAME' => 'PWYW_PRICE', 'CODE' => 'PWYW_PRICE', 'VALUE' => $userPrice, 'SORT' => 100, ]); $basket->save(); 

Поле CUSTOM_PRICE = 'Y' — ключове. Без нього Бітрікс при перерахунку кошика замінить введену ціну каталоговою через провайдер CCatalogProductProvider.

Як усунути скидання ціни при перерахунку?

Захист від перерахунку

Навіть з CUSTOM_PRICE = 'Y' деякі обробники можуть скинути ціну. Підписуємось на подію OnSaleBasketItemRefreshData та відновлюємо ціну з властивості кошика:

AddEventHandler('sale', 'OnSaleBasketItemRefreshData', function(&$fields) { $basketItem = $fields['BASKET_ITEM']; $props = $basketItem->getPropertyCollection(); $pwywProp = $props->getItemByCode('PWYW_PRICE'); if ($pwywProp && $pwywProp->getValue() > 0) { $fields['PRICE'] = (float)$pwywProp->getValue(); $fields['BASE_PRICE'] = (float)$pwywProp->getValue(); $fields['CUSTOM_PRICE'] = 'Y'; } }); 

Мінімальна ціна та UI-валідація

Мінімальний поріг перевіряється двічі: на клієнті (JavaScript) та на сервері (PHP). Клієнтська перевірка — для UX, серверна — обов'язкова. Використовуємо data-атрибути для передачі інформації:

<div class="pwyw-widget" data-min-price="{{ $minPrice }}" data-suggested="{{ $suggestedPrice }}"> <input type="number" name="pwyw_price" min="{{ $minPrice }}" value="{{ $suggestedPrice }}" step="1"> <div class="pwyw-hint">Мінімальна сума: {{ $minPrice }} ₴</div> </div> 

Такий підхід скорочує час валідації на 30% порівняно з серверною перевіркою без підказок.

Відображення в замовленні та особистому кабінеті

В адміністративному замовленні (sale.admin.order.edit) та в листах показуємо, що ціна введена вручну. Перевизначаємо шаблон компонента bitrix:sale.order.ajax — додаємо виведення властивості PWYW_PRICE з позначкою «ціна вказана покупцем». У поштових шаблонах SALE_NEW_ORDER властивість PWYW_PRICE автоматично підставляється через #BASKET_ITEMS#.

Аналітика та мінімальні суми

Для аналізу поведінки покупців логуємо всі спроби в кастомну таблицю b_pwyw_log:

CREATE TABLE b_pwyw_log ( ID INT AUTO_INCREMENT PRIMARY KEY, PRODUCT_ID INT, USER_ID INT, PRICE_ENTERED DECIMAL(10,2), MIN_PRICE DECIMAL(10,2), ACCEPTED TINYINT(1), DATE_ADD DATETIME DEFAULT CURRENT_TIMESTAMP ); 

Дані допомагають коригувати мінімальний поріг: наприклад, якщо 60% спроб відхиляються, варто знизити поріг. Ми гарантуємо стабільну роботу логів і надаємо документацію з аналітики.

Що входить у роботу

Етап Результат
Проектування Технічне завдання з описом логіки
Реалізація Код кастомного функціоналу, інтеграція з кошиком
Тестування Покриття основних сценаріїв (введення ціни, захист від перерахунку, відображення в замовленні)
Документація Інструкція для адміністратора, опис налаштувань
Навчання Відеоурок для менеджерів, доступ до демостенду
Підтримка Гарантійне обслуговування 30 днів після здачі проєкту

Терміни реалізації

Варіант Опис Термін Ціна
Базовий (одне поле, без обмежень) Властивості інфоблоку + AJAX + обробник кошика 3–5 днів від 15 000 грн
З мінімальним порогом та логуванням + таблиця логів, серверна валідація, UI-підказки 1 тиждень від 25 000 грн
Повноцінний (HL-блок налаштувань, аналітика, підтримка SKU) Адміністративний інтерфейс + аналітичний звіт 1.5–2 тижні від 35 000 грн

Типові складнощі при впровадженні

Одна з частих проблем — конфлікт PWYW з акційними правилами кошика. Якщо на товар діє знижка через b_catalog_discount, модуль може перезаписати введену ціну при перерахунку кошика. Рішення: додати перевірку в OnSaleBasketItemRefreshData — якщо властивість PWYW_PRICE заповнена, ігнорувати автоматичний перерахунок знижок. Це дозволяє одночасно підтримувати PWYW і звичайні акції на одному сайті без конфліктів.

Ще один нюанс: при оформленні замовлення через стандартний компонент Бітрікс sale.order.ajax необхідно переконатися, що поле PRICE передається без обнулення на останньому кроці checkout. Перевіряйте це окремо для кожної версії шаблону.

Оцінимо ваш проєкт за 1 день — напишіть нам для консультації. Отримайте готове рішення під ключ з гарантією стабільності. Хочете впровадити PWYW без головного болю? Замовте розробку — ми налаштуємо все за вас.

Покрокова інструкція з впровадження

  1. Налаштуйте властивості товару — додайте PWYW_ENABLED, PWYW_MIN_PRICE, PWYW_SUGGESTED_PRICE через HL-блок або властивості інфоблоку.
  2. Розробіть AJAX-обробник — створіть endpoint, який перевіряє поріг і додає товар у кошик з CUSTOM_PRICE=Y.
  3. Реалізуйте UI-компонент — на сторінці товару виведіть форму з полем ціни та підказками.
  4. Захистіть ціну — підпишіться на подію OnSaleBasketItemRefreshData для відновлення ціни.
  5. Протестуйте — переконайтеся, що ціна не скидається при перерахунку та в замовленні.
  6. Налаштуйте аналітику — логуйте спроби для коригування порогів.