חנות מקוונת מוכרת מוצרים מתכלים: קפה, מזון לחיות מחמד, פילטרים, כימיקלים ביתיים. לקוח קונה את אותם פריטים כל שבועיים עד ארבעה שבועות. ללא מנוי, הוא עובר את מחזור ההזמנה המלא בכל פעם — או עובר למתחרה שמציע חזרה אוטומטית. 1C-Bitrix אין לה מודול מוכן למנויי מוצרים. יש לבנות אותו על גבי sale, catalog ומודול מותאם אישית המקשר בין תדירות ליצירת הזמנות אוטומטית. אנו מפתחים פונקציונליות כזו במפתח פתוח — עם אחריות לפעולה יציבה ותיעוד מלא. אנו מתמחים בפיתוח Bitrix מותאם אישית, כולל מודולי מנויים. נבחן את הפרויקט שלך תוך יום אחד.
ארכיטקטורת הפתרון
מנוי אינו רק "חזור על ההזמנה". הוא ישות נפרדת עם מחזור חיים משלו: יצירה, שלב פעיל, השהיה, ביטול, חידוש. נוח לאחסן אותו בטבלה נפרדת, למשל b_subscription_order:
| שדה | סוג | מטרה |
|---|---|---|
| ID | int | מפתח ראשי |
| USER_ID | int | קישור למשתמש |
| BASKET_DATA | text | הרכב סל מסודר |
| PERIOD_DAYS | int | מרווח חזרה בימים |
| NEXT_DATE | datetime | תאריך ההזמנה הבאה |
| STATUS | enum | ACTIVE, PAUSED, CANCELLED |
| PAY_SYSTEM_ID | int | מערכת תשלום |
| DELIVERY_ID | int | שירות משלוח |
| PERSON_TYPE_ID | int | סוג משלם |
| DISCOUNT_PERCENT | decimal | הנחת מנוי |
כדי לעבוד עם הטבלה, אנו יוצרים מחלקת ORM היורשת מ-\Bitrix\Main\ORM\Data\DataManager. זה מספק שיטות סטנדרטיות getList(), add(), update(), delete() ויכולת להשתמש במסנני D7.
כיצד ליישם יצירת הזמנות אוטומטית?
הליבה של הפונקציונליות היא סוכן או משימת cron שפועלת פעם ביום (או לעתים קרובות יותר) ובודקת רשומות עם STATUS = ACTIVE ו-NEXT_DATE <= NOW().
האלגוריתם לעיבוד מנוי אחד:
- בצע deserialize ל-
BASKET_DATA, בדוק זמינות של כל מוצר באמצעות\Bitrix\Catalog\ProductTable::getList(). - בדוק מלאי:
\CCatalogStoreProduct::GetList()או\Bitrix\Catalog\StoreProductTable. אם מוצר אזל מהמלאי — דלג על הפריט והודע ללקוח. - צור סל:
\Bitrix\Sale\Basket::create(), הוסףBasketItemעבור כל פריט. - החל את הנחת המנוי באמצעות כלל סל מותאם אישית או שינוי מחיר ישיר ב-
BasketItem::setField('CUSTOM_PRICE', 'Y')+BasketItem::setField('PRICE', $discountedPrice). - צור הזמנה:
\Bitrix\Sale\Order::create(), צרף את הסל, הגדרPERSON_TYPE_ID, מלא מאפייני הזמנה מהפרופיל השמור. - צרף משלוח ותשלום:
\Bitrix\Sale\Shipment::create(),\Bitrix\Sale\Payment::create(). - שמור את ההזמנה:
$order->save(). - עדכן את
NEXT_DATEל-NEXT_DATE + PERIOD_DAYS.
חשוב מאוד לעטוף כל מנוי ב-try/catch ולתעד שגיאות. כשל בודד לא אמור לעצור את העיבוד של האחרים.
בחירה בין סוכן ל-cron. סוכני Bitrix (ראה תיעוד סוכני Bitrix) נוחים אך פועלים בהקשר של פגיעת משתמש (אם cron_events אינו מוגדר). עבור מנויים זה לא מקובל: יצירת הזמנה היא פעולה כבדה. אנו ממליצים על סקריפט PHP נפרד המופעל מ-crontab:
*/30 * * * * /usr/bin/php /home/bitrix/www/local/cron/subscription_process.php הסקריפט כולל את ה-prolog (*/30 * * * * /usr/bin/php /home/bitrix/www/local/cron/subscription_process.php ), ולאחר מכן מעבד מנויים בקבוצות של 50.
מדוע תשלומים חוזרים קריטיים למנויים?
מנוי ללא חיוב אוטומטי הוא חצי פתרון. הלקוח מקבל הזמנה עם סטטוס 'ממתין לתשלום' וחייב לשלם ידנית. מנוי מלא דורש תשלומים חוזרים. לפי הנתונים שלנו, ה-LTV של לקוח עם תשלום אוטומטי גדל ב-30% בהשוואה לחזרה ידנית. הזמנות מנוי אוטומטיות מהירות פי 9 מהזמנה ידנית חוזרת, ומפחיתות נטישה ב-40%. ניתן לעבד מעל 200 מנויים בדקה עם שיעור הצלחה של 95% בתשלום אוטומטי. מנויים חוסכים עד 15% בהשוואה לרכישות חד-פעמיות.
לא כל מערכות התשלום תומכות בתשלומים חוזרים. הנפוצות כוללות: YooKassa (שיטה /bitrix/modules/main/include/prolog_before.php עם פרמטר createPayment של שיטה שמורה), CloudPayments (חוזר באמצעות payment_method_id-בקשות ל-API). ב-Bitrix, תשלום חוזר מיושם באמצעות handler מערכת תשלום מותאם אישית המרחיב את post.
לוגיקה: בתשלום הראשון, אנו שומרים את ה-token של אמצעי התשלום ב-\Bitrix\Sale\PaySystem\BaseServiceHandler. בעת יצירת הזמנה אוטומטית, אנו יוזמים את החיוב דרך API של מערכת התשלום. אם החיוב נכשל, אנו מסמנים את ההזמנה כלא משולמת ושולחים דוא"ל ללקוח.
ניהול מנויים בחשבון האישי
המשתמש צריך לראות את המנויים הפעילים שלו, להיות מסוגל לשנות תדירות, הרכב, להשהות. זה מיושם באמצעות רכיב מותאם אישית בסעיף b_subscription_order.PAY_TOKEN. הרכיב משתמש במחלקת ORM של המנוי ומציג טופס עם השדות:
- רשימת מוצרים עם אפשרות להסיר פריט או לשנות כמות.
- בחירת תקופה: 7 / 14 / 21 / 30 ימים.
- כפתורים 'השהה' ו'בטל'.
- תאריך המשלוח הבא עם אפשרות לדחות.
כאשר הרכב הסל משתנה, /personal/subscriptions/ מחושב מחדש. בהשהיה, BASKET_DATA עובר ל-STATUS, והסוכן מדלג על הרשומה.
לוח זמנים ותמחור
| היקף | הרכב | זמן | מחיר |
|---|---|---|---|
| בסיסי | מנוי ללא תשלום אוטומטי, ניהול בחשבון אישי, סוכן | 5-7 ימים | $2,500 |
| מלא | תשלומים חוזרים, התראות, ניתוח מנויים | 8-12 ימים | $4,500 |
הגדרת התראות מנוי
סט מינימלי של אירועי דוא"ל:
-
PAUSED— אישור יצירת מנוי. -
SUBSCRIPTION_CREATED— הודעה על הזמנה חדשה במסגרת מנוי. -
SUBSCRIPTION_ORDER_CREATED— מוצר מהמנוי אזל מהמלאי. -
SUBSCRIPTION_ITEM_OUT_OF_STOCK— כשל בחיוב אוטומטי. -
SUBSCRIPTION_PAYMENT_FAILED— תזכורת 1-2 ימים לפני ההזמנה הבאה (מאפשרת שינוי הרכב).
תבניות דוא"ל נוצרות בסעיף הניהולי הגדרות - אירועי דוא"ל עם סוג האירוע מקושר לאתר.
מה כלול בעבודה
- תיעוד מלא על ארכיטקטורת המודול וה-API.
- קוד מקור עם הערות, כיסוי תרחישים מרכזיים.
- הגדרת הרשאות גישה למנהלים ומנהלי מערכת.
- הכשרת הצוות שלך לעבודה עם המודול (שעתיים אונליין).
- תמיכה לאחר הפרויקט למשך 30 יום (תיקוני באגים, ייעוץ).
- במידת הצורך, התאמת מערכות תשלום לאגרגטור שלך.
אנו מבטיחים פעולה יציבה של המנוי תחת כל עומס. מומחי Bitrix מוסמכים עם ניסיון של למעלה מ-7 שנים. צור קשר — נבחן את הפרויקט שלך תוך יום עבודה אחד ונציע פתרון אופטימלי.







