פיתוח אפליקציית מובייל למסעדה עם יכולת תשלום בקוד QR חיוני לסעודה מודרנית. פתרונות תשלום QR למסעדות מייעלים את תהליך הקופה ומקצרים זמני המתנה. אפליקציית תשלום QR זו למסעדות כוללת גם מחולל קודי QR דינמיים. עם זאת, האינטגרציה נשברת לעיתים קרובות במפגש בין מספר שכבות — יצירת קוד QR בצד הקופה, סנכרון מצב התשלום בין הטאבלט של המלצר לאפליקציית האורח, וטיפול ב-timeout כאשר סולק התשלומים מגיב מאוחר יותר מסגירת החשבון. הניסיון שלנו — למעלה מ-5 שנים ו-20 פרויקטים שיושמו למסעדות — אנו מבטיחים פעולות תשלום יציבות, הפחתת זמן ההמתנה של הלקוח ב-30 שניות בממוצע והגדלת שיעור ההמרה בתשלום ב-15-20%. החיסכון בעמלות הסליקה בעת שימוש במערכת התשלומים המהירה SBP (SBP) מגיע עד 0.7% לעסקה לעומת 2-3% בכרטיסי בנק. עבור מסעדה המעבדת 100,000 דולר בחודש, המעבר ל-SBP חוסך 700 דולר בחודש. עלות הפיתוח האופיינית לאפליקציה כזו נעה בין 8,000 ל-12,000 דולר, ובדרך כלל מוחזרת תוך 3-6 חודשים באמצעות הפחתת עמלות הסליקה.
פיתוח אפליקציות מובייל למסעדות עם תשלום QR
המטרה העיקרית היא ליצור תרחיש חלק מסריקת קוד QR ועד אישור התשלום. המרכיב המרכזי הוא קוד QR דינמי שנוצר עבור כל הזמנה ומכיל מזהה עסקה ייחודי וטוקן. האינטגרציה עם שער התשלום ומערכת הקופה הם השלבים המורכבים ביותר. נבחן בעיות ופתרונות אופייניים.
בעיות באינטגרציית SBP
הבעיה הנפוצה ביותר היא מצב תחרות (race condition) במהלך תשלום QR דרך SBP (מערכת התשלומים המהירה). האורח סורק קוד QR דינמי שנוצר דרך ה-API של YooKassa או CloudPayments ומבצע העברה. הבנק שולח webhook לשרת שלך. אבל האפליקציה כבר מציגה "ממתין לאישור" ואחרי 30 שניות — "הזמן פג". הסיבה היא שה-webhook הגיע אחרי 35 שניות עקב עיכובי רשת בצד הבנק, בעוד שהבדיקה (polling) בלקוח הנייד נעצרה מוקדם יותר.
פתרון: השתמש בערוץ WebSocket בין השרת ללקוח הנייד במקום polling. כאשר השרת מקבל webhook, הוא דוחף מיד את הסטטוס למכשיר. הגדל את ה-timeout של הלקוח ל-3 דקות, אבל הצג התקדמות ויזואלית — אנימציית ההמתנה לא צריכה להיתקע "לנצח" מנקודת מבט של UX. WebSocket מהיר פי 15 מ-polling לאישור תשלום.
בעיה שנייה היא סריקת קוד QR ב-iOS דרך AVFoundation. ה-AVCaptureMetadataOutput הסטנדרטי עם סוג .qr לפעמים נכשל בקריאת קודי QR מודפסים בתנאי תאורה ירודים במסעדה. אנו מוסיפים torchMode = .auto ומגדירים videoZoomFactor באופן פרוגרמטי כאשר brightness מ-AVCaptureDevice.exposureTargetBias נמוך. זה משפר את ביצועי סורק קוד ה-QR ב-40% בתנאים מאתגרים.
קוד QR דינמי ואבטחה
קוד QR דינמי נוצר בשרת עבור כל הזמנה ומכיל קישור ייחודי עם מזהה עסקה וטוקן. בניגוד לקוד QR סטטי שניתן להעתיק ולעשות בו שימוש חוזר, קוד QR דינמי תקף פעם אחת בלבד. גם אם תוקף מיירט את הקישור, הוא לא יכול לשלם איתו — הוא פג. זה עומד בהנחיות סקירת ה-App Store (סעיף 4.2) ו-PCI DSS. אנו משתמשים ביצירה דרך ה-API של הסולק (למשל, POST /v3/payments מ-YooKassa), שמוסיפה שכבת אימות נוספת.
למה WebSocket במקום Polling
| שיטת Polling | WebSocket |
|---|---|
| Timeout של 30 שניות | הודעה מיידית |
| בקשות HTTP נוספות | חיבור קבוע |
| סיכון לאובדן סטטוס בשגיאה | משלוח מובטח |
| עומס על השרת גדל עם הלקוחות | חיבור אחד לכל לקוח |
ערוץ WebSocket מקצר את זמן התגובה ל-1-2 שניות לעומת 30+ שניות עם polling — מהיר פי 15. זה קריטי כאשר הסולק מעכב את התגובה והאורח מסתכן ביציאה בלי לחכות לאישור. אנו מיישמים WebSocket עם גיבוי ל-polling עבור גרסאות שרת ישנות יותר.
השוואת ספקי תשלום
פרטי ספקים
| ספק | עמלה (סליקה) | התנחלות כספים | מורכבות אינטגרציה |
|---|---|---|---|
| YooKassa | 2.5-3% או SBP 0.4-0.7% | מיידי | בינונית (REST API + webhook) |
| CloudPayments | 2.2-3% או SBP 0.4-0.7% | יום למחרת | נמוכה (SDK מוכן) |
| SBP דרך בנק שותף | 0.4-0.7% | מיידי | גבוהה (נדרשת התאמה אישית) |
בחירת הספק תלויה בהיקף ובדרישות מהירות ההתנחלות. עבור מסעדות עם תנועה גבוהה, השילוב האופטימלי הוא YooKassa + SBP: הזרם המרכזי דרך כרטיסים, ועבור אורחים קבועים — QR דרך SBP עם עמלה מינימלית.
מה כלול בפיתוח
- ביקורת מערכת הקופה של המסעדה (אינטגרציית iiko, r_keeper, Poster, או מותאמת אישית)
- עיצוב מסכים: תפריט, עגלה, מסך תשלום עם QR
- יישום סריקה ויצירת קוד QR
- אינטגרציה עם ספק התשלום (YooKassa, CloudPayments, SBP)
- הגדרת התראות WebSocket וטיפול ב-webhook
- בדיקות בסביבת Sandbox ופרסום ל-App Store / Google Play
- תיעוד API ותרשים אינטראקציה
- תמיכה לאחר ההשקה (אחריות באגים לחודש)
איך אנו בודקים אינטגרציה עם ספק התשלום
לפני העלייה לאוויר, אנו מריצים תרחישים: סריקת QR בתנאי תאורה שונים, תשלום סימולטני משני מכשירים, ניתוק רשת במהלך האישור. אנו משתמשים בסביבות Sandbox של YooKassa ו-CloudPayments ליצירת webhooks לבדיקה. אנו מבצעים אוטומציה של הבדיקה עם סקריפטים בשרת המדמים עיכובים של עד 60 שניות — רק אז אנו רואים את האינטגרציה כיציבה.
טכנולוגיות וארכיטקטורה
לפיתוח iOS ו-Android אנו משתמשים ב-SwiftUI ב-iOS וב-Jetpack Compose ב-Android. ב-iOS — SwiftUI + Combine למצב מסך התשלום, AVFoundation לסריקת קוד QR, URLSession עם async/await לבקשות לשרת שלנו. ב-Android — Jetpack Compose, CameraX עם QRCodeAnalyzer על גבי ML Kit Barcode Scanning, Retrofit + OkHttp.
צד השרת: יצירת קוד QR דינמי דרך ה-API של הסולק (עם YooKassa זה AVFoundation עם URLSession), קבלת CameraX, התראות WebSocket ללקוח, טיפול ב-webhook עם אימות חתימת QRCodeAnalyzer.
עבור התפריט וקטלוג המנות — REST סטנדרטי, נתונים נשמרים במטמון מקומי דרך Core Data (iOS) או Room (Android) כך שהתפריט עובד במצב לא מקוון.
תרשים אינטראקציה
[Мобильное приложение гостя]
|
| Запрос счёта (tableId)
v
[Бэкенд ресторана]
|
| POST /v3/payments → ЮKassa API
v
[ЮKassa] → возвращает confirmation_url (QR)
|
| WebSocket push при получении webhook
v
[Мобильное приложение] → статус "Оплачено" תהליך פיתוח שלב אחר שלב
- ביקורת מערכת הקופה: הבנת הפרוטוקול (אינטגרציית iiko, r_keeper, Poster, או מותאם אישית). אינטגרציה עם iiko דרך iiko.transport API מוסיפה כיומיים.
- עיצוב מסכים: תפריט, עגלה ומסך תשלום עם QR.
- יישום סריקה ויצירת קוד QR: שימוש ב-AVFoundation ב-iOS וב-CameraX/ML Kit ב-Android לסריקת קוד QR.
- אינטגרציה עם ספק התשלום: חיבור ל-YooKassa, CloudPayments או SBP, והגדרת webhooks.
- בדיקות ופריסה: בדיקות בסביבת Sandbox, ולאחר מכן פרסום ל-App Store ו-Google Play.
לוח זמנים
MVP עם תשלום QR ותפריט — 2-3 שבועות. עם אינטגרציה מלאה למערכת הקופה וגרסאות ל-iOS ו-Android — עד 5 שבועות. העלות מחושבת באופן אישי לאחר ניתוח דרישות. הזמינו פיתוח מפתח ליד — קבלו מערכת תשלום יציבה תוך 2-5 שבועות. קבלו ייעוץ על אינטגרציה עם מערכת הקופה שלכם — צרו קשר.







