פיתוח פונקציונליות אשראי על 1C-Bitrix
אשראי מובנה למוצרים יקרים
או, גרוע מכך, הם עוקבים אחרי פרסומת לאתר הבנק והולכים לאיבוד בין טפסים. אנחנו פותרים את הבעיה הזו: אנו מטמיעים אשראי ישירות בחנות המקוונת שלך על 1C-Bitrix. הלקוח ממלא רק 2 שדות, מקבל החלטה תוך דקה, ומשלים את הרכישה ללא הפניות חיצוניות. טכנית, מדובר באינטגרציה עם REST APIs של הבנק, התאמה אישית של תהליך התשלום, וטיפול ב-webhooks ובסטטוסי הזמנות. אין מודול אשראי מובנה בליבת Bitrix – היישום בנוי על גבי sale ואינו משפיע על עדכוני המערכת. עלות הפיתוח מתחילה מ-$1,500 עבור אינטגרציה עם בנק אחד.
לפי מחקרי שוק, 65% מהלקוחות מעדיפים אשראי מובנה, ואשראי מובנה טוב פי 2.5 מהפניות לבנק מבחינת המרה. הטמעת אשראי מגדילה את הסל הממוצע ב-30% ומפחיתה את שיעור נטישת העגלה למוצרים במחיר גבוה ב-40%.
איך עובדת אינטגרציית האשראי?
הקוד שלנו מהיר פי 3 לפריסה מאשר פיתוח פנימי, הודות לתבניות מוכנות מראש ו-PSR-4 autoloading. האינטגרציה משתמשת במפתחות idempotency למניעת בקשות כפולות וב-OAuth 2.0 client credentials grant לתקשורת בנקאית מאובטחת.
אילו בנקים ניתן לשלב?
שותפי אשראי עיקריים לשוק הרוסי:
| בנק / שירות | סוג API | וידג'ט | תשלומים חוזרים |
|---|---|---|---|
| Tinkoff Credit | REST + SDK | כן | לא |
| Sberbank Online | REST + iframe | כן | לא |
| Почта Банк / Eastern Bank | REST | לא | לא |
| MTS Bank | REST + JS SDK | כן | לא |
לכל בנק יש סביבת sandbox ודורש הסכם סליקה נפרד. טכנית, האינטגרציות דומות: שליחת עגלה → קבלת application_id → הטמעת וידג'ט → המתנה ל-webhook. שילבנו מעל 50 פרויקטים במספר בנקים.
איך האינטגרציה מתוכננת?
איך להוסיף כפתור 'קנה באשראי'?
נוסף על ידי עקיפת תבנית הרכיב catalog.element ב-/local/templates/. אנחנו לא נוגעים בליבה – רק בתבנית וב-JS handler.
מחלקת wrapper ל-API של הבנק:
namespace Local\Credit; class TinkoffCreditClient { private string $shopId; private string $secretKey; private string $baseUrl = 'https://api.tinkoff.ru/v1/credit/'; public function createApplication(array $order): array { $payload = [ 'shopId' => $this->shopId, 'orderNumber' => $order['ID'], 'sum' => $order['PRICE'], 'items' => $this->buildItems($order['BASKET']), 'customer' => [ 'email' => $order['USER_EMAIL'], 'phone' => $order['USER_PHONE'], ], ]; $response = $this->post('create', $payload); return $response; // ['applicationId' => '...', 'redirectUrl' => '...'] } private function buildItems(array $basket): array { return array_map(fn($item) => [ 'name' => $item['NAME'], 'quantity' => (int)$item['QUANTITY'], 'price' => (float)$item['PRICE'], 'sku' => $item['PRODUCT_ID'], ], $basket); } } יצירת הזמנה וקישור בקשת האשראי
תהליך סטנדרטי: הקונה בוחר אשראי → אנו יוצרים הזמנת "רזרבה" בסטטוס namespace Local\Credit; class TinkoffCreditClient { private string $shopId; private string $secretKey; private string $baseUrl = 'https://api.tinkoff.ru/v1/credit/'; public function createApplication(array $order): array { $payload = [ 'shopId' => $this->shopId, 'orderNumber' => $order['ID'], 'sum' => $order['PRICE'], 'items' => $this->buildItems($order['BASKET']), 'customer' => [ 'email' => $order['USER_EMAIL'], 'phone' => $order['USER_PHONE'], ], ]; $response = $this->post('create', $payload); return $response; // ['applicationId' => '...', 'redirectUrl' => '...'] } private function buildItems(array $basket): array { return array_map(fn($item) => [ 'name' => $item['NAME'], 'quantity' => (int)$item['QUANTITY'], 'price' => (float)$item['PRICE'], 'sku' => $item['PRODUCT_ID'], ], $basket); } } , מקבלים CREDIT_PENDING מהבנק, ושומרים אותו במאפיין הזמנה.
// Создать заказ в статусе ожидания кредита $order = \Bitrix\Sale\Order::create(SITE_ID, $userId); $order->setPersonTypeId($personTypeId); // ... заполнить корзину, адрес ... // Добавить кастомное свойство заказа $propCollection = $order->getPropertyCollection(); $propCreditId = $propCollection->getItemByOrderPropertyCode('CREDIT_APPLICATION_ID'); $propCreditId->setValue($applicationId); $order->setField('STATUS_ID', 'CR'); // Кастомный статус «На рассмотрении кредита» $order->save(); המאפיין applicationId נוצר מראש ב-// Создать заказ в статусе ожидания кредита $order = \Bitrix\Sale\Order::create(SITE_ID, $userId); $order->setPersonTypeId($personTypeId); // ... заполнить корзину, адрес ... // Добавить кастомное свойство заказа $propCollection = $order->getPropertyCollection(); $propCreditId = $propCollection->getItemByOrderPropertyCode('CREDIT_APPLICATION_ID'); $propCreditId->setValue($applicationId); $order->setField('STATUS_ID', 'CR'); // Кастомный статус «На рассмотрении кредита» $order->save(); (סוג – מחרוזת, קוד – CREDIT_APPLICATION_ID). בטבלת Магазин → Настройки → Свойства заказа, מופיע רשומה המקושרת להזמנה.
Webhook: טיפול בהחלטת הבנק
הבנק שולח POST ל-endpoint CREDIT_APPLICATION_ID (או נתיב Laravel אם נעשה בו שימוש). חשוב לוודא את חתימת הבקשה:
// /local/ajax/credit_webhook.php \Bitrix\Main\Loader::includeModule('sale'); $body = file_get_contents('php://input'); $payload = json_decode($body, true); $sign = $_SERVER['HTTP_X_TINKOFF_SIGN'] ?? ''; // Проверка HMAC-SHA256 $expected = hash_hmac('sha256', $body, TINKOFF_SECRET_KEY); if (!hash_equals($expected, $sign)) { http_response_code(403); exit; } $applicationId = $payload['applicationId']; $status = $payload['status']; // APPROVED, REJECTED, SIGNED, CANCELLED // Найти заказ по applicationId $orderProps = \Bitrix\Sale\Internals\OrderPropsValueTable::getList([ 'filter' => ['CODE' => 'CREDIT_APPLICATION_ID', 'VALUE' => $applicationId], 'select' => ['ORDER_ID'], ])->fetch(); if ($orderProps) { $order = \Bitrix\Sale\Order::load($orderProps['ORDER_ID']); match ($status) { 'APPROVED', 'SIGNED' => $order->setField('STATUS_ID', 'N'), // Новый 'REJECTED' => $order->setField('STATUS_ID', 'CN'), // Отменён default => null, }; $order->save(); } http_response_code(200); echo json_encode(['ok' => true]); חשבון אישי: סטטוס אשראי
עמוד b_sale_order_props_value – רשימת בקשות אשראי שהונפקו עם סטטוס נוכחי. הנתונים נלקחים ממאפייני הזמנה המסוננים לפי /local/ajax/credit_webhook.php ו-// /local/ajax/credit_webhook.php \Bitrix\Main\Loader::includeModule('sale'); $body = file_get_contents('php://input'); $payload = json_decode($body, true); $sign = $_SERVER['HTTP_X_TINKOFF_SIGN'] ?? ''; // Проверка HMAC-SHA256 $expected = hash_hmac('sha256', $body, TINKOFF_SECRET_KEY); if (!hash_equals($expected, $sign)) { http_response_code(403); exit; } $applicationId = $payload['applicationId']; $status = $payload['status']; // APPROVED, REJECTED, SIGNED, CANCELLED // Найти заказ по applicationId $orderProps = \Bitrix\Sale\Internals\OrderPropsValueTable::getList([ 'filter' => ['CODE' => 'CREDIT_APPLICATION_ID', 'VALUE' => $applicationId], 'select' => ['ORDER_ID'], ])->fetch(); if ($orderProps) { $order = \Bitrix\Sale\Order::load($orderProps['ORDER_ID']); match ($status) { 'APPROVED', 'SIGNED' => $order->setField('STATUS_ID', 'N'), // Новый 'REJECTED' => $order->setField('STATUS_ID', 'CN'), // Отменён default => null, }; $order->save(); } http_response_code(200); echo json_encode(['ok' => true]); . במידת הצורך, כפתור "בדוק סטטוס" שולח שאילתה ל-API של הבנק.
הגברת המרה עם אשראי
סטטיסטיקות מראות: אשראי מובנה טוב פי 2.5 מהפניות לבנק מבחינת המרה. המשתמש נשאר במשפך שלך, לא מוסח על ידי הרשמה בממשק אחר. יתר על כן, אתה שולט במראה ובתחושה – מהכפתור ועד לחשבון האישי. סוחרים מדווחים על הפחתה של 40% בנטישת עגלה למוצרים במחיר גבוה.
דרישות הבנק המרכזי והיבטים משפטיים
לפי החוק "על אשראי צרכני" (353-FZ), בעמוד המוצר יש להציג:
- עלות אשראי כוללת (TCC) בדולרים ושיעור ריבית שנתית.
- סכום ההיוון.
- מספר וסכום התשלומים.
הבנק מחזיר נתונים אלה בתשובה ליצירת הבקשה או בשיטת API נפרדת /personal/credit/. יש להציגם לפני שהמשתמש לוחץ על "הגש בקשה לאשראי".
$terms = $creditClient->getTerms($productPrice); // Вернёт: ['monthly_payment' => 2500, 'rate' => 12.9, 'psk' => 15.4, 'total' => 30000] תבנית בלוק:
Кредит на 12 месяцев: ├── Ежемесячный платёж: $22–32 ├── Ставка: 12,9% годовых ├── Переплата: $40–58 └── ПСК: 15,4% годовых טעויות נפוצות ופתרונות
- חוסר אימות חתימת webhook – פרצת אבטחה. תמיד בדוק HMAC.
- טיפול שגוי בביטול הזמנה לפני חתימה. קרא ל-API של הבנק
CODE = 'CREDIT_APPLICATION_ID'. - חוסר TCC בעמוד המוצר מוביל לקנסות לפי 353-FZ. הצג את כל השדות החובה.
- אין אסטרטגיה למספר בנקים. אנו מיישמים את תבנית Strategy:
USER_IDעם מתודות/v1/credit/terms,$terms = $creditClient->getTerms($productPrice); // Вернёт: ['monthly_payment' => 2500, 'rate' => 12.9, 'psk' => 15.4, 'total' => 30000],Кредит на 12 месяцев: ├── Ежемесячный платёж: $22–32 ├── Ставка: 12,9% годовых ├── Переплата: $40–58 └── ПСК: 15,4% годовых,/v1/credit/cancel.
איך לבדוק את האינטגרציה?
השתמש בסביבות sandbox של הבנק. עבור Tinkoff – test shopId ו-secretKey. צור הזמנה, בדוק webhook עם סטטוסים שונים. ודא שסטטוסי ההזמנה משתנים כראוי. בדוק ביטול והחזר כספי.
תהליך ולוח זמנים לפיתוח
מה כלול בפיתוח
- ביקורת על מערכת התשלומים והעגלה הנוכחית.
- בחירת בנק שותף, קבלת shopId, secretKey.
- פיתוח מחלקת wrapper ל-API (בנק אחד או כמה).
- אינטגרציה של הווידג'ט לכרטיס המוצר ולתשלום.
- יצירת endpoint ל-webhook עם אימות חתימה.
- שיפור החשבון האישי: היסטוריית בקשות אשראי, סטטוסים.
- טיפול בהחזרים כספיים וביטולים.
- בדיקות בסביבת sandbox ובסביבת ייצור.
- תיעוד והדרכה למנהלים שלך.
- תמיכה באחריות ל-30 יום.
לוח זמנים ועלות פיתוח
| אפשרות | היקף | זמן | עלות (החל מ-) |
|---|---|---|---|
| בנק אחד, תהליך בסיסי | כפתור + וידג'ט + webhook, סטטוס הזמנה | 4–7 ימים | $1,500 |
| תהליך מלא עם החזרים | Webhook, ביטולים, החזרים, חשבון לקוח | 8–12 ימים | $3,500 |
| מספר בנקים | ארכיטקטורת Strategy, תצורה | 12–18 ימים | $6,000 |
הצוות שלנו מורכב ממומחי 1C-Bitrix מוסמכים עם ניסיון של 10+ שנים. השלמנו מעל 50 פרויקטים של שילוב מערכות תשלום ואשראי. אנו מבטיחים שהקוד לא ישבר בעדכוני Bitrix – כל השינויים נמצאים ב-CreditProviderInterface. צור קשר לקבלת הערכת פרויקט תוך יום עסקים אחד. כל מה שאנחנו צריכים זה גישה לפאנל הניהול וידיעה עם איזה בנק אתה רוצה לעבוד. קבל ייעוץ לפרויקט שלך היום.







