Veelvoorkomende problemen en troubleshooting
Symptomen, oorzaken en oplossingen voor problemen die we in het product kunnen verifiëren.
Staat je probleem hier niet bij? Mail support@rowie.io met screenshots en waar mogelijk het transactie-ID (of session-ID, of factuurnummer).
"Setup required" op Banking of Tap to Pay
Het Account-scherm van de mobiele POS toont een Setup required-badge op de Banking-rij, en Tap to Pay / Terminal Readers zijn uitgeschakeld, totdat Stripe Connect de onboarding heeft afgerond en charges zijn ingeschakeld.
- Vendor portal → Banking (zijbalk → groep FINANCE) → controleer de status.
- Als de onboarding niet compleet is, doorloop dan het hosted formulier van Stripe — het vertelt je precies wat er ontbreekt (ID, bankgegevens, bedrijfsinfo).
- Eerste opzet kan 1–2 dagen duren tot Stripe verifieert.
De "klaar om te chargen"-check in de app-code is connectStatus.hasConnectedAccount && connectStatus.chargesEnabled — beide moeten true zijn.
"Cannot delete location — it still has …"
Het portal blokkeert deactivering van een locatie als er afhankelijke records zijn. Het exacte bericht vermeldt wat er blokkeert. De checks (rowie-api/src/routes/locations.ts):
- Open of lopende table sessions — reken ze eerst af of annuleer ze.
- Menus, floor plans, actieve bookings, booking pages — wijs ze toe aan een andere locatie of verwijder ze eerst.
- Enige locatie in de organisatie — je kunt je laatste niet verwijderen.
Verplaats de afhankelijkheden en probeer het opnieuw.
"Cannot delete menu with open sessions or tabs"
Een menu (catalog) verwijdert niet zolang er nog sessies of tabs tegen open staan. Reken ze af of annuleer ze op de Tables-pagina en probeer dan opnieuw te verwijderen. Hetzelfde patroon geldt voor:
- Floor plans / tables met actieve sessies.
- Events / ticket tiers met verkochte tickets.
- Vendor subscription plans met actieve abonnees (annuleer of migreer ze eerst).
- Tip pools die niet in concept staan (alleen pools in concept zijn te verwijderen).
"Authentication failed" of vastgelopen op een scherm na lang inactief
Auth-tokens verlopen na 15 minuten; de mobiele app en het vendor portal verversen beide automatisch bij een 401. Mislukt de refresh (bijv. refresh-token ook verlopen na 7 dagen, of je hebt elders ingelogd en bent eraf gekickt), dan zie je een "Authentication failed"-toast en land je op login.
- Alleen mobiel: log je in op een tweede toestel, dan krijgt het eerste toestel SESSION_KICKED en wordt geforceerd uitgelogd — dit is bewust zo (bescherming tegen gestolen telefoons).
- Het vendor portal forceert geen single-session — meerdere tabs open houden mag.
Zit je vast midden in een scherm: log uit en weer in.
Een tab sluiten mislukt / "Payment failed"
Wanneer een opgeslagen kaart off-session wordt belast om een tab te sluiten en Stripe weigert, valt de sessie terug op open zodat je opnieuw kunt proberen. Veelvoorkomende oorzaken:
- Kaart vereist verse authenticatie / 3DS bij elke charge.
- Frauderegel van de uitgever op off-session charges.
- Onvoldoende saldo.
Bekende beperking: Stripe-idempotency-keys voor close-tab zijn 24 uur stabiel. Werd de eerste close-tab-poging geweigerd, dan retourneert direct opnieuw proberen met dezelfde kaart hetzelfde geweigerde intent. Workaround: doe in plaats daarvan een verse Tap to Pay-betaling, of laat de klant een nieuwe kaart opslaan.
"Payment setup required" in checkout
De mobiele POS toont dit als je probeert te chargen terwijl Stripe Connect niet volledig is opgezet. Zelfde oplossing als de "Setup required"-badge hierboven — rond de Banking-onboarding af.
Bonnen: verzenden en opnieuw verzenden
Tap to Pay-bonnen moeten expliciet worden verzonden — ze worden niet automatisch verzonden door Stripe bij card_present-transacties.
- Vul op het Payment Result-scherm direct na een charge het e-mailadres van de klant in en tik op Send receipt.
- Later: open een transactie in History → Send receipt.
Als bonnen niet aankomen, check eerst de spam en controleer dan of het e-mailadres op de transactie klopt.
Realtime data lijkt oud
De app gebruikt Socket.IO om updates te pushen (orders, sessions, tabs, menus, bookings, invoices, pay runs). TanStack Query is geconfigureerd met oneindige stale time en geen polling — invalidaties komen van socket-events.
Als iets oud lijkt:
- Pull-to-refresh op het scherm (mobiel) of herlaad de pagina (vendor portal).
- Log uit en weer in om een nieuwe socketverbinding af te dwingen.
- Controleer of de API-URL bereikbaar is vanaf je toestel.
De vendor-socket maakt automatisch opnieuw verbinding met verse tokens (dynamische auth-callback). De mobiele client probeert tot 10 reconnects met backoff tussen 1–5 s.
Gerate-limit (HTTP 429) op publieke menu / table / booking pages
De API rate-limit publieke preorder-, session- en booking-creatie per IP + session-ID om fraude te beperken (toegevoegd na het incident van april 2026). Normaal klantverkeer raakt dit niet. Triggert een load test of een per ongeluk retry-loop het, wacht dan tot het venster afloopt (een minuut) en probeer opnieuw.
Tap to Pay-knop is grijs
- Apple Tap to Pay-entitlement: bij een nieuw Stripe Connect-account duurt het 1–2 dagen voor Apple het toestel inschakelt.
- Banking niet actief: zie "Setup required" hierboven.
- Verkeerd toestel: Tap to Pay vereist iPhone XS of nieuwer op iOS 16.4+ met passcode, of NFC-Android (SDK 26+).
Account gemarkeerd voor review
Slaan fraudeheuristieken aan (geblokkeerde of mislukte charge-rate boven drempels), dan klapt review_status om naar needs_review en pauzeren automatische uitbetalingen. Neem contact op met support — zodra Rowie-medewerkers het account vanuit de admin-queue goedkeuren, hervatten uitbetalingen. Read-only productgebruik blijft werken.