אחרי מאות אינטגרציות של רכישת כרטיסים לחנויות על 1C-Bitrix, שמנו לב לדפוס: בעלים חוזרים אחרי חצי שנה עם בקשה ל-SBP. הסיבה ברורה — עמלה של 0.4–0.7% לעומת 2% בממוצע לכרטיסים. SBP זול פי 3–5 מכרטיסים — עבור חנות עם מחזור של $9k–13k בחודש, החיסכון מגיע עד $160–230. וזה עוד לפני שמדברים על כך שהכסף מגיע תוך שניות, לא ביום הבא. היישום הטכני פשוט יותר ממה שנדמה: הכנו אינטגרציה עם שני ספקים פופולריים — Tinkoff ו-YooKassa. שניהם מספקים APIs פשוטים והטמעה מהירה. זמן חיבור ממוצע הוא 1-2 ימים.
מה זה SBP ואיך זה עובד
SBP היא מערכת תשלומים מיידית בין-בנקאית של הבנק המרכזי של רוסיה, שהושקה ב-2019. זהו העברה ישירה בין חשבון הקונה לחשבון המוכר ללא מערכות תשלום מתווכות. הקונה סורק קוד QR או לוחץ על קישור — התשלום עובר ללא הזנת פרטי כרטיס. עבור חנויות מקוונות, SBP מספקת יתרון של הפחתת עמלות פי 3–5 בהשוואה לכרטיסים.
השוואה בין SBP לרכישת כרטיסים
| פרמטר | SBP | רכישת כרטיסים |
|---|---|---|
| עמלה | 0.4% – 0.7% | 1.5% – 2.5% |
| מהירות הסדר | כמה שניות | יום עסקים הבא |
| החזרים | העברה חוזרת פשוטה | דרך הסליקה, 3–30 ימים |
יתרון נוסף הוא הגדלת המרה: לפי ההערכות שלנו, עד 15% מהמשתמשים נוטשים את העגלה כשהם רואים את טופס הזנת הכרטיס. SBP מסירה את המחסום הזה.
אינטגרציה של SBP דרך Tinkoff
Tinkoff מספקת שני פורמטים: קישור (למובייל) וקוד QR (לדסקטופ). שלבי החיבור:
- קבל מפתח טרמינל בחשבון האישי שלך ב-Tinkoff.
- צור סשן תשלום דרך ה-Init API.
- בקש קוד QR דרך GetQr.
- הצג למשתמש בהתאם למכשיר.
דוגמה ליצירת סשן תשלום וקבלת QR:
// Создание платёжной сессии $params = [ 'TerminalKey' => TINKOFF_TERMINAL, 'Amount' => (int)($order->getPrice() * 100), 'OrderId' => $order->getAccountNumber(), 'Description' => 'Заказ #' . $order->getAccountNumber(), 'NotificationURL' => 'https://shop.ru/bitrix/tools/sale_ps_result.php', 'PayType' => 'O', ]; $params['Token'] = tinkoffSign($params, TINKOFF_SECRET); $init = tinkoffPost('/v2/Init', $params); $paymentId = $init['PaymentId']; // Получение QR для СБП $qrParams = [ 'TerminalKey' => TINKOFF_TERMINAL, 'PaymentId' => $paymentId, 'DataType' => 'PAYLOAD', ]; $qrParams['Token'] = tinkoffSign($qrParams, TINKOFF_SECRET); $qr = tinkoffPost('/v2/GetQr', $qrParams); $sbpLink = $qr['Data']; תצוגה אדפטיבית של QR וקישורים
השלב הבא הוא להציג למשתמש את הממשק הנכון. במכשירים ניידים, עדיף לפתוח את אפליקציית הבנק דרך קישור, בדסקטופ — קוד QR. בדוק את ה-user-agent והצג את האלמנט המתאים:
const isMobile = /Mobi|Android/i.test(navigator.userAgent); if (isMobile) { const btn = document.getElementById('sbp-btn'); btn.href = sbpLink; btn.style.display = 'block'; } else { const qr = new QRCode(document.getElementById('sbp-qr'), { text: sbpLink, width: 200, height: 200, }); document.getElementById('sbp-qr-block').style.display = 'block'; } // Polling статуса const poll = setInterval(async () => { const status = await fetch('/api/sbp-status.php?orderId=' + orderId) .then(r => r.json()); if (status.paid) { clearInterval(poll); location.href = '/payment/success/'; } }, 2000); אינטגרציה דרך YooKassa
YooKassa תומכת גם ב-SBP. דוגמה ליצירת תשלום:
$payment = $client->createPayment([ 'amount' => ['value' => number_format($sum, 2, '.', ''), 'currency' => 'USD'], 'payment_method_data' => ['type' => 'sbp'], 'confirmation' => ['type' => 'qr'], 'capture' => true, 'description' => 'Заказ #' . $orderId, 'metadata' => ['order_id' => $orderId], ], uniqid('', true)); טיפול בהודעות callback מהבנק
לאחר התשלום, הבנק שולח בקשת POST אל // Создание платёжной сессии $params = [ 'TerminalKey' => TINKOFF_TERMINAL, 'Amount' => (int)($order->getPrice() * 100), 'OrderId' => $order->getAccountNumber(), 'Description' => 'Заказ #' . $order->getAccountNumber(), 'NotificationURL' => 'https://shop.ru/bitrix/tools/sale_ps_result.php', 'PayType' => 'O', ]; $params['Token'] = tinkoffSign($params, TINKOFF_SECRET); $init = tinkoffPost('/v2/Init', $params); $paymentId = $init['PaymentId']; // Получение QR для СБП $qrParams = [ 'TerminalKey' => TINKOFF_TERMINAL, 'PaymentId' => $paymentId, 'DataType' => 'PAYLOAD', ]; $qrParams['Token'] = tinkoffSign($qrParams, TINKOFF_SECRET); $qr = tinkoffPost('/v2/GetQr', $qrParams); $sbpLink = $qr['Data']; . הודעה זו מכילה את סטטוס התשלום ויש לטפל בה כראוי:
// Получение уведомления $json = file_get_contents('php://input'); $data = json_decode($json, true); // Проверка подписи $token = hash('sha256', $json . TINKOFF_SECRET); if ($token !== $_SERVER['HTTP_X_SIGNATURE']) { http_response_code(400); echo 'bad signature'; exit; } // Обновление статуса платежа в Битрикс if ($data['Status'] === 'CONFIRMED') { \Bitrix\Sale\PaymentCollection::setPaid($data['OrderId'], 'Y'); } חשוב: לעולם אל תסתמך רק על callbacks. יישם בדיקת סטטוס (כמו בדוגמה למעלה) — ייתכן שה-callback לא יגיע עקב תקלות רשת, אבל התשלום כבר עבר.
נקודות חשובות: עמלה ופיסקליזציה
כדי לעבוד עם SBP, יש צורך במוצר נפרד מהבנק — "קבלת תשלומים דרך SBP". תעריפים למסחר אלקטרוני: 0.4% ליחידים, עד 0.7% לחברות, מה שמפחית משמעותית את העלויות התפעוליות בהשוואה לרכישת כרטיסים. הפיסקליזציה של תשלומי SBP עוברת דרך המנגנון הסטנדרטי: אתה שולח const isMobile = /Mobi|Android/i.test(navigator.userAgent); if (isMobile) { const btn = document.getElementById('sbp-btn'); btn.href = sbpLink; btn.style.display = 'block'; } else { const qr = new QRCode(document.getElementById('sbp-qr'), { text: sbpLink, width: 200, height: 200, }); document.getElementById('sbp-qr-block').style.display = 'block'; } // Polling статуса const poll = setInterval(async () => { const status = await fetch('/api/sbp-status.php?orderId=' + orderId) .then(r => r.json()); if (status.paid) { clearInterval(poll); location.href = '/payment/success/'; } }, 2000); עם התכונה $payment = $client->createPayment([ 'amount' => ['value' => number_format($sum, 2, '.', ''), 'currency' => 'USD'], 'payment_method_data' => ['type' => 'sbp'], 'confirmation' => ['type' => 'qr'], 'capture' => true, 'description' => 'Заказ #' . $orderId, 'metadata' => ['order_id' => $orderId], ], uniqid('', true)); ל-OFD. אין צורך בקופה רושמת נפרדת — משתמשים באותה קופה כמו לכרטיסים. עם הגדרה נכונה ב-Bitrix, קבלות נשלחות אוטומטית עם אישור התשלום דרך webhook מהבנק.
החזרים וביטולים
בעת החזר של תשלום SBP, הכסף מוחזר לחשבון הקונה באופן מיידי (בניגוד לכרטיסים, שבהם עשוי להיות עיכוב). ב-Bitrix, יישם את ההחזר דרך נקודת הקצה NotificationURL של הבנק:
$refund = tinkoffPost('/v2/Refund', [ 'PaymentId' => $paymentId, 'TerminalKey' => TINKOFF_TERMINAL, ]); החזרים חלקיים נתמכים גם כן — העבר את סכום ההחזר בנפרד מסכום התשלום הכולל.
הניסיון שלנו וזמן החיבור
יישמנו מעל 50 אינטגרציות של מערכות תשלום על 1C-Bitrix בשנים האחרונות. מומחי Bitrix מוסמכים מבטיחים פעולה יציבה תחת עומס. זמנים ממוצעים:
| משימה | זמן |
|---|---|
| SBP דרך Tinkoff או YooKassa | 1–2 ימים |
| תצוגה אדפטיבית של QR/קישור | 0.5 יום |
| בדיקת סטטוס | 0.5 יום |
| הגדרת רכישת כרטיסים בנקאית | 3–10 ימי עסקים |
אם אתה רוצה לחבר SBP לפרויקט שלך, צור איתנו קשר — נעריך את היקף העבודה בחינם ונציע את הפתרון האופטימלי. קבל ייעוץ על יישום SBP עוד היום.







