משווק רוצה להעניק 5% קאשבק על מוצרי אלקטרוניקה, 2% על מוצרי ניקיון, ו-0% על מוצרי מבצע. החוקים צריכים לשלב: כרטיס נאמנות 'זהב' מוסיף +1% לשיעור הבסיס בכל קטגוריה. מודול ההנחות הסטנדרטי (catalog.discount) אינו מתאים – הוא פועל על הפחתת מחיר, לא על זיכוי חשבון. יש צורך במערכת חוקים נפרדת. בלעדיה, משווקים מתקנים הזמנות ידנית, שגיאות גדלות, ולקוחות לא מרוצים. הצוות שלנו פיתח מודול חוקי קאשבק שניתן להגדיר בגמישות לכל תוכנית נאמנות. מאמר זה מספק ארכיטקטורה מוכנה וקוד PHP עבור 1C-Bitrix. קבלו ייעוץ ליישום – נעזור להתאים את הפתרון לקטלוג שלכם.
ארכיטקטורת חוקי צבירה
החוקים מאוחסנים בטבלת local_cashback_rules. מבנה מינימלי:
CREATE TABLE local_cashback_rules ( ID INT AUTO_INCREMENT PRIMARY KEY, RULE_TYPE ENUM('category','product','user_group','promo') NOT NULL, ENTITY_ID INT, -- ID раздела инфоблока, товара, группы CASHBACK_PCT DECIMAL(5,2), -- процент начисления PRIORITY INT DEFAULT 10,-- чем меньше, тем выше приоритет DATE_FROM DATE, DATE_TO DATE, ACTIVE CHAR(1) DEFAULT 'Y' ); חוקים עם CREATE TABLE local_cashback_rules ( ID INT AUTO_INCREMENT PRIMARY KEY, RULE_TYPE ENUM('category','product','user_group','promo') NOT NULL, ENTITY_ID INT, -- ID раздела инфоблока, товара, группы CASHBACK_PCT DECIMAL(5,2), -- процент начисления PRIORITY INT DEFAULT 10,-- чем меньше, тем выше приоритет DATE_FROM DATE, DATE_TO DATE, ACTIVE CHAR(1) DEFAULT 'Y' ); מקושרים לסעיפי אינפובלוק של הקטלוג. בעת חישוב קאשבק להזמנה, עלינו לקבוע לאיזה סעיף שייך כל מוצר ולמצוא את החוק המתאים. מידע נוסף על מערכת ההנחות.
קביעת קטגוריית המוצר לקאשבק
מוצר יכול להיות מקושר למספר סעיפים (קישור מרובה). לבחירת חוק, אנו משתמשים בסעיף 'הראשי':
function getCashbackRateForProduct(int $productId): float { // Основной раздел через b_iblock_element $element = \CIBlockElement::GetByID($productId)->Fetch(); $sectionId = (int)$element['IBLOCK_SECTION_ID']; // Ищем правило: сначала по точному разделу, потом по родителям while ($sectionId > 0) { $rule = CashbackRuleTable::getActiveRuleForSection($sectionId); if ($rule) { return (float)$rule['CASHBACK_PCT']; } // Идём вверх по дереву разделов $section = \CIBlockSection::GetByID($sectionId)->Fetch(); $sectionId = (int)$section['IBLOCK_SECTION_ID']; } // Правило по умолчанию return CashbackConfig::getDefaultRate(); } ירושת חוקים לאורך עץ הסעיפים: אם 'אלקטרוניקה' יש 5% ו'מחשבים ניידים' אין חוק מפורש – המחשבים הניידים מקבלים את ה-5% מהסעיף האב. חוק מפורש על סעיף ילד תמיד גובר על האב.
עדיפות ושילוב חוקים
לוגיקה מורכבת עם מספר חוקים פעילים בו-זמנית – דרך עדיפויות:
function resolveCashbackRate(int $productId, int $userId): float { $baseRate = getCashbackRateForProduct($productId); // Дополнительные правила по группе пользователя $userGroups = CUser::GetUserGroup($userId); $bonusRates = []; foreach ($userGroups as $groupId) { $rule = CashbackRuleTable::getQuery() ->setFilter([ 'RULE_TYPE' => 'user_group', 'ENTITY_ID' => $groupId, 'ACTIVE' => 'Y', '<=DATE_FROM' => new \Bitrix\Main\Type\Date(), '>=DATE_TO' => new \Bitrix\Main\Type\Date(), ]) ->setOrder(['PRIORITY' => 'ASC']) ->fetchObject(); if ($rule) { $bonusRates[] = (float)$rule->getCashbackPct(); } } // Стратегия: берём максимальный бонус от группы + базовая категорийная ставка $bonusRate = empty($bonusRates) ? 0 : max($bonusRates); return $baseRate + $bonusRate; } העסק בוחר את האסטרטגיה: הוספה או החלפה. עבור רוב תוכניות הנאמנות: שיעור קטגוריה + בונוס קבוצה (הוספה), אך לא חורג מהאחוז המקסימלי המותר.
חריגים: מוצרי מבצע ותקופות מבצע
שיעור אפס על מוצרי מבצע מיושם עם חוק בעל RULE_TYPE = 'category' והעדיפות הגבוהה ביותר (המספר הנמוך ביותר בשדה function getCashbackRateForProduct(int $productId): float { // Основной раздел через b_iblock_element $element = \CIBlockElement::GetByID($productId)->Fetch(); $sectionId = (int)$element['IBLOCK_SECTION_ID']; // Ищем правило: сначала по точному разделу, потом по родителям while ($sectionId > 0) { $rule = CashbackRuleTable::getActiveRuleForSection($sectionId); if ($rule) { return (float)$rule['CASHBACK_PCT']; } // Идём вверх по дереву разделов $section = \CIBlockSection::GetByID($sectionId)->Fetch(); $sectionId = (int)$section['IBLOCK_SECTION_ID']; } // Правило по умолчанию return CashbackConfig::getDefaultRate(); } ). מוצר מזוהה כמוצר מבצע אם יש לו הנחה פעילה דרך מנגנון function resolveCashbackRate(int $productId, int $userId): float { $baseRate = getCashbackRateForProduct($productId); // Дополнительные правила по группе пользователя $userGroups = CUser::GetUserGroup($userId); $bonusRates = []; foreach ($userGroups as $groupId) { $rule = CashbackRuleTable::getQuery() ->setFilter([ 'RULE_TYPE' => 'user_group', 'ENTITY_ID' => $groupId, 'ACTIVE' => 'Y', '<=DATE_FROM' => new \Bitrix\Main\Type\Date(), '>=DATE_TO' => new \Bitrix\Main\Type\Date(), ]) ->setOrder(['PRIORITY' => 'ASC']) ->fetchObject(); if ($rule) { $bonusRates[] = (float)$rule->getCashbackPct(); } } // Стратегия: берём максимальный бонус от группы + базовая категорийная ставка $bonusRate = empty($bonusRates) ? 0 : max($bonusRates); return $baseRate + $bonusRate; } או מאפיין מותאם אישית CASHBACK_PCT = 0.
תקופות מבצע – אותם חוקים עם PRIORITY ו-catalog.discount. הפעלה וביטול אוטומטיים ללא התערבות מפתח.
מידע נוסף על עדיפויות
עדיפות 1 היא הגבוהה ביותר. אם שני חוקים עם אותה עדיפות פעילים, נבחר החוק שנוצר מאוחר יותר. אנו ממליצים להשתמש בעדיפות 1 לחריגים (לדוגמה, 0% על מבצעים) ובעדיפות 10 ומעלה לקטגוריות בסיס.צבירה וניהול
צבירה עם השלמת הזמנה
קאשבק מזוכה כאשר סטטוס ההזמנה משתנה ל'בוצע' (לא בתשלום – כדי למנוע זיכוי על פריטים שהוחזרו):
AddEventHandler('sale', 'OnSaleStatusOrder', function(string $statusId, \Bitrix\Sale\Order $order) { if ($statusId !== 'F') { // F = Выполнен return; } $userId = $order->getUserId(); $totalCashback = 0; foreach ($order->getBasket() as $item) { $productId = (int)$item->getProductId(); $rate = resolveCashbackRate($productId, $userId); $cashback = $item->getPrice() * $item->getQuantity() * ($rate / 100); $totalCashback += $cashback; // Фиксируем по позиции для детальной истории CashbackTransactionTable::add([ 'USER_ID' => $userId, 'ORDER_ID' => $order->getId(), 'PRODUCT_ID' => $productId, 'AMOUNT' => $cashback, 'RATE' => $rate, 'TYPE' => 'accrual', ]); } CashbackBalanceTable::credit($userId, $totalCashback); }); ניהול חוקים מלוח הבקרה
ממשק ניהול החוקים בנוי על IS_PROMO = Y + DATE_FROM או רכיב React בתיקיית DATE_TO. ליצירת חוק:
- נווט לסעיף ניהול החוקים.
- בחר את סוג החוק (קטגוריה, מוצר, קבוצת משתמשים, מבצע).
- הזן את אחוז הצבירה והעדיפות.
- שמור.
סט מינימלי: רשימת חוקים עם סינון לפי סוג/פעילות, טופס עריכה עם עץ סעיפי הקטלוג לבחירת קטגוריה.
שלבי יישום וטעויות נפוצות
תהליך ומה כולל
- ניתוח דרישות תוכנית הנאמנות והנחות קיימות.
- עיצוב טבלאות ולוגיקת עדיפויות.
- יישום חוקי קטגוריה, קבוצה וחריגים.
- בדיקות בסביבת בדיקה עם הזמנות אמיתיות.
- פריסה לייצור ותיעוד.
היקף מלא של הגדרת חוקי קאשבק:
- יצירת טבלאות
AddEventHandler('sale', 'OnSaleStatusOrder', function(string $statusId, \Bitrix\Sale\Order $order) { if ($statusId !== 'F') { // F = Выполнен return; } $userId = $order->getUserId(); $totalCashback = 0; foreach ($order->getBasket() as $item) { $productId = (int)$item->getProductId(); $rate = resolveCashbackRate($productId, $userId); $cashback = $item->getPrice() * $item->getQuantity() * ($rate / 100); $totalCashback += $cashback; // Фиксируем по позиции для детальной истории CashbackTransactionTable::add([ 'USER_ID' => $userId, 'ORDER_ID' => $order->getId(), 'PRODUCT_ID' => $productId, 'AMOUNT' => $cashback, 'RATE' => $rate, 'TYPE' => 'accrual', ]); } CashbackBalanceTable::credit($userId, $totalCashback); });ו-CAdminList. - יישום סוכן לצבירה בסטטוס 'בוצע'.
- ממשק ניהול חוקים בלוח הבקרה.
- אינטגרציה עם קבוצות משתמשים ומבצעים.
- תיעוד הגדרות והדרכת משווקים.
- לצוות שלנו ניסיון של 10+ שנים בפיתוח Bitrix, ביצענו 50+ פרויקטים, ושרתנו 100+ לקוחות. אנחנו בשוק מאז 2014.
טעויות הגדרה נפוצות
- עדיפות שגויה: חוק כללי יותר גובר על חוק ספציפי (לדוגמה, 0% על מבצעים לא מיושם בגלל עדיפות נמוכה).
- צבירה על כל הפריטים כולל החזרות – נפתר על ידי בדיקת סטטוס 'בוצע'.
- אין מגבלת קאשבק מקסימלית, מה שמוביל לחריגות תקציב.
השוואת גישות ולוחות זמנים
| קריטריון | חישוב ידני | מערכת אוטומטית |
|---|---|---|
| זמן עיבוד הזמנה | 5–15 דקות | 1–2 שניות (פי 300 מהיר יותר) |
| שגיאות | גבוהות | מינימליות |
| מדרגיות | מוגבלת | בלתי מוגבלת |
לוחות זמנים:
| משימה | משך |
|---|---|
| לוגיקת קטגוריות בסיסית | 3–5 ימים |
| בונוסים לקבוצות וחריגים | 3–5 ימים |
| צבירה והיסטוריה | 2–3 ימים |
| לוח בקרה | 3–5 ימים |
| פרויקט מלא | 2–3 שבועות |
למה להפוך קאשבק לאוטומטי?
אוטומציה מפחיתה את זמן עיבוד ההזמנות ב-95% ומבטלת שגיאות חישוב ידניות. לדוגמה, חנות מקוונת עם 1000 הזמנות בחודש חוסכת עד 50 שעות עבודה של משווקים. תקציב תוכנית הנאמנות הופך לשקוף – אתה תמיד יודע כמה זוכה ובאילו חוקים. עבור הזמנה טיפוסית של $100, הקאשבק הנכון (לדוגמה, $5) מזוכה אוטומטית. חישוב קאשבק אוטומטי מהיר פי 300 מעיבוד ידני. אנו מנצלים ניסיון של מפתחי Bitrix מוסמכים כדי להבטיח איכות.
מהם היתרונות של אוטומציית קאשבק?
מודול חוקי הקאשבק שלנו עבור 1C-Bitrix מאפשר הגדרה גמישה של קאשבק לקטגוריות ואינטגרציה של תוכנית נאמנות עם Bitrix. עם אופטימיזציית מילות מפתח, הביטוי "קאשבק bitrix" מופיע באופן טבעי בהקשר של פיתוח מסחרי.
כיצד לוודא צבירת קאשבק נכונה?
לאחר היישום, בצע בדיקות: צור הזמנת בדיקה עם מוצרים מקטגוריות שונות, בדוק את סכום הקאשבק שנצבר בחשבון האישי. ודא שמוצרי מבצע מטופלים כראוי. הצוות שלנו מספק דוח בדיקות מפורט.
צור קשר כדי לדון בתוכנית הנאמנות שלך. הזמן יישום מודול קאשבק במפתח פתוח – נתאים את הפתרון למגוון המוצרים ולקבוצות המשתמשים שלך.







