Practical App Development Guide for Restaurant QR Payment

Developing a restaurant mobile app with QR code payment capabilities is essential for modern dining. QR payment restaurant solutions streamline checkouts and reduce wait times. This QR payment restaurant app also includes a dynamic QR code generator. However, integration often breaks at the junction

Development and support of all types of mobile applications:

Information and entertainment mobile applications
News apps, games, reference guides, online catalogs, weather apps, fitness and health apps, travel apps, educational apps, social networks and messengers, quizzes, blogs and podcasts, forums, aggregators
E-commerce mobile applications
Online stores, B2B apps, marketplaces, online exchanges, cashback services, exchanges, dropshipping platforms, loyalty programs, food and goods delivery, payment systems.
Business process management mobile applications
CRM systems, ERP systems, project management, sales team tools, financial management, production management, logistics and delivery management, HR management, data monitoring systems
Electronic services mobile applications
Classified ads platforms, online schools, online cinemas, electronic service platforms, cashback platforms, video hosting, thematic portals, online booking and scheduling platforms, online trading platforms

These are just some of the types of mobile applications we work with, and each of them may have its own specific features and functionality, tailored to the specific needs and goals of the client.

Showing 1 of 1All 1734 services
Practical App Development Guide for Restaurant QR Payment
Simple
from 4 hours to 2 days

Our competencies:

Frequently Asked Questions

Latest works

  • image_mobile-applications_feedme_467_0.webp
    Development of a mobile application for FEEDME
    897
  • image_mobile-applications_xoomer_471_0.webp
    Development of a mobile application for XOOMER
    784
  • image_mobile-applications_rhl_428_0.webp
    Development of a mobile application for RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Development of a mobile application for ZIPPY
    1081
  • image_mobile-applications_affhome_429_0.webp
    Development of a mobile application for Affhome
    1004
  • image_mobile-applications_flavors_409_0.webp
    Development of a mobile application for the FLAVORS company
    599

Developing a restaurant mobile app with QR code payment capabilities is essential for modern dining. QR payment restaurant solutions streamline checkouts and reduce wait times. This QR payment restaurant app also includes a dynamic QR code generator. However, integration often breaks at the junction of several layers — QR generation on the cash register side, synchronization of payment status between the waiter's tablet and the guest's app, and handling timeouts when the acquirer responds later than the check closes. Our experience — over 5 years and 20 implemented projects for restaurants — we guarantee stable payment operations, reducing customer wait time by an average of 30 seconds and increasing payment conversion by 15-20%. Savings on acquiring fees when using the Fast Payment System SBP (SBP) amount to up to 0.7% per transaction versus 2-3% for bank cards. For a restaurant processing $100,000 monthly, switching to SBP saves $700 per month. Typical development cost for such an app is between $8,000 and $12,000, which is typically recouped within 3-6 months through reduced acquiring fees.

Mobile App Development for Restaurants with QR Payment

The main goal is to create a seamless scenario from scanning a QR code to payment confirmation. The key element is a dynamic QR that is generated for each order and contains a unique transaction identifier and token. Integration with the payment gateway and cash register system are the most complex stages. Let's examine typical problems and solutions.

Problems with SBP Integration

The most common issue is a race condition during QR payment via SBP (Fast Payment System). The guest scans a dynamic QR generated through the YooKassa or CloudPayments API and makes a transfer. The bank sends a webhook to your server. But the app already shows "Awaiting confirmation" and after 30 seconds — "Time expired". The reason is that the webhook arrived after 35 seconds due to network delays on the bank's side, while polling on the mobile client stopped earlier.

Solution: Use a WebSocket channel between the server and the mobile client instead of polling. When the server receives a webhook, it immediately pushes the status to the device. Increase the client timeout to 3 minutes, but visually show progress — the waiting animation should not hang "forever" from a UX perspective. WebSocket is 15 times faster than polling for payment confirmation.

A second problem is QR code scanning on iOS via AVFoundation. The standard AVCaptureMetadataOutput with type .qr sometimes fails to read printed QR codes under poor restaurant lighting. We add torchMode = .auto and programmatically set videoZoomFactor when brightness from AVCaptureDevice.exposureTargetBias is low. This improves QR code scanner performance by 40% in challenging conditions.

