Skip to content

Add Scan to Pay app deeplinks and audience-gate the QR / bank transfer - #137

Merged
peter-paystack merged 2 commits into
mainfrom
feature/audience-gate-the-QR-bank-transfer-UI
Oct 12, 2026
Merged

peter-paystack merged 2 commits into
mainfrom
feature/audience-gate-the-QR-bank-transfer-UI

Conversation

@peter-paystack

Copy link
Copy Markdown
Collaborator

Scan to Pay customers on a phone can now hand off to their banking app
instead of scanning the QR code on their own screen. The QR number the
API already returns is used to build a Masterpass deeplink per app.

  • Add ScanToPayApp + ScanToPayAppDirectory covering the 13 supported apps, with three deeplink shapes (FNB/RMB's https handoff, Nedbank's nedbank:// scheme, and the generic masterpass.app.scheme:// form) and a URIComponentEncoder matching JS encodeURIComponent's allowed set
  • Add ScanToPayAppPickerView, a grid of app icons pushed from the QR screen behind a new "See Scan to Pay apps" button; failing to open an app surfaces an inline message rather than failing silently
  • Rename QRVariant.showsQRReferenceRow to supportsAppDeeplinks and turn it on for Scan to Pay, so QRDetails keeps the qrCode the deeplinks need; SnapScan is unchanged
  • Gate the new elements by audience: customer-facing gets the QR number, the apps button and "Open any Scan to Pay app…" copy, merchant-facing keeps the QR code and scan instruction
  • Gate the bank transfer copy buttons the same way — they're useless on a merchant-facing display where the customer can't tap them
  • Add ScanToPayAppDirectoryTests (deeplink shapes, encoding, initials) and UIElementVisibilityTests, plus previews for both audiences
Screenshot iPhone 18 Pro 2026-10-08 at 17 42 33

…r UI

  Scan to Pay customers on a phone can now hand off to their banking app
  instead of scanning the QR code on their own screen. The QR number the
  API already returns is used to build a Masterpass deeplink per app.

  - Add ScanToPayApp + ScanToPayAppDirectory covering the 13 supported
    apps, with three deeplink shapes (FNB/RMB's https handoff, Nedbank's
    nedbank:// scheme, and the generic masterpass.app.scheme:// form) and
    a URIComponentEncoder matching JS encodeURIComponent's allowed set
  - Add ScanToPayAppPickerView, a grid of app icons pushed from the QR
    screen behind a new "See Scan to Pay apps" button; failing to open an
    app surfaces an inline message rather than failing silently
  - Rename QRVariant.showsQRReferenceRow to supportsAppDeeplinks and turn
    it on for Scan to Pay, so QRDetails keeps the qrCode the deeplinks
    need; SnapScan is unchanged
  - Gate the new elements by audience: customer-facing gets the QR number,
    the apps button and "Open any Scan to Pay app…" copy, merchant-facing
    keeps the QR code and scan instruction
  - Gate the bank transfer copy buttons the same way — they're useless on
    a merchant-facing display where the customer can't tap them
  - Add ScanToPayAppDirectoryTests (deeplink shapes, encoding, initials)
    and UIElementVisibilityTests, plus previews for both audiences
@peter-paystack peter-paystack self-assigned this Oct 8, 2026
@peter-paystack peter-paystack added the enhancement New feature or request label Oct 8, 2026
@peter-paystack
peter-paystack marked this pull request as ready for review October 9, 2026 11:27
zaheer-paystack
zaheer-paystack previously approved these changes Oct 9, 2026
  The ScanToPayApps imagesets were committed with empty 1x slots, so
  every app row in the Scan to Pay list rendered a blank icon.

  - Add the 13 missing PNGs (Absa, Avo, Capitec, FNB, Instapay, Nedbank
    Money, Nedbank Scan to Pay, RMB, Scan to Pay, Spot, Standard Bank,
    Telkom Pay, Vodapay)
  - Point each imageset's 1x entry at its filename
  - Add ScanToPayAppDirectoryTests.testEveryAppIconLoadsFromTheBundle so
    a missing or misnamed asset fails CI instead of shipping blank
@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
0.0% Coverage on New Code (required ≥ 80%)

See analysis details on SonarQube Cloud

@peter-paystack
peter-paystack merged commit 1b73285 into main Oct 12, 2026
7 of 10 checks passed
@peter-paystack
peter-paystack deleted the feature/audience-gate-the-QR-bank-transfer-UI branch October 12, 2026 07:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants