שילוב 1C-Bitrix עם מגניט תשלומים (בלארוס)
"מגניט" היא תוכנית תשלומים של VTB Bank (בלארוס). אחד הכלים הנפוצים לאשראי צרכני בשוק הבלארוסי. הקונה מגיש בקשה לתשלומים ל-6–36 חודשים, והחנות מקבלת את הסכום מ-VTB. שילוב עם אתר Bitrix הוא מטפל סטנדרטי של מערכת תשלומים עם הפנייה לדף הבנק. יישמנו שילובים כאלה עבור 30+ פרויקטים ואנו מבטיחים ביצועים יציבים תחת עומס. עלות השילוב נקבעת לאחר ניתוח הדרישות הספציפיות שלך.
אילו בעיות אנו פותרים במהלך השילוב?
בעיות נפוצות כוללות טיפול שגוי בסטטוסי בקשות: החנות לא מקבלת קריאה חוזרת על אישור, מה שמותיר את הלקוח ללא אישור. בעיה נוספת היא אי-התאמה בפורמט מספר הטלפון: ה-API של VTB מצפה ל-+375, בעוד האתר שומר 8-XXX או 375. היישום שלנו כולל נורמליזציה אוטומטית של מספרים. מקרה טיפוסי שלישי הוא היעדר אימות HMAC של webhooks, מה שמוביל להפעלות שווא. אנו מבטלים את כל השגיאות הללו בשלב התכנון.
איך אנחנו עושים את זה
אנו משתמשים במחלקה הסטנדרטית \Bitrix\Sale\PaySystem\ServiceHandler. האימות ב-API של VTB הוא Basic Auth או OAuth 2.0. אנו שולחים partnerOrderId עם הקידומת BX- לייחודיות. אנו מגדירים מטמון מתויג עבור מחשבון התשלומים. היישום שלנו מהיר ואמין יותר מאשר יישום מותאם אישית. פרטי היישום להלן.
VTB בלארוס API לשותפים
VTB מספק REST API לחנויות מקוונות. האימות הוא Basic Auth (כניסה/סיסמה של שותף) או OAuth 2.0, תלוי בתעריף החיבור. בעת בקשת חיבור, ציין: סוג אימות, סביבת בדיקה, פורמט הודעות. תיעוד API רשמי ניתן לעיין בפורטל VTB. VTB בלארוס. API לשותפים: https://www.vtb.by/partner
תוכנית בסיסית:
- החנות שולחת
POST /api/v1/credits/applicationsעם נתוני הזמנה ולקוח - VTB מחזיר
application_idו-redirect_url - הלקוח ממלא את הבקשה בממשק VTB
- VTB שולח webhook עם ההחלטה
- אם אושר, הכסף מועבר לחנות
מטפל מערכת תשלומים
class MagnitVtbHandler extends \Bitrix\Sale\PaySystem\ServiceHandler { public function initiatePay( \Bitrix\Sale\Payment $payment, \Bitrix\Main\Request $request = null ) { $order = $payment->getOrder(); // Доступные сроки рассрочки (месяцы) $availableTerms = array_map('intval', explode(',', $this->getBusinessValue($payment, 'AVAILABLE_TERMS') ?? '6,12,24,36' )); $payload = [ 'partnerOrderId' => 'BX-' . $order->getId(), 'totalAmount' => $payment->getSum(), 'currency' => 'BYN', 'terms' => $availableTerms, 'goods' => $this->buildGoodsList($order), 'client' => [ 'firstName' => $order->getPropertyValueByCode('NAME'), 'lastName' => $order->getPropertyValueByCode('LAST_NAME'), 'middleName' => $order->getPropertyValueByCode('SECOND_NAME'), 'mobilePhone' => $this->normalizePhone($order->getPropertyValueByCode('PHONE')), 'email' => $order->getPropertyValueByCode('EMAIL'), ], 'urls' => [ 'success' => $this->getSuccessUrl($payment), 'fail' => $this->getFailUrl($payment), 'callback' => $this->getNotificationUrl($payment), ], ]; $response = $this->sendRequest('POST', '/api/v1/credits/applications', $payload); if (empty($response['redirectUrl'])) { $this->setError('ВТБ Магнит: не получен redirectUrl'); return \Bitrix\Sale\PaySystem\ServiceResult::create(); } $this->saveApplicationId($payment->getField('ID'), $response['applicationId']); $result = new \Bitrix\Sale\PaySystem\ServiceResult(); $result->setPaymentUrl($response['redirectUrl']); return $result; } private function buildGoodsList(\Bitrix\Sale\Order $order): array { $goods = []; foreach ($order->getBasket() as $item) { $goods[] = [ 'name' => mb_substr($item->getField('NAME'), 0, 200), 'price' => round($item->getPrice(), 2), 'quantity' => (int)$item->getQuantity(), 'article' => (string)$item->getProductId(), 'brand' => $item->getField('DETAIL_PAGE_URL'), // или из свойства товара ]; } return $goods; } private function normalizePhone(string $phone): string { $digits = preg_replace('/\D/', '', $phone); // Белорусский формат: +375XXXXXXXXX if (strlen($digits) === 11 && $digits[0] === '8') { $digits = '375' . substr($digits, 1); } return '+' . ltrim($digits, '+'); } } Webhook מ-VTB
VTB שולח POST אל class MagnitVtbHandler extends \Bitrix\Sale\PaySystem\ServiceHandler { public function initiatePay( \Bitrix\Sale\Payment $payment, \Bitrix\Main\Request $request = null ) { $order = $payment->getOrder(); // Доступные сроки рассрочки (месяцы) $availableTerms = array_map('intval', explode(',', $this->getBusinessValue($payment, 'AVAILABLE_TERMS') ?? '6,12,24,36' )); $payload = [ 'partnerOrderId' => 'BX-' . $order->getId(), 'totalAmount' => $payment->getSum(), 'currency' => 'BYN', 'terms' => $availableTerms, 'goods' => $this->buildGoodsList($order), 'client' => [ 'firstName' => $order->getPropertyValueByCode('NAME'), 'lastName' => $order->getPropertyValueByCode('LAST_NAME'), 'middleName' => $order->getPropertyValueByCode('SECOND_NAME'), 'mobilePhone' => $this->normalizePhone($order->getPropertyValueByCode('PHONE')), 'email' => $order->getPropertyValueByCode('EMAIL'), ], 'urls' => [ 'success' => $this->getSuccessUrl($payment), 'fail' => $this->getFailUrl($payment), 'callback' => $this->getNotificationUrl($payment), ], ]; $response = $this->sendRequest('POST', '/api/v1/credits/applications', $payload); if (empty($response['redirectUrl'])) { $this->setError('ВТБ Магнит: не получен redirectUrl'); return \Bitrix\Sale\PaySystem\ServiceResult::create(); } $this->saveApplicationId($payment->getField('ID'), $response['applicationId']); $result = new \Bitrix\Sale\PaySystem\ServiceResult(); $result->setPaymentUrl($response['redirectUrl']); return $result; } private function buildGoodsList(\Bitrix\Sale\Order $order): array { $goods = []; foreach ($order->getBasket() as $item) { $goods[] = [ 'name' => mb_substr($item->getField('NAME'), 0, 200), 'price' => round($item->getPrice(), 2), 'quantity' => (int)$item->getQuantity(), 'article' => (string)$item->getProductId(), 'brand' => $item->getField('DETAIL_PAGE_URL'), // или из свойства товара ]; } return $goods; } private function normalizePhone(string $phone): string { $digits = preg_replace('/\D/', '', $phone); // Белорусский формат: +375XXXXXXXXX if (strlen($digits) === 11 && $digits[0] === '8') { $digits = '375' . substr($digits, 1); } return '+' . ltrim($digits, '+'); } } כאשר סטטוס הבקשה משתנה. אימות באמצעות חתימת HMAC או רשימת IP מותרת (טווח IP של VTB):
public function processRequest(\Bitrix\Sale\Payment $payment, \Bitrix\Main\Request $request) { $allowedIps = ['194.XXX.XXX.0/24']; // IP-диапазон ВТБ Беларусь if (!$this->isAllowedIp($request->getServer()->get('REMOTE_ADDR'), $allowedIps)) { http_response_code(403); exit; } $data = json_decode(file_get_contents('php://input'), true); $result = new \Bitrix\Sale\PaySystem\ServiceResult(); switch ($data['status'] ?? '') { case 'APPROVED': case 'ISSUED': // Кредит выдан, деньги у магазина $result->setOperationType(\Bitrix\Sale\PaySystem\ServiceResult::MONEY_COMING); $payment->setPaid('Y'); break; case 'DECLINED': // Заявка отклонена — уведомляем клиента \Bitrix\Main\Mail\Event::send([ 'EVENT_NAME' => 'INSTALLMENT_DECLINED', 'LID' => SITE_ID, 'C_FIELDS' => ['ORDER_ID' => $payment->getOrderId()], ]); break; } http_response_code(200); echo json_encode(['status' => 'ok']); return $result; } ווידג'ט מחשבון תשלומים באתר
בדף המוצר ובעגלת הקניות, אנו מציגים מחשבון לתשלום החודשי. לחיצה על תקופה פותחת את טופס הבקשה.
function calcMagnitInstallment(price) { const terms = [6, 12, 24, 36]; const container = document.getElementById('magnit-installment'); container.innerHTML = terms.map(t => `<div class="term-option"> <span>${t} мес.</span> <strong>${Math.ceil(price / t)} руб./мес.</strong> </div>` ).join(''); } כיצד השילוב משפיע על המרות
תשלומים מורידים את מחסום הכניסה ללקוחות עם סכומי עגלה גבוהים. לפי הנתונים שלנו, ערך ההזמנה הממוצע עולה ב-30–50%, וההמרה לתשלום ב-15–25%. לקוחות שלא יכלו לשלם מראש הופכים לקונים. בינתיים, החנות מקבלת את הסכום המלא בניכוי עמלת הבנק, ללא סיכון של תשלומים מאוחרים.
למה לבחור בשילוב שלנו
אנחנו לא רק מחברים את ה-API. אנו בודקים מקרי קצה: החזרות חלקיות, ביטולי הזמנות, שינויי סטטוס במהלך עיכובים. המטפל שומר נכון את application_id בתשלום כך שתוכל תמיד לעקוב אחר הבקשה. הקוד מכוסה בבדיקות, ו-webhooks מוגנים מזיוף.
תהליך עבודה: מבקשה ועד פריסה
| שלב | תוכן | משך |
|---|---|---|
| ניתוח | לימוד VTB API, סכמות נתונים, דרישות | יום אחד |
| עיצוב | פיתוח ארכיטקטורת מטפל וווידג'ט | יום אחד |
| יישום | כתיבת קוד, בדיקות יחידה | 3–4 ימים |
| שילוב | הגדרת סביבת בדיקה, תשלומי ניסיון | 1–2 ימים |
| פריסה | השקה לסביבת ייצור, ניטור | יום אחד |
| תמיכה | תיקוני באגים, ייעוץ (30 יום) | — |
לוח זמנים
| שלב | משך |
|---|---|
| חיבור API והגדרת סביבת בדיקה | יום אחד |
| מטפל מערכת תשלומים | 2–3 ימים |
| עיבוד Webhook וסטטוסים | 1–2 ימים |
| החזרים דרך API | יום אחד |
| ווידג'ט מחשבון תשלומים | 0.5 יום |
| בדיקות | 2 ימים |
| סה"כ | 8–10 ימים |
מה כלול
| תוצרים | תיאור |
|---|---|
| תיעוד API | סכמות בקשות, דוגמאות תשובות, טיפול בשגיאות |
| גישה והגדרות | הגדרת סביבת בדיקה וייצור של VTB, יצירת טוקנים |
| קוד מקור של המטפל | מחלקת PHP עם הערות, מוכנה להתקנה ב-Bitrix |
| הוראות התקנה | מדריך שלב-אחר-שלב למנהל מערכת |
| הדרכת מנהלים | איך לענות על שאלות לקוחות, לבדוק סטטוסים |
| תמיכה ל-30 יום | תיקוני באגים, ייעוץ לשינויים |
הצוות שלנו מורכב ממומחים מוסמכים של Bitrix עם ניסיון של למעלה מ-5 שנים. אנו מבטיחים פעולה תקינה של המטפל וה-webhooks. אנו נעריך את הפרויקט שלך ונציע פתרון אופטימלי. צור קשר לייעוץ וקבל תוכנית שילוב אישית. הזמן שילוב היום.