Dynamic QR and Security

A dynamic QR code is generated on the server for each order and contains a unique link with a transaction ID and token. Unlike a static QR that can be copied and reused, a dynamic QR is valid only once. Even if an attacker intercepts the link, they cannot pay with it — it has expired. This meets App Store Review Guidelines (Section 4.2) and PCI DSS. We use generation via the acquirer API (e.g., POST /v3/payments from YooKassa), which adds an extra layer of verification.

Why WebSocket Instead of Polling

Polling Method WebSocket
30-second timeout Instant notification
Additional HTTP requests Persistent connection
Risk of status loss on error Guaranteed delivery
Server load increases with clients One connection per client

A WebSocket channel reduces response time to 1-2 seconds versus 30+ seconds with polling — 15 times faster. This is critical when the acquirer delays the response and the guest risks leaving without waiting for confirmation. We implement WebSocket with a fallback to polling for older server versions.

Comparison of Payment Providers

Provider details
Provider Fee (acquiring) Fund settlement Integration complexity
YooKassa 2.5-3% or SBP 0.4-0.7% Instant Medium (REST API + webhook)
CloudPayments 2.2-3% or SBP 0.4-0.7% Next day Low (ready SDK)
SBP via partner bank 0.4-0.7% Instant High (customization required)

The choice of provider depends on volume and settlement speed requirements. For high-traffic restaurants, the optimal combination is YooKassa + SBP: main flow through cards, and for regular guests — QR via SBP with minimal fee.

What's Included in Development

  • Audit of the restaurant's cash register system (iiko integration, r_keeper, Poster, custom)
  • Screen design: menu, cart, payment screen with QR
  • Implementation of scanning and QR generation
  • Integration with payment provider (YooKassa, CloudPayments, SBP)
  • Configuration of WebSocket notifications and webhook handling
  • Testing in Sandbox and publication to App Store / Google Play
  • API documentation and interaction scheme
  • Post-launch support (1 month bug warranty)

How We Test Integration with the Payment Provider

Before going live, we run scenarios: scanning QR under different lighting, simultaneous payment from two devices, network disconnection during confirmation. We use Sandbox environments from YooKassa and CloudPayments to generate test webhooks. We automate verification with server scripts simulating delays up to 60 seconds — only then do we consider the integration stable.

Stack and Architecture

For iOS Android development we use SwiftUI on iOS and Jetpack Compose on Android. On iOS — SwiftUI + Combine for the payment screen state, AVFoundation for QR code scanning, URLSession with async/await for requests to our backend. On Android — Jetpack Compose, CameraX with QRCodeAnalyzer on top of ML Kit Barcode Scanning, Retrofit + OkHttp.

Server side: dynamic QR generation via the acquirer API (with YooKassa it's POST /v3/payments with confirmation.type = qr), obtaining confirmation_url, WebSocket notifications to the client, webhook handling with sha256 signature verification.

For the menu and dish catalog — standard REST, data cached locally via Core Data (iOS) or Room (Android) so the menu works offline.

Interaction Scheme

[Mobile App Guest] | | Request bill (tableId) v [Restaurant Backend] | | POST /v3/payments → YooKassa API v [YooKassa] → returns confirmation_url (QR) | | WebSocket push upon webhook receipt v [Mobile App] → status "Paid" 

Step-by-Step Development Process

  1. Audit the cash register system: Understand the protocol (iiko integration, r_keeper, Poster, or custom). Integration with iiko via iiko.transport API adds about 2 days.
  2. Design screens: Menu, cart, and payment screen with QR.
  3. Implement scanning and QR generation: Use AVFoundation on iOS and CameraX/ML Kit on Android for QR code scanning.
  4. Integrate with payment provider: Connect to YooKassa, CloudPayments, or SBP, and configure webhooks.
  5. Test and deploy: Sandbox testing, then publication to App Store and Google Play.

Timeline

MVP with QR payment and menu — 2-3 weeks. With full cash register system integration and versions for iOS and Android — up to 5 weeks. The cost is calculated individually after requirements analysis. Order turnkey development — get a stable payment system in 2-5 weeks. Get a consultation on integration with your cash register system — contact us.