שילוב Pay What You Want ב-1C-Bitrix

1C-Bitrix הסטנדרטי אינו מאפשר לקונים לקבוע מחיר משלהם, מה שמגביל מודלים גמישים של מכירות. אנו מפתחים פיצ'ר מסוג "קבע את המחיר שלך" (PWYW) שמחליף לחלוטין את לוגיקת העגלה וההזמנה הסטנדרטית. הצוות שלנו מספק את הפרויקט במפתח מלא — מהגדרת פרמטרים ועד הטמעה ותמיכה שוטפת — ומבטיח פתרון אמין שגדל עם העסק שלך.
השירותים שאנו מציעים
מציג 1 מתוך 1כל 1626 השירותים
שילוב Pay What You Want ב-1C-Bitrix
בינוני
~1-2 שבועות

הכישורים שלנו:

שאלות נפוצות

אתם רוצים לאפשר ללקוחות לקבוע מחיר משלהם — מודל שלם כמה שאתה רוצה (PWYW). 1C-Bitrix הסטנדרטי קובע מחירים בצורה נוקשה בבלוק המידע, ומודול המכירה אינו מקבל סכומים שרירותיים. לקוחות מתלוננים לעיתים קרובות על חוסר היכולת לתרום סכום כלשהו או לקנות מוצר דיגיטלי במחיר שהם בוחרים. פיתחנו פתרון שמחליף לחלוטין את הלוגיקה הסטנדרטית של סל הקניות והתשלום. עם ניסיון של 10+ שנים ב-Bitrix, יישמנו למעלה מ-50 פרויקטים עם מחירים מותאמים אישית — זה מגדיל את ההמרה ב-20–40% בנישות עם תמחור לא קבוע (תעודות תרומה, מוצרים דיגיטליים, ייעוצים). מקרה אחד: עבור קרן צדקה יישמנו PWYW עם סף מינימלי הניתן להתאמה — התרומה הממוצעת גדלה ב-35% לאחר הסרת התרומה הקבועה.

יישום מחיר גמיש

היכן לאחסן הגדרות — פיתוח הפונקציונליות 'קבע מחיר משלך'

עבור כל מוצר שמשתתף במנגנון, נדרשים שלושה פרמטרים נוספים:

  • PWYW_ENABLED — דגל פעילות (Y/N)
  • PWYW_MIN_PRICE — סכום מינימלי (יכול להיות 0)
  • PWYW_SUGGESTED_PRICE — סכום מוצע (מוצג כברירת מחדל)

שיטות האחסון שונות בנוחות. מאפייני בלוק מידע פשוטים ועובדים מיד, אך עריכה בכמות גדולה אינה נוחה. בלוק HL PwywSettings מספק טבלה אחת לכל המוצרים — ניהול של 100+ מוצרים לוקח חצי מהזמן. אנו ממליצים על בלוק HL ללקוחות עם קטלוגים גדולים.

יירוט המחיר בעת הוספה לסל

$basket->addItem() הסטנדרטי לוקח את המחיר מהקטלוג. עלינו ליירט את הרגע לפני השמירה ולהחליף את המחיר במחיר שהלקוח הזין. החלק של הלקוח כולל טופס עם שדה pwyw_price ובקשת AJAX לנקודת קצה מותאמת אישית.

דוגמה למטפל 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();

השדה 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(); הוא המפתח. בלעדיו, Bitrix יחליף את המחיר שהוזן במחיר הקטלוג דרך ספק CUSTOM_PRICE = 'Y' בעת חישוב מחדש של הסל.

בעיות עם איפוס מחיר במהלך חישוב מחדש

הגנה מפני חישוב מחדש

אפילו עם CCatalogProductProvider, חלק מהמטפלים עשויים לאפס את המחיר. אנו נרשמים לאירוע CUSTOM_PRICE = 'Y' ומשחזרים את המחיר ממאפיין הסל:

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';
    }
});

מחיר מינימלי ואימות ממשק משתמש

הסף המינימלי נבדק פעמיים: בצד הלקוח (JavaScript) ובצד השרת (PHP). אימות בצד הלקוח הוא לחוויית משתמש, אימות בצד השרת הוא חובה. אנו משתמשים במאפיינים OnSaleBasketItemRefreshData כדי להעביר מידע:

<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% בהשוואה לבדיקות בצד השרת ללא רמזים.

הצגה בהזמנה ובחשבון האישי

בהזמנת הניהול (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'; } }); ) ובהודעות דוא"ל, אנו מציגים שהמחיר הוזן ידנית. עקוף את תבנית הרכיב 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> עם הערה 'מחיר שנקבע על ידי הקונה'. בתבניות דוא"ל sale.admin.order.edit, המאפיין bitrix:sale.order.ajax מוכנס אוטומטית דרך PWYW_PRICE.

אנליטיקה וסכומים מינימליים

כדי לנתח התנהגות קונים, אנו מתעדים את כל הניסיונות בטבלה מותאמת אישית SALE_NEW_ORDER:

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 ימים
עם סף מינימלי ורישום + טבלת רישום, אימות שרת, רמזים בממשק שבוע
מלא (הגדרות בלוק HL, אנליטיקה, תמיכה ב-SKU) ממשק ניהול + דוח אנליטי 1.5–2 שבועות

אתגרים אופייניים ביישום

בעיה נפוצה אחת היא קונפליקט בין PWYW לכללי הנחות בסל. אם הנחה מוחלת דרך PWYW_PRICE, המודול עשוי לדרוס את המחיר שהוזן במהלך חישוב מחדש של הסל. פתרון: הוסף בדיקה ב-#BASKET_ITEMS# — אם המאפיין b_pwyw_log מוגדר, התעלם מחישוב הנחות אוטומטי. זה מאפשר תמיכה בו זמנית ב-PWYW ובמבצעים רגילים באותו אתר ללא קונפליקטים.

ניואנס נוסף: בעת הזמנה דרך רכיב Bitrix הסטנדרטי 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 ); , ודא שהשדה b_catalog_discount מועבר ללא איפוס בשלב האחרון של התשלום. בדוק זאת בנפרד עבור כל גרסת תבנית.

נעריך את הפרויקט שלכם תוך יום אחד — צרו קשר לייעוץ. קבלו פתרון סוהר עם אחריות ליציבות. רוצים ליישם PWYW בלי כאבי ראש? הזמינו פיתוח — נגדיר הכל עבורכם.