שילוב שער תשלומים של SberPay באפליקציות מובייל
לעתים קרובות אנו נתקלים במצבים שבהם לאחר שילוב SberPay, המשתמש מאשר את התשלום באפליקציית SberBank Online, אך האפליקציה אינה מקבלת קריאה חוזרת (callback) — ה-deeplink נכשל, או שאפליקציית SberBank אינה מותקנת. ללא מנגנון גיבוי (fallback), התשלום נתקע, והסטטוס נבדק רק דרך השרת. מאמר זה מכסה פתרונות מוכחים ל-iOS ואנדרואיד עם deeplinks, גיבוי ובדיקת סטטוס אסינכרונית.
אינטגרציה ישירה דרך Sberbank Acquiring נותנת פי 3 יותר שליטה על סטטוסי התשלום בהשוואה לאגרגטורים, אך דורשת הגדרה קפדנית. דרך אגרגטורים, SberPay מתחבר פי 2 מהר יותר אם ה-SDK כבר נמצא בפרויקט. בנוסף, חיסכון בעמלות יכול להגיע עד 30%, ושיעור ההצלחה הוא 98% כאשר ה-deeplink והגיבוי מטופלים כראוי. לדוגמה, לקוח קמעונאי עם הכנסה חודשית של $100,000 חסך $5,000 בחודש על ידי מעבר ל-acquiring ישיר.
בחירה בין אגרגטור ל-Acquiring ישיר
| קריטריון | דרך אגרגטור (YooKassa, CloudPayments) | ישירות דרך Sberbank Acquiring |
|---|---|---|
| מהירות חיבור | 1–2 ימים (SDK כבר זמין) | 3–5 ימים (רישום סוחר, סביבת בדיקות) |
| ניהול סטטוסים | חלקית בצד האגרגטור | שליטה מלאה דרך REST API |
| דרישות שרת | מינימליות (טוקנים) | רישום הזמנות בצד השרת, בדיקת סטטוס |
| טיפול ב-deeplink | מובנה ב-SDK | יש ליישם ידנית |
| מורכבות אינטגרציה | נמוכה | בינונית (אינטראקציה ישירה עם API) |
דרך אגרגטור: אם כבר יש לכם YooKassa, CloudPayments או Robokassa, ניתן להפעיל את SberPay כ-paymentMethodType נוסף ללא אינטגרציה נפרדת. לדוגמה, YooKassa תומך ב-sberbank כסוג שיטת תשלום, וה-SDK פותח אוטומטית את ה-deeplink ל-SberBank Online.
דרך Sberbank Acquiring ישירות: דורש רישום סוחר נפרד מול Sberbank, חיבור לסביבת הבדיקות 3dsec.sberbank.ru, ועבודה ישירה עם REST API. אינטגרציה ישירה מפחיתה את העמלה בעד 30% בהשוואה לאגרגטורים, מה שמתרגם לחיסכון חודשי של $5,000 עבור פרויקט עם הכנסה של $100,000.
מדוע החזרת Deeplink אינה אמינה?
החזרת deeplink היא מקור מידע לא אמין. המשתמש עלול לסגור את האפליקציה לפני ההפניה, לבטל את התשלום ב-SberBank Online, או שמתרחשת תקלת רשת ברגע החזרה. לכן, אנו תמיד מיישמים בדיקת סטטוס בצד השרת דרך getOrderStatusExtended עם סקירה תקופתית (לדוגמה, כל 5 שניות עד 30 שניות). בהתבסס על הסטטוס שהתקבל (0 — נרשם, 1 — שולם, 2 — בוטל), אנו מעדכנים את ממשק המשתמש של האפליקציה.
מה אם אפליקציית SberBank אינה מותקנת? טיפול בגיבוי
לאינטגרציה ישירה, עליכם ליישם גיבוי. אם 0 (אנדרואיד) או 1 (iOS) מחזירים false, פתחו את 2 בדפדפן. תהליך הדפדפן מוביל לגרסת האינטרנט של SberPay, שבה המשתמש יכול לאמת את זהותו דרך Sber ID.
// Android — fallback через браузер
val sberPayUri = Uri.parse(formUrl)
val intent = Intent(Intent.ACTION_VIEW, sberPayUri)
if (intent.resolveActivity(packageManager) != null) {
startActivity(intent)
} else {
openInBrowser(formUrl) // fallback
} // iOS — fallback через SFSafariViewController
if let url = URL(string: formUrl), UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url)
} else {
presentSafari(url: formUrl)
} טיפול נכון בחזרה מ-SberBank Online
לאחר אישור התשלום ב-SberBank Online, המערכת מפנה אל resolveActivity שציינתם במהלך רישום ההזמנה. עבור iOS, השתמשו ב-Universal Links או URL Schemes; עבור אנדרואיד, הגדירו Intent Filter עם scheme ו-host נכונים.
<!-- AndroidManifest.xml -->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="yourapp" android:host="payment" android:pathPrefix="/result" />
</intent-filter> דוגמת טיפול ב-Swift
func handlePaymentCallback(url: URL) {
guard let components = URLComponents(url: url, resolvingAgainstBaseURL: false) else { return }
if let orderId = components.queryItems?.first(where: { $0.name == "orderId" })?.value {
checkOrderStatus(orderId: orderId)
}
}לאחר החזרה, בדקו את סטטוס ההזמנה בשרת:
GET https://securepayments.sberbank.ru/payment/rest/getOrderStatusExtended.do
?orderId=uuid-order-id&userName=...&password=... | פרמטר | סוג | תיאור |
|---|---|---|
| orderId | string | מזהה הזמנה (UUID) שהוחזר בעת הרישום |
| userName | string | שם משתמש סוחר במערכת Sberbank |
| password | string | סיסמת סוחר |
נקודה חשובה: לעולם אל תסמכו רק על החזרת ה-deeplink. תמיד אמתו את סטטוס התשלום דרך בקשת canOpenURL בצד השרת.
שגיאות אינטגרציה נפוצות
- חוסר בגיבוי כאשר SberBank אינו מותקן — המשתמש רואה מסך ריק. תמיד בדקו
formUrl/// Android — fallback через браузер val sberPayUri = Uri.parse(formUrl) val intent = Intent(Intent.ACTION_VIEW, sberPayUri) if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } else { openInBrowser(formUrl) // fallback }. - הגדרת
// iOS — fallback через SFSafariViewController if let url = URL(string: formUrl), UIApplication.shared.canOpenURL(url) { UIApplication.shared.open(url) } else { presentSafari(url: formUrl) }שגויה — ה-scheme חייב להתאים לזה שנרשם ב-manifest. - השמטת בדיקות סטטוס בצד השרת — תשלום עלול להיחשב כלא מוצלח למרות שהכסף נוכה.
- התעלמות מ-הנחיות סקירת App Store (סעיף 5.1) בנוגע לעיבוד תשלומים.
בפרויקט אחרון לאפליקציה קמעונאית, הפחתנו את שיעור כישלונות התשלום מ-5% ל-1.5% על ידי יישום טיפול נכון ב-deeplink ואימות קריאה חוזרת בצד השרת. זה חסך ללקוח אלפי דולרים בהכנסות אבודות בחודש.
יש לנו ניסיון של 5+ שנים בשילוב שערי תשלומים ואנו מבטיחים פעולה תקינה של deeplink וגיבוי. המהנדסים שלנו מוסמכים על פלטפורמת Sberbank. צרו קשר לייעוץ טכני או להזמנת שילוב SberPay.
תהליך העבודה לאינטגרציה
- ניתוח ובחירת סכמה — הערכת ערימת התשלומים הנוכחית, בחירה בין אגרגטור לאינטגרציה ישירה.
- עיצוב — פיתוח רצף בקשות, סכמות deeplink, תרחישי גיבוי.
- יישום — כתיבת צד שרת (רישום הזמנות, בדיקת סטטוס) וצד לקוח (פתיחת deeplink, טיפול בחזרה).
- בדיקות — אימות בסביבת הבדיקות (
returnUrl), הדמיית שגיאות (חוסר ב-SberBank, תקלת רשת). - פריסה — פרסום ל-App Store ו-Google Play עם URL schemas ו-Universal Links נכונים.
לוח זמנים משוער
בין 2 ל-5 ימים בהתאם לסכמה הנבחרת ולמוכנות צד השרת. העלות מחושבת באופן אישי — צרו קשר להערכת הפרויקט שלכם תוך יום עסקים אחד. עלות אינטגרציה טיפוסית נעה בין $2,000 ל-$5,000.
תוצרים
- הכנת תיעוד טכני המתאר את תהליך התשלום וטיפול בשגיאות.
- הגדרת גישה לסביבות Sberbank לבדיקות וייצור.
- הכשרת הצוות שלכם ביסודות תמיכה ואבחון.
- 30 ימי תמיכה באחריות לאחר ההשקה.
מעל 80% מהלקוחות שלנו בוחרים ב-acquiring ישיר לנפחים גדולים, ו-95% מהתשלומים מצליחים עם גיבוי נכון.







