פיתוח תשלומים בתשלומים על 1C-Bitrix: מווידג'ט בנקאי למודול מותאם אישית
לקוחות נוטשים יותר ויותר רכישות אם אין אפשרות לתשלומים. הכלים הסטנדרטיים של ביטריקס אינם מספקים פונקציונליות זו — יש צורך לפתח מודול מותאם אישית או לשלב ווידג'ט בנקאי. אנו מציעים שתי אפשרויות: מהטמעה מהירה של Tinkoff או Halva ועד למערכת מלאה עם לוח זמנים גמיש ובקרת איחורים. במאמר זה — ארכיטקטורה, קוד טיפוסי והמלצות מעשיות למפתח.
נקודות כאב טיפוסיות בפיתוח: עיגול שגוי של תשלומים, חוסר סנכרון עם 1C דרך CommerceML, איחורים ללא התראות. אנו מטפלים בכל אחת מהן עם פתרונות מוכחים. לדוגמה, עיגול מתוקן על ידי העברת אגורות לתשלום האחרון — מתמטיקה מדויקת ללא הפסדים. לאחר יישום תשלומים, שיעור ההמרה לרכישה עולה ב-15-25%, וערך ההזמנה הממוצע עולה ב-30%. הפתרונות שלנו נבדקו תחת עומס על קטלוגים של עד 200,000 מוצרים — המערכת פועלת ביציבות בעומסי שיא.
כיצד לפתח פונקציונליות תשלומים על 1C-Bitrix?
נשווה בין שתי גישות. ווידג'ט בנקאי (3-5 ימים) מתאים להתחלה מהירה ואינו דורש חשבונאות מורכבת. מערכת תשלומים מותאמת אישית (8-12 ימים) מיועדת לחנויות עם מחזור של 10 מיליון רובל לחודש או יותר, שבהן עמלות הבנק (לעיתים קרובות 5-7%) הופכות למשמעותיות. מערכת מותאמת אישית מחזירה את עצמה תוך 2-3 חודשים בזכות אפס עמלות. החיסכון בעמלות יכול להגיע ל-7% מהמחזור — עבור מחזור של 10 מיליון רובל, מדובר במאות אלפים בשנה.
כיצד לשלב תשלומים בנקאיים?
נשקול אינטגרציה עם Tinkoff Installment (שירות Dolyami). הבנק מספק ווידג'ט JavaScript המוטמע בכרטיס המוצר. לאחר התשלום, הבנק שולח webhook עם התוצאה.
דוגמת קוד לטיפול ב-webhook ב-PHP:
$input = json_decode(file_get_contents('php://input'), true); if ($input['status'] === 'approved') { $orderId = (int)$input['orderReference']; $loanId = (int)$input['loanId']; \Bitrix\Sale\Order::load($orderId)->setField('STATUS_ID', 'PAID')->save(); } תהליך האינטגרציה כולל:
- הצבת הכפתור על כרטיס המוצר באמצעות ווידג'ט JavaScript.
- לאחר תגובה מוצלחת מהבנק, יצירת הזמנה דרך
$input = json_decode(file_get_contents('php://input'), true); if ($input['status'] === 'approved') { $orderId = (int)$input['orderReference']; $loanId = (int)$input['loanId']; \Bitrix\Sale\Order::load($orderId)->setField('STATUS_ID', 'PAID')->save(); }, צירוף מערכת התשלום ושמירת\Bitrix\Sale\Order::create()מהבנק במאפיין ההזמנה. - הגדרת עיבוד ה-webhook מהבנק לעדכון סטטוס ההזמנה.
מהי מערכת תשלומים מותאמת אישית וכיצד ליישם אותה?
מערכת תשלומים מותאמת אישית אינה דורשת בנק — החנות עצמה מפצלת את הסכום לחלקים. יש צורך בשתי טבלאות לאחסון נתונים.
טבלה loan_id:
| שדה | תיאור |
|---|---|
| ID | מפתח ראשי |
| ORDER_ID | קישור להזמנת ביטריקס |
| USER_ID | לקוח |
| TOTAL_AMOUNT | סכום מלא |
| DOWN_PAYMENT | תשלום ראשון |
| INSTALLMENTS_COUNT | מספר חלקים |
| INSTALLMENT_AMOUNT | סכום לכל חלק |
| CURRENCY | מטבע |
| STATUS | ACTIVE, COMPLETED, OVERDUE, CANCELLED |
טבלה b_local_installment_plan — לוח תשלומים:
| שדה | תיאור |
|---|---|
| PLAN_ID | קישור לתוכנית |
| PAYMENT_NUMBER | מספר תשלום (1, 2, 3...) |
| DUE_DATE | תאריך יעד לתשלום |
| AMOUNT | סכום |
| STATUS | PENDING, PAID, OVERDUE |
| PAID_AT | תאריך תשלום בפועל |
כיצד לחשב את לוח התשלומים?
function createInstallmentSchedule(int $planId, float $totalAmount, float $downPayment, int $installmentsCount): void { $remainingAmount = $totalAmount - $downPayment; $installmentAmount = round($remainingAmount / $installmentsCount, 2); // Корректировка округления на последний платёж $lastPaymentAmount = $remainingAmount - ($installmentAmount * ($installmentsCount - 1)); for ($i = 1; $i <= $installmentsCount; $i++) { $dueDate = (new DateTime())->modify('+' . ($i * 30) . ' days'); InstallmentPaymentTable::add([ 'PLAN_ID' => $planId, 'PAYMENT_NUMBER' => $i, 'DUE_DATE' => $dueDate, 'AMOUNT' => ($i === $installmentsCount) ? $lastPaymentAmount : $installmentAmount, 'STATUS' => 'PENDING', ]); } } הצגה בכרטיס המוצר ובעגלת הקניות
בדף המוצר, אנו מציגים בלוק עם תנאים:
Стоимость: $270–390. Рассрочка на 6 месяцев: ├── Первый взнос: $45–65. (сегодня) └── 5 платежей по $45–65. каждые 30 дней חישוב דינמי בעת בחירת מספר החודשים — דרך AJAX. נקודת הקצה מחשבת את התשלום הראשוני (20%) ואת סכום התשלום החודשי, ומחזירה JSON.
בקרת תשלומים ואיחורים
סוכן או cron בודקים תשלומים באיחור מדי יום:
$overdue = InstallmentPaymentTable::getList([ 'filter' => ['STATUS' => 'PENDING', '<DUE_DATE' => new DateTime()], ])->fetchAll(); foreach ($overdue as $payment) { InstallmentPaymentTable::update($payment['ID'], ['STATUS' => 'OVERDUE']); // Уведомить клиента sendOverdueNotification($payment); // Если просрочка > 30 дней — эскалация менеджеру } חשבון אישי של הלקוח
הדף b_local_installment_payment מציג:
- תוכניות תשלומים פעילות עם התקדמות התשלומים.
- לוח זמנים של תשלומים עתידיים.
- היסטוריית תשלומים ששולמו.
- קישור לתשלום התשלום הקרוב.
מה כלול בעבודה (תוצרים)
- מפרט טכני ותיעוד ארכיטקטוני.
- קוד מקור של המודול עם הערות.
- מדריך תפעול למנהל מערכת.
- הדרכת מנהלים בניהול תשלומים (30 דקות).
- שבועיים של תמיכה טכנית לאחר ההשקה.
- בדיקת עומס על הקטלוג שלך.
לוח זמנים לפיתוח
| אפשרות | הרכב | לוח זמנים |
|---|---|---|
| אינטגרציית ווידג'ט בנקאי | Tinkoff או Halva, כפתור + webhook | 3-5 ימים |
| תשלומים מותאמים אישית | אחסון, לוח זמנים, חשבון אישי, התראות | 8-12 ימים |
| מערכת מלאה | בנק + מותאם אישית + אנליטיקת איחורים | 12-16 ימים |
יתרונות העבודה איתנו
אנחנו שותפים מוסמכים של 1C-Bitrix עם ניסיון רב. הפתרונות שלנו נבדקו תחת עומס על קטלוגים של עד 200,000 מוצרים. זמן אינטגרציה ממוצע — 4 ימים. שיעור ההמרה לרכישה עולה ב-15-25% לאחר התקנת תשלומים. ווידג'ט בנקאי מהיר פי 3 ליישום, אך מערכת מותאמת אישית מספקת שליטה מלאה על הכספים.
לפי תיעוד CommerceML, זהו התקן להחלפת נתונים עם 1C. המודולים שלנו מסנכרנים נכון תשלומים וסטטוסי תשלומים דרך פרוטוקול זה.
בקשו ייעוץ בנושא יישום תשלומים עוד היום. כתבו לנו — נבחן את הפרויקט שלכם תוך יום עסקים אחד. השלמנו מעל 50 פרויקטי תשלומים, וזמן האינטגרציה הממוצע הוא 4 ימים. צרו קשר כדי לדון בפרויקט שלכם.







