Scan & Pay
Scan & Pay to płatność rachunku inicjowana kodem QR. Klient skanuje kod QR, OpenApp ustala na jego podstawie lokalizację i stanowisko, a następnie od razu pobiera od POS aktualny rachunek do zapłaty. OpenApp nie przechowuje żadnego stanu stanowiska między skanowaniami; każde skanowanie zaczyna od nowa.
Przepływ może rozpocząć się od jednego z dwóch kodów QR:
- Statyczny kod QR stanowiska przymocowany do stanowiska (stolika albo kiosku). Nie zawiera żadnych zakodowanych identyfikatorów.
- Kod QR na paragonie drukowany przez POS z zakodowanym odbiorcą napiwku. Gdy klient płaci, OpenApp przypisuje napiwek odbiorcy z paragonu.
Ten diagram jest logiczny. Pomija szczegóły trybu dostarczania; model dostarczania opisuje Architektura.
Typy wiadomości:
| Typ wiadomości | Kierunek | Cel |
|---|---|---|
| BillPreparationRequested | OpenApp -> POS | Poproś POS o przygotowanie rachunku dla zeskanowanego stanowiska. |
| BillPreparationResult | POS -> OpenApp | Zwróć przygotowany rachunek i identyfikator odbiorcy napiwku albo powód odrzucenia. |
| BillPaymentCompleted | OpenApp -> POS | Poinformuj POS, że płatność OpenApp powiodła się. |
| BillPaymentFailed | OpenApp -> POS | Poinformuj POS, że płatność OpenApp nie powiodła się; przygotowany stan powinien zostać zwolniony. |
| BillPaymentResult | POS -> OpenApp | Potwierdź albo odrzuć zastosowanie płatności OpenApp w POS. |
Jak kod QR wskazuje stanowisko
Z każdego kodu OpenApp ustala lokalizację i stanowisko, a następnie buduje orderContext wysyłany do POS.
- Kod QR stanowiska - statyczny, generowany raz dla stanowiska (stolika albo kiosku). Nie zawiera żadnych danych ani identyfikatorów - lokalizację,
stationIdorazstationKind(TABLEalboKIOSK) OpenApp ustala po swojej stronie. Bez odbiorcy napiwku. - Kod QR na paragonie - adres URL OpenApp, który POS tworzy w momencie drukowania (zobacz Budowanie kodu QR na paragon). Adres zawiera
stationIdoraztipRecipientIdosoby drukującej paragon. Przy skanowaniu OpenApp odczytuje z niego lokalizację,stationId,stationKindoraztipRecipientId.
W obu przypadkach powstały orderContext ma ten sam kształt:
{
"type": "STATION",
"stationId": "<rozwiązany z kodu QR>",
"stationKind": "TABLE" | "KIOSK"
}
Budowanie kodu QR na paragon
Kody QR na paragonach są dynamiczne, więc POS tworzy je samodzielnie w momencie drukowania - bez odpytywania OpenApp. POS składa adres URL OpenApp zawierający stationId oraz tipRecipientId osoby drukującej paragon.
Wartość kodu QR, którą POS powinien wygenerować:
https://o-app.co/R1/{stationId}_{tipRecipientId}
Obsługa minimalnego rachunku
Nie wszystkie systemy POS śledzą szczegółowe pozycje rachunku dla OpenApp. POS jest zobowiązany tylko do zwrócenia sumy do zapłaty; identyfikatory pozycji, ilości i ceny są opcjonalne. Odpowiedź zawierająca tylko sumę jest prawidłowa.
Słownik odrzuceń przygotowania rachunku: zobacz Powody odrzucenia przygotowania rachunku.
Odbiorca napiwku
OpenApp ustala odbiorcę napiwku z jednego z dwóch źródeł, w tej kolejności:
- Kod QR na paragonie - gdy klient zeskanował kod QR z paragonu, decyduje zakodowany w kodzie
tipRecipientId, niezależnie od tego, co POS zwróci później. BillPreparationResult.tipRecipientId- przy kodzie QR stanowiska (który nie zawiera odbiorcy napiwku) POS zwraca wBillPreparationResultodbiorcę napiwku dla stanowiska. Zwracaj go zawsze, gdy POS jest w stanie zidentyfikować odbiorcę.
Gdy żadne z tych źródeł nie jest dostępne, napiwek domyślnie trafia do rozliczenia merchanta. W obu przypadkach OpenApp używa tipRecipientId wyłącznie do przypisania napiwku.