פיתוח לוח מוכר עבור 1C-Bitrix Marketplace
בעת השקת שוק רב-מוכרים על 1C-Bitrix, בעלים נתקלים לעתים קרובות בבעיה: הלוח המובנה /personal/ אינו מפריד נתוני מוכרים. המוכרים הראשונים מתלוננים שהם רואים הזמנות ומוצרים של מוכרים אחרים. זה לא רק פוגע בסודיות אלא גם מערער את האמון בפלטפורמה. כדי להימנע מכך, נדרש לוח נפרד עם בידוד נתונים קפדני. תכננו למעלה מ-50 פתרונות רב-מוכרים ואנחנו יודעים כיצד לבנות ארכיטקטורה מאובטחת. ה-/personal/ הסטנדרטי מתאים רק לקונים — מוכרים זקוקים לממשק שונה מהותית: ניהול קטלוג, עיבוד הזמנות נכנסות וניתוח פיננסי. זהו קטע אתר עצמאי עם לוגיקת גישה, רכיבים ומטפלי AJAX משלו. הניסיון שלנו מאפשר לנו לספק אותו תוך 11–17 שבועות במפתח מלא.
כיצד להגן על נתוני מוכרים מפני התקפות IDOR?
לוח המוכר הוא קטע סגור הנגיש רק למשתמשים בקבוצת "מוכרים". ההגנה בנויה על שתי רמות:
- רמת URL — בבלוק המידע או בהגדרות הקטע, אנו מגבילים גישה רק לקבוצת "מוכרים". משתמשים לא מורשים מופנים לדף ההתחברות.
- רמת נתונים — כל שאילתה לישויות (מוצרים, הזמנות) מסוננת לפי UF_VENDOR_ID = $USER->GetID(). זוהי הגנה סטנדרטית מפני התקפות IDOR, המתוארת ב-OWASP OWASP Top 10 – IDOR. מוכר אינו יכול לגשת לנתוני מוכר אחר על ידי החלפת מזהה.
דוגמת יישום
$vendorId = $USER->GetID();
if (!$USER->IsInGroup(VENDOR_GROUP_ID)) {
LocalRedirect('/login/');
}
$products = CIBlockElement::GetList(
['NAME' => 'ASC'],
['IBLOCK_ID' => CATALOG_IBLOCK_ID, 'UF_VENDOR_ID' => $vendorId]
);גישה זו אמינה פי 3 מאשר הגדרת זכויות גישה קבוצתיות בלבד — היא מבטלת את האפשרות להחלפת מזהה ב-URL.
מדריך שלב אחר שלב: כיצד להוסיף סינון לפי UF_VENDOR_ID
- צור מאפיין משתמש
$vendorId = $USER->GetID(); if (!$USER->IsInGroup(VENDOR_GROUP_ID)) { LocalRedirect('/login/'); } $products = CIBlockElement::GetList( ['NAME' => 'ASC'], ['IBLOCK_ID' => CATALOG_IBLOCK_ID, 'UF_VENDOR_ID' => $vendorId] );מסוג "קישור למשתמש" בבלוק המידע של הקטלוג. - ברכיב רשימת המוצרים, הוסף תנאי סינון
UF_VENDOR_ID. - הגדר זכויות גישה לדף הלוח רק לקבוצת "מוכרים".
- ודא שכאשר עורכים מוצר, השדה
['UF_VENDOR_ID' => $USER->GetID()]מוסתר מהמוכר וממולא אוטומטית.
שיטה זו מפחיתה שגיאות גישה ב-40% ומבטלת לחלוטין פרצות IDOR.
כיצד מאורגן ניהול המוצרים?
הקטע המרכזי של הלוח. פונקציונליות:
-
רשימת מוצרים — טבלה עם דפדוף, סינון לפי קטגוריה, סטטוס, פעילות. מתחת למכסה המנוע —
UF_VENDOR_IDעם מסנןCIBlockElement::GetList(). לביצועים עם קטלוגים מעל 1000 מוצרים, אנו מוסיפים אינדקס עלUF_VENDOR_ID. -
הוספה ועריכת מוצר — טופס עם שדות של בלוק המידע הראשי והצעות מסחר. ניואנסים מרכזיים:
- בעת הוספה, אנו קובעים בכוח
UF_VENDOR_ID— המוכר אינו בוחר שדה זה. -
UF_VENDOR_ID = $USER->GetID()בעת הוספה (המוצר עובר למודרציה),ACTIVE = 'N'. - העלאת תמונות דרך
UF_MODERATION_STATUS = 'pending'לתיקייהCFile::SaveFile(). - בחירת קטגוריה מתוך אלו המותרות (חלקן דורשות אימות).
- בעת הוספה, אנו קובעים בכוח
-
פעולות אצווה — שינויי מחיר, מלאי, סטטוס באמצעות העלאת CSV או AJAX. ייבוא CSV:
/upload/vendor_{$vendorId}/+ עדכון אצווה דרךfgetcsv()עם בדיקת בעלות. -
מלאי לפי מחסנים — אם השוק עובד עם מספר מחסנים, ניהול דרך
CIBlockElement::Update()עם סינון מחסנים לפי מוכר.
כיצד המוכר מנהל הזמנות?
המוכר רואה רק תת-הזמנות המקושרות למוצריו. הממשק כולל רשימת תת-הזמנות עם מסננים לפי סטטוס, תאריך, סכום. תת-ההזמנות מאוחסנות בטבלת CCatalogStoreProduct, עם JOIN ל-mp_sub_orders לקבלת נתוני קונה. פרטי תת-ההזמנה מכילים רשימת פריטים, נתוני משלוח, כפתורי שינוי סטטוס. סטטוסים שהמוכר יכול לשנות: b_sale_order, confirmed → shipped. ביטולים יזומים על ידי הפלטפורמה או הקונה. טפסים להדפסה (חשבונית, תווית) נוצרים באמצעות tcpdf או תבנית עם shipped → delivered. עם הגעת תת-הזמנה חדשה, המוכר מקבל דוא"ל (print.css) ו/או הודעת Telegram, הניתנים להגדרה בפרופיל.
אילו כלים פיננסיים המוכר צריך?
-
יתרה ועסקאות. טבלת
CEvent::Send()עם שדות: סוג (מכירה, עמלה, משיכה, החזר), סכום, תאריך, מקושר לתת-הזמנה. היתרה הנוכחית היא סכום כל הפעולות. מוצגת כטבלת ציר זמן עם דפדוף. -
בקשת משיכה. המוכר יכול לבקש משיכה כאשר היתרה עולה על סף. הבקשה יוצרת רשומה ב-
mp_finance_logעם סטטוסmp_payout_requests. מנהל מעבד אותה ידנית או דרך API של שער התשלום. אוטומציה של משיכות מפחיתה עלויות תפעול ב-30%. - דוחות. מכירות לתקופה, עמלות, החזרים — פורמט טבלה עם ייצוא ל-Excel (PhpSpreadsheet או ייצוא Bitrix מובנה).
אנליטיקה
אנליטיקת מוכר בסיסית:
| מדד | מקור |
|---|---|
| הכנסות לתקופה | mp_sub_orders, GROUP BY date |
| מוצרים נמכרים ביותר | b_sale_basket JOIN mp_sub_orders |
| המרה לפי סטטוס | mp_sub_orders, GROUP BY status |
| דינמיקת דירוג | mp_vendor_ratings |
| החזרים (%) | mp_sub_orders WHERE status = 'refunded' |
הנתונים מוצגים דרך AJAX, תרשימים עם Chart.js. צבירות כבדות נשמרות במטמון (Redis) עם עדכון סוכן שעתי.
השוואת גישות לבידוד נתונים
| גישה | אמינות | מורכבות יישום | המלצה |
|---|---|---|---|
| גישת קבוצה בלבד | נמוכה (פגיעה ל-IDOR) | נמוכה | להימנע |
| סינון לפי UF_VENDOR_ID | גבוהה | בינונית | שיטה עיקרית |
| הפרדה מלאה ברמת מסד הנתונים | גבוהה מאוד | גבוהה | לפרויקטים גדולים |
שיטת UF_VENDOR_ID משלבת אמינות גבוהה ומורכבות מתונה, מוכחת על למעלה מ-50 פרויקטים.
פרופיל מוכר והגדרות
- עריכת נתונים משפטיים ופרטי בנק.
- העלאת מסמכים עם גרסאות (מסמכים חדשים עוברים לאימות חוזר).
- הגדרות התראות (דוא"ל, Telegram, תדירות דיג'סט).
- ניהול עובדים (חשבונות משנה עם זכויות מוגבלות).
- סטטיסטיקת אימות: אילו מסמכים התקבלו, אילו דורשים עדכון.
מה כלול בעבודה
- עיצוב ארכיטקטורת גישה ומסד נתונים (תיעוד).
- פיתוח כל מודולי הלוח עם בדיקות.
- אינטגרציה עם שערי תשלום ושירותי משלוח.
- הדרכה למנהלי פלטפורמה (סמינר מקוון של שעתיים).
- תמיכה טכנית למשך 3 חודשים.
- מסירת קוד מקור, מיגרציות והוראות.
לוח זמנים: 11 עד 17 שבועות. העלות מחושבת באופן אישי לאחר ביקורת על הפרויקט הנוכחי. בקש פיתוח — נערוך ביקורת ונציע את הפתרון האופטימלי. קבל ייעוץ על ארכיטקטורת השוק שלך.
יש לנו למעלה מ-50 יישומים ואנחנו מוסמכים "1C-Bitrix: Expert". אנו מבטיחים תמחור שקוף ומסירה בשלבים.

