שילוב שער התשלומים Robokassa באפליקציות מובייל
בעת שילוב Robokassa באפליקציית מובייל, אנו נתקלים לעתים קרובות בהיעדר SDK מקורי — זה נורמלי. הניסיון שלנו מראה שתי גישות עובדות: דרך WebView או דרך API של השרת עם ממשק משתמש מותאם אישית. הראשונה מהירה יותר ליישום (2–3 ימים), השנייה נותנת שליטה מלאה על חוויית המשתמש והמרה — לפי התיעוד הרשמי של Robokassa, שיעור ההמרה הממוצע בתשלומים עם ממשק מותאם אישית מגיע ל-97%. יישמנו את שתי הגישות ביותר מ-100 פרויקטים — בואו נדבר על המלכודות.
אבל קודם, נקודת הכאב המרכזית: טיפול שגוי בהודעות. יותר מ-30% מהפרויקטים שלנו הכילו שגיאות ב-ResultURL בתחילת הדרך, מה שהוביל לאובדן תשלומים. לקוח אחד, חנות מקוונת עם 10,000 הזמנות בחודש וערך הזמנה ממוצע של 50$, איבד 3% מההכנסות הרבעוניות (45,000$) עקב עיבוד SuccessURL ללא אימות בצד השרת. תיקנו את השילוב תוך יומיים, ושיעור ההמרה בתשלומים עלה ב-5%. אנו מבטיחים שהשילוב שלכם יהיה מוגן מפני תרחישים כאלה — החיסכון הממוצע בעמלות מגיע עד 3% מהמחזור. שילוב מוגדר כראוי לא רק מונע הפסדים אלא גם מגביר המרה באמצעות הפניה מהירה ותמיכה ב-Apple Pay/Google Pay דרך WebView.
באיזו שיטת שילוב לבחור: WebView או API?
יישום WebView מהיר פי 1.5 מ-API (2–3 ימים לעומת 3–4 ימים) ודורש פחות מאמץ ראשוני.
WebView: מהיר ואמין
השרת יוצר כתובת URL של טופס תשלום Robokassa, והלקוח פותח אותה ב-WebView או CustomTabs. דוגמת כתובת URL:
https://auth.robokassa.ru/Merchant/Index.aspx?MerchantLogin=your_login&OutSum=1500.00&InvId=1234&Description=Заказ%20№1234&SignatureValue=md5_signature&IsTest=0
החתימה SignatureValue = MD5(MerchantLogin:OutSum:InvId:Password1). לאחר התשלום, המשתמש מופנה ל-SuccessURL — הפניה לאפליקציה דרך deep link.
// Android: CustomTabs для плавного перехода
val customTabsIntent = CustomTabsIntent.Builder()
.setShowTitle(false)
.build()
customTabsIntent.launchUrl(context, Uri.parse(paymentUrl)) // iOS: SFSafariViewController с автоматическим входом через креды
let safariVC = SFSafariViewController(url: URL(string: paymentUrl)!)
present(safariVC, animated: true)כדי לקבל את הסטטוס, Robokassa קוראת לשרת // Android: CustomTabs для плавного перехода val customTabsIntent = CustomTabsIntent.Builder() .setShowTitle(false) .build() customTabsIntent.launchUrl(context, Uri.parse(paymentUrl)) — מוגדר בחשבון הסוחר → הודעות. זהו מקור האמת האמין היחיד.
API: שליטה מלאה בממשק המשתמש
לסוחרים שעברו הסמכת PCI DSS, Robokassa פותחת API ישיר ליצירת עסקאות. בקשה עם פרטי כרטיס נראית כך:
POST https://auth.robokassa.ru/Merchant/Payment/CreateV2
{
"MerchantLogin": "your_login",
"OutSum": "1500.00",
"InvId": "1234",
"Description": "Заказ",
"SignatureValue": "...",
"PaymentMethod": "BankCard",
"CardNumber": "4111111111111111",
"CardExpiryDate": "1225",
"CardCvv": "123"
}אם הבנק דורש 3DS, ה-API מחזיר // iOS: SFSafariViewController с автоматическим входом через креды let safariVC = SFSafariViewController(url: URL(string: paymentUrl)!) present(safariVC, animated: true) — הפניה לדף ACS. לאחר מכן תהליך 3DS סטנדרטי דרך WebView.
| קריטריון | WebView | API עם ממשק מותאם אישית |
|---|---|---|
| זמן יישום | 2–3 ימים | 3–4 ימים |
| שליטה בחוויית המשתמש | נמוכה (טופס Robokassa) | מלאה |
| אבטחה | מובנית (HTTPS) | דורשת PCI DSS |
| תמיכה ב-3DS | אוטומטית | דרך WebView |
| שיעור המרה בתשלומים | ~90% | ~97% |
תוצאת תשלום: ResultURL לעומת SuccessURL
Robokassa מבחינה בין שני סוגי הודעות:
- ResultURL — בקשת POST מהשרת עם תוצאת העסקה. נקראת תמיד, ללא קשר לפעולות המשתמש. זו הדרך העיקרית לדעת את סטטוס התשלום האמיתי.
- SuccessURL — הפניית משתמש לאחר תשלום מוצלח. לא אמינה: המשתמש עלול לסגור את הדפדפן לפני ההפניה.
| סוג הודעה | כיוון | אמינות | שימוש |
|---|---|---|---|
| ResultURL | שרת → השרת שלכם (POST) | גבוהה (תמיד) | רישום תשלום, עדכון סטטוס |
| SuccessURL | משתמש (הפניה) | נמוכה (עלולה להתפספס) | הצגת תוצאה למשתמש |
באפליקציית מובייל, אנו משתמשים ב-deep link כדי ליירט את SuccessURL:
// SuccessURL при создании платежа: yourapp://payment/success?InvId={InvId}&OutSum={OutSum}
// В Activity с intent-filter для yourapp://
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
val uri = intent?.data ?: return
if (uri.host == "payment" && uri.path == "/success") {
val invId = uri.getQueryParameter("InvId")
// Проверяем статус на сервере, не доверяем только deeplink
verifyPaymentOnServer(invId)
}
} מדוע אימות חתימה הוא קריטי?
ללא אימות חתימה, תוקף יכול לדמות תשלום מוצלח על ידי שליחת בקשת GET ל-ResultURL שלכם. זה יוביל למשלוח מוצר ללא תשלום בפועל. בפעילות מסחרית, התקפות כאלה אינן נדירות. אנו מבטיחים שהיישום שלנו סוגר את הפרצה הזו.
אימות חתימת Robokassa בשרת
אנו תמיד מאמתים את החתימה של ResultURL הנכנס: ResultURL
POST https://auth.robokassa.ru/Merchant/Payment/CreateV2 { "MerchantLogin": "your_login", "OutSum": "1500.00", "InvId": "1234", "Description": "Заказ", "SignatureValue": "...", "PaymentMethod": "BankCard", "CardNumber": "4111111111111111", "CardExpiryDate": "1225", "CardCvv": "123" } היא הסיסמה השנייה של Robokassa, שונה מהראשונה. אם לא בודקים זאת, כל אחד יכול לזייף תשלום מוצלח באמצעות בקשת GET ל-ResultURL. תהליך שלב אחר שלב:
- קבלת פרמטרים מבקשת POST: OutSum, InvId, SignatureValue.
- חישוב גיבוב MD5 מהמחרוזת
PaymentUrl. - השוואה ל-SignatureValue שהתקבל. אם יש אי-התאמה, החזר 403.
דוגמת אימות מפורטת ב-PHP
$outSum = $_POST['OutSum'];
$invId = $_POST['InvId'];
$signatureValue = $_POST['SignatureValue'];
$password2 = 'your_password2';
$expected = md5($outSum.':'.$invId.':'.$password2);
if (strcasecmp($signatureValue, $expected) !== 0) {
header('HTTP/1.0 403 Forbidden');
exit;
} שגיאות נפוצות וכיצד להימנע מהן
| שגיאה | השלכות | פתרון |
|---|---|---|
| שימוש רק ב-SuccessURL | אובדן תשלום כשהדפדפן נסגר | תמיד להשתמש ב-ResultURL |
| דילוג על אימות חתימה | זיוף תשלומים על ידי תוקפים | תמיד לבדוק SignatureValue |
| פורמט חתימה שגוי | דחיית עסקה | שימוש ב-MD5 עם סדר פרמטרים נכון |
מה כלול בעבודה
- יצירת קישור תשלום עם חתימה בצד השרת
- יישום WebView או CustomTabs/SFSafariViewController
- הגדרת Deep link לטיפול ב-SuccessURL / FailURL
- טיפול ב-ResultURL בצד השרת עם אימות חתימה
- בדיקות במצב בדיקה של Robokassa (זמן בדיקה ממוצע יומיים)
- ייעוץ בנושא הגדרת חשבון סוחר
לצוות שלנו ניסיון של 7 שנים בשילוב שערי תשלומים ויותר מ-100 פרויקטים מוצלחים עם Robokassa, המעבדים יותר מ-50,000 עסקאות. צרו קשר לייעוץ בנושא בחירת הגישה — נעזור לכם להימנע משגיאות נפוצות. הזמינו שילוב Robokassa באפליקציית המובייל שלכם וקבלו שער תשלומים אמין תוך 2–4 ימים. קבלו עיבוד תשלומים יציב מהיום הראשון — פנו אלינו.







