Przejdź do głównej zawartości

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ściKierunekCel
BillPreparationRequestedOpenApp -> POSPoproś POS o przygotowanie rachunku dla zeskanowanego stanowiska.
BillPreparationResultPOS -> OpenAppZwróć przygotowany rachunek i identyfikator odbiorcy napiwku albo powód odrzucenia.
BillPaymentCompletedOpenApp -> POSPoinformuj POS, że płatność OpenApp powiodła się.
BillPaymentFailedOpenApp -> POSPoinformuj POS, że płatność OpenApp nie powiodła się; przygotowany stan powinien zostać zwolniony.
BillPaymentResultPOS -> OpenAppPotwierdź 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ę, stationId oraz stationKind (TABLE albo KIOSK) 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 stationId oraz tipRecipientId osoby drukującej paragon. Przy skanowaniu OpenApp odczytuje z niego lokalizację, stationId, stationKind oraz tipRecipientId.

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:

  1. 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.
  2. BillPreparationResult.tipRecipientId - przy kodzie QR stanowiska (który nie zawiera odbiorcy napiwku) POS zwraca w BillPreparationResult odbiorcę 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.