Integrácia QR platieb
QR platby umožňujú uskutočnenie transakcie prostredníctvom QR kódu v eKase.
Odkazy
- PDF Verzia
- Potvrdenie QR platieb (integračné) - Webová aplikácia na simulovanie banky v integračnom prostredí.
- Overenie QR platby (integračné) - Webová aplikácia na overenie stavu QR platby
Integračný IBAN: SK4509000000000286241634 — majiteľ účtu: VAROS TRADE s.r.o.
Existujú dva hlavné prístupy k integrácii:
Optimálna integrácia
Pri tomto spôsobe úhrady dokladu sa najprv uskutoční platba pomocou QR kódu pomocou dotazu QVERKO. Následne podľa výsledku z notifikačného servera sa doklad buď vytlačí, alebo sa platba uskutoční pomocou iného typu platidla. Ak výsledok dotazu nepotvrdí zrealizovanie platby je možné do 2 hodín požiadať o notifikáciu pomocou dotazu NOTIFY.
Konfiguračné požiadavky
- V tomto prípade v konfigurácii eKasy nemôže byť vybraté platidlo, ktoré sa používa na úhradu QR kódom, aby si ho naša aplikácia sama neodchytávala.
Timeout nastavenia
FT5000
Len ak komunikujete cez tlačový manažér, nastavte v TM5000:
- Záložka Preberanie tlače → Time Info = 15 000 ms
FT4000
Nastaviť timeouty v TM5000WIN:
- Záložka Preberanie tlače → Time Info = 15 000 ms
- Záložka QR code → Bank Timeout = 60 000 ms
Timeout pokrýva čas potrebný na celý priebeh: získavianie identifikátora, zosnímanie QR mobilom, potvrdenie v bankovej aplikácii a vrátenie výsledku.
Identifikátor transakcie QrId
Odporúčame rozšíriť DB o stĺpec QrId – jednoznačný identifikátor transakcie notifikačného servera FS.
- Identifikátor QrId by mal byť uvedený aj na bankovom výpise na identifikáciu platby
- Identifikátor QrId sa použije pri reklamácii alebo dohľadaní platby
- Príklad:
QR-ab29e346f1d841c8a95a63d857490818
Tok transakcie
-
Predajná aplikácia si pred tlačou dokladu vyžiada uskutočnenie QR platby cez eKasu.
-
eKasa zobrazí / vytlačí QR kód na zosnímanie mobilom na vykonanie platby.
-
Predajná aplikácia si počká na odpoveď z eKasy.
- Poznámka: Pri transakcii sa vykonáva postupnosť úkonov a treba počítať s dlhšou dobou čakania na odpoveď:
- Získanie a zobrazenie identifikátora QR platby
- Zosnímanie QR kódu mobilom
- Potvrdenie platby v bankovej aplikácii
- Prevedenie platby z banky kupujúceho do banky predávajúceho
- Verifikácia platby bankou
- Verifikácia platby eKasou pomocou notifikačného servera
- Odoslanie odpovede do PC
- Poznámka: Pri transakcii sa vykonáva postupnosť úkonov a treba počítať s dlhšou dobou čakania na odpoveď:
-
Po verifikácii platby predajná aplikácia vystaví doklad, ktorý má v platidle určenom na evidenciu QR platieb výšku uhradenej sumy. Evidovaná suma sa použije pri vyčíslení a následnej tlači uzávierok.
-
Ak sa nepodarí verifikovať platbu, predajná aplikácia by mala ponúknuť iný typ úhrady dokladu.
| Predajná aplikácia | Mobil | Banková aplikácia |
|---|---|---|
Vyžiadanie QR platby![]() eKASA - zobrazenie QR kódu | Odfotografovanie QR kódu![]() Klikom na odkaz sa spustí banková aplikácia | Zobrazenie platby![]() Kupujúci - kontrola a potvrdenie platby |
Jednoduchá integrácia
Tento spôsob je možné použiť pri predajných aplikáciách s minimálnou úpravou programu. Predĺži sa čas čakania na odpoveď a QR platbe sa priradí v konfigurácii zodpovedajúce platidlo.
Konfiguračné požiadavky
- V konfigurácii eKasy musí byť vybraté platidlo, ktoré sa používa na úhradu QR kódom.
Timeout nastavenia
FT5000
Len ak komunikujete cez tlačový manažér, nastavte v TM5000:
- Záložka Preberanie tlače → Time Info = 90 000 ms
FT4000
Nastaviť timeouty v TM5000WIN:
- Záložka Preberanie tlače → Time Info = 90 000 ms
- Záložka QR code → Bank Timeout = 60 000 ms (rovnako ako pri optimálnej integrácii)
Výhody a nevýhody
- Výhoda: Minimálna úprava programu
- Nevýhoda: Najprv sa odošle doklad a následne sa predajná aplikácia dozvie, či platba prebehla v poriadku.
Tok transakcie
- Predajná aplikácia odošle do tlačiarne doklad, kde v zvolenom platidle pošle hodnotu QR platby.
- Ak sa v doklade nachádza platidlo QR platby, eKasa zobrazí / vytlačí QR kód na zosnímanie mobilom.
- eKasa verifikuje platbu:
- Ak je verifikácia úspešná → vytlačí sa pokladničný doklad
- Ak sa platbu nepodarí verifikovať → zobrazí / vytlačí sa chybové hlásenie s číslom chyby
- Poznámka: Pri verifikácii treba rátať s dlhšou dobou odpovede
- Predajná aplikácia si vyčíta info o doklade:
ESC IaleboESC ! I - Ak doklad skončí s chybou, predajná aplikácia by mala vystaviť nový doklad a ponúknuť iný typ úhrady.
Poznámka (FT4000): Pri jednoduchej integrácii a správne nakonfigurovanom TM5000WIN je možné banku simulovať priamo cez rozhranie tlačového manažéra bez externej aplikácie.
Typy QR platieb
Varos eKasa podporuje nasledujúce typy QR platieb:
QVERKO
Tento typ platby sa použije na uskutočnenie okamžitej úhrady pokladničného dokladu alebo úhrady faktúry pomocou QR kódu podľa nového zákona o registračných pokladniciach. Predajná aplikácia si pred tlačou dokladu vyžiada uskutočnenie QR platby cez eKasu pomocou príkazu QVERKO. Na základe požiadavky eKasa zobrazí / vytlačí výzvu na vykonanie QR platby a stanovenú dobu čaká na potvrdenie platby z Notifikátora platieb. eKasa automaticky vráti informáciu k danej platbe. Ak je odpoveď kladná predajná aplikácia vystaví doklad. Ak platba neprepehne do danej doby, predajná aplikácia má možnosť overiť si danú transakciu pomocou dotazu NOTIFY s pôvodným QR identifikátorom alebo použije na úhradu iný typ platidla.
- Výška platby je obmedzená limitom, aký má nastavený kupujúci vo svojej banke
- Vykonaná úhrada sa považuje za bezhotovostný spôsob úhrady dokladu
Právne obmedzenia na doklad:
| Zákon | Limit |
|---|---|
| Zákon o obmedzení platieb v hotovosti 394/2012 Z.z. | max. 5 000€ |
| Zákon o dani z pridanej hodnoty 222/2004 Z.z. (DPH odpočet) | max. 400€ |
| Platba QR kódom | bez limitu |
| Platba Kartou | povolený limit karty |
PAYME
Okamžitá bezhotovostná úhrada faktúry. Tento typ úhrady nepodlieha zákonu o registračných pokladniciach a ani sa netlačí žiaden pokladničný doklad. Slúži na rýchle vykonanie úhrady faktúry. Zosnímaním QR kódu si mobilná banková aplikácia automaticky predplní údaje z faktúry potrebné na vykonanie platby názov a účet predávajúceho, suma k úhrade, VS, KS, SS
- Informácie o vykonanej úhrade príde na mobil majiteľa účtu k danému IBANu
- eKasa nemá notifikáciu o danej platbe
- Výška platby je obmedzená iba limitom, aký má nastavený kupujúci vo svojej banke na bankové transakcie
QRCODE
Vyžiadanie QR identifikátora platby ku konkrétnej eKase z API servera a následné vygenerovanie payme reťazca, ktorý obsahuje všetky informácie na vykonanie QR platby. Reťazec môže použiť predajná aplikácia kvôli vlastnému zobrazeniu QR platby na monitore počítača, alebo inom zariadení.
- Predajná aplikácia môže generovaný reťazec použiť na vlastné zobrazenie QR kódu na monitore počítača, alebo monitore samoobslužného automatu
- Následne po uskutočnení platby mobilnou aplikáciou banky sa musí volať dotaz NOTIFY na overenie zrealizovania QR platby eKasou
NOTIFY
Overenie zrealizovania QR platby na základe QR identifikátora. Notifikácia je možná maximálne 2 hodiny od realizovania platby.
- Slúži na overenie stavu vykonanej QR platby
- Používa sa identifikátor transakcie QrId
⚠️ Dôležité: Hodnota
Valuev dotaze NOTIFY musí byť zhodná s hodnotou použitou pri vytvorení QR kódu, pretože sa overuje kontrolný súčet platby.
DISPLAY
Funkcia zákazníckeho displeja – zobrazenie dvojriadkového textu alebo ľubovoľného QR kódu na dispeji.
- Možnosť použiť QR kód napríklad na presmerovanie na e-shop alebo internetovú stránku predávajúceho
- Pri tejto funkcii sa nevracia žiadna JSON odpoveď – vráti sa iba potvrdenie:
ACK NULL NULL - 0x06 0x00 0x00 - Pri chybe sa vráti:
NAK - 0x15
Opätovné zobrazenie QR kódu
Ak zákazník nestihol načítať QR kód, je možné ho opätovne zobraziť pomocou dotazu DISPLAY naplneného hodnotami z predchádzajúceho dotazu QVERKO. Následne je nutné volať NOTIFY na overenie zrealizovania platby.
Platnosť QR kódu je 2 hodiny od jeho vygenerovanie.
Vstupné a výstupné súbory
Vstup
blocek.txt
Výstup
info.txt
info.json
fm_sts.bin
info.txt vs info.json
| Pole | info.txt | info.json |
|---|---|---|
| Číslo dokladu | ✓ | ✓ |
| UID dokladu | ✓ | ✓ |
| Stav dokladu | ✓ | ✓ |
| Obraty za daňové hladiny | 3 hladiny | všetky hladiny |
| Typ dokladu | – | ✓ |
| QR Id | – | ✓ |
Odporúčanie: Po každom doklade čítajte info.json a kontrolujte:
- Zvýšenie čísla dokladu oproti poslednému
- Stav dokladu
- Uložte UID (jedinečné číslo dokladu pridelené finančnou správou)
- Uložte QR Id pre prípadnú reklamáciu alebo overenie platby
JSON API
JSON rozhranie obsahuje dva súbory:
- QR-REQUEST - Odoslanie požiadavky na QR platbu
- QR-RESPOND - Odpoveď na požiadavku sa vráti automaticky
QR-REQUEST
Odoslanie požiadavky na QR platbu
- Syntax:
<ESC>QR-REQUEST<ESC>e
{
"ReceiptFormat": "VAROS_JSON",
"Version": "1.0.0",
"ReceiptType": "QR",
"type": "QVERKO",
"Id": "PQR251200001",
"QrId": "QR-ab29e346f1d841c8a95a63d857490818",
"Line1": "Celkom EUR",
"Line2": " 25.00",
"Value": "25.00",
"QrCode": {
"data": "qrData",
"printOnPrn": false,
"showOnDsp": true,
"timeout": 30
},
"Bank": {
"VS": "202500053",
"SS": "",
"KS": "0008",
"Msg": "Platba Faktury"
}
}
| Pole | Popis |
|---|---|
| ReceiptType | Interné označenie QR platby |
| type | Určuje sa typ QR kódu na zobrazenie/tlač QVERKO - Úhrada pokladničného dokladu pomocou QR kódu cez Notifikátor FS PAYME - Priama platba pomocou QR kódu pomocou VS, KS, SS QRCODE - iba vygenerovanie reťazca ktorý je zobrazený v QR kóde kvôli vlastnému zobrazeniu QR kódu predajnou aplikáciou NOTIFY - overenie zrealizovania platby na základe identifikátora transakcie QrId DISPLAY - zobrazenie Line1 a Line2 a qrData na obrazovke displeja |
| Id | Jednoznačný identifikátor QR platby PQR+YY+MM+poradové číslo dokladu. Jednoznačný identifikátor Id si môže zvoliť aj programátor maximálne 15 znakov |
| QrId | Identifikátor transakcie notifikačného servera FS parameter. Na základe QrId sa dá spätne vyžiadať verifikácia platba do 2 hodín od uskutočnenia platby.Type NOTIFY - Povinny Udaj |
| Line1 | Text na prvom riadku displeja maximálne 20 znakov. Type QVERKO,PAYME - Line1 je automaticky prepísaná textom Celkom EUR |
| Line2 | Text na druhom riadku displeja maximálne 20 znakov. Type QVERKO,PAYME - Line2 je automaticky prepísaná výškou sumy k úhrade |
| Value | Hodnota výšky úhrady QR kódom |
| QrCode | Definícia reťazca zobrazeného v QR kóde |
| - data | Reťazec, ktorý reprezentuje QR kód. Type QVERKO,PAYME - data je automaticky dopočítaný |
| - printOnPrn | Tlač QR kódu na eKase.true - tlač QR kódu na eKasefalse - QR kód sa netlačí |
| - showOnDsp | true - zobrazenie QR kódu na pripojenom zákazníckom displejifalse - QR kód sa nezobrazuje |
| - timeout | Čas zobrazenia QR kódu na displeji v sekundách |
| Bank | Bankové údaje predávajúceho, ak údaje nie sú vyplnené, automaticky sa predplnia z konfigurácie eKasa |
| - VS | Variabilný symbol |
| - SS | Špecifický symbol |
| - KS | Konštantný symbol |
| - Msg | Správa pre kupujúceho |
Premenná type v JSON formáte definuje význam JSON príkazu. V závislosti na premennej type sú vyžadované premenné podľa nasledujúcej tabuľky.
Legenda:
1- premenná sa musí vyplniť0/1- premenná sa použije ak je vyplnená (ak sa neuvedie a je potrebná, naplní sa údajom z konfigurácie eKasy)0- premenná sa pri spracovaní nepoužije
| Premenná | QVERKO | PAYME | QRCODE | NOTIFY | DISPLAY |
|---|---|---|---|---|---|
| ReceiptFormat | 1 | 1 | 1 | 1 | 1 |
| Version | 1 | 1 | 1 | 1 | 1 |
| ReceiptType | 1 | 1 | 1 | 1 | 1 |
| Id | 0/1 | 0/1 | 1 | 1 | 0 |
| QrId | 0 | 0 | 0 | 1 | 0 |
| Line1 | 0 | 0 | 0 | 0 | 0/1 |
| Line2 | 0 | 0 | 0 | 0 | 0/1 |
| Value | 1 | 1 | 1 | 1 | 0 |
| QrCode | |||||
| QrCode.data | 0 | 0 | 0 | 0 | 0/1 |
| QrCode.printOnPrn | 0/1 | 0/1 | 0 | 0 | 0 |
| QrCode.showOnDsp | 0/1 | 0/1 | 0 | 0 | 0 |
| QrCode.timeout | 0/1 | 0/1 | 0 | 0 | 0 |
| Bank | |||||
| Bank.IBAN | 0 | 0/1 | 0 | 0 | 0 |
| Bank.VS | 0 | 1 | 0 | 0 | 0 |
| Bank.SS | 0 | 0/1 | 0 | 0 | 0 |
| Bank.KS | 0 | 0/1 | 0 | 0 | 0 |
| Bank.Msg | 0/1 | 0/1 | 0/1 | 0 | 0 |
QR-RESPOND
Odpoveď na požiadavku sa vráti automaticky
- Syntax:
ACK + počet znakov odpovede QR-RESPOND + odpoveď QR-RESPOND - Chybový stav: Pri chybe sa vráti
NAK - 0x15
{
"ReceiptFormat": "VAROS_JSON",
"Version": "1.0.0",
"ReceiptType": "QR",
"type": "QVERKO",
"Id": "PQR251200001",
"QrId": "QR-ab29e346f1d841c8a95a63d857490818",
"QrCode": "https://payme.sk/?V=1&IBAN=SK4509000000000286241634&AM=25.00&CC=EUR&PI=%2FVS%2FSS%2FKS0008&MSG=Platba+Faktury&CN=Varos+Trade",
"Value": "0.00",
"Date": "2025-09-17",
"Time": "15:30:55",
"IBAN": "SK4509000000000286241634",
"errCode": 1,
"errMsg": "textový popis chybovej správy"
}
| Pole | Popis |
|---|---|
| Id | Jednoznačný identifikátor QR platby PQR+YY+MM+poradové číslo dokladu |
| QrId | Identifikátor transakcie notifikačného servera FS |
| QrCode | Vygenerovaný reťazec ktorý je zobrazený v QR kóde (parameter bol pridaný kvôli vlastnému zobrazeniu QR kódu predajnou aplikáciou na displeji počítača) |
| Value | Hodnota výšky úhrady QR kódom |
| Date | Dátum transakcie YYYY-MM-DD |
| Time | Čas transakcie HH:MM:SS |
| IBAN | IBAN predávajúceho |
| errCode | 1 - transakcia prebehla v poriadku-1500 - Nepodarilo sa získať QrId-1501 - Notifikačný server neodpovedá-1502 - Nepodarilo sa spojiť s notifikačným servrom-1503 - Zamietnutie transakcie-1504 - Neoverenie transakcie / timeout notifikačného servera-1505 - Chyba kontrolného súčtu prijatých údajoch z NOP servera |
| errMsg | Textový popis chybovej správy |
Na základe premennej type vo vstupnom JSON formáte sa vrátia jednotlivé premenné v JSON odpovedi podľa nasledujúcej tabuľky.
Legenda:
1- premenná bude vyplnená0- premenná sa nevyplní
| Premenná | QVERKO | PAYME | QRCODE | NOTIFY | DISPLAY |
|---|---|---|---|---|---|
| ReceiptFormat | 1 | 1 | 1 | 1 | 0 |
| Version | 1 | 1 | 1 | 1 | 0 |
| ReceiptType | 1 | 1 | 1 | 1 | 0 |
| type | 1 | 1 | 1 | 1 | 0 |
| Id | 1 | 1 | 1 | 1 | 0 |
| QrId | 1 | 0 | 1 | 1 | 0 |
| QrCode | 0 | 0 | 1 | 0 | 0 |
| Value | 1 | 1 | 1 | 1 | 0 |
| Date | 1 | 0 | 0 | 1 | 0 |
| Time | 1 | 0 | 0 | 1 | 0 |
| IBAN | 1 | 1 | 1 | 1 | 0 |
| errCode | 1 | 0 | 1 | 1 | 0 |
| errMsg | 1 | 0 | 1 | 1 | 0 |
Príklady
V nasledujúcich príkladoch sú uvedené JSON požiadavky a odpovede pre jednotlivé typy QR platieb.
QVERKO
QR-REQUEST
{
"ReceiptFormat": "VAROS_JSON",
"Version": "1.0.0",
"ReceiptType": "QR",
"type": "QVERKO",
"Id": "PQR251200001",
"Value": "25.00",
"QrCode": {
"printOnPrn": false,
"showOnDsp": true,
"timeout": 30
},
"Bank": {
"Msg": "Pokladnicny doklad 25123100069"
}
}
QR-RESPOND
{
"ReceiptFormat": "VAROS_JSON",
"Version": "1.0.0",
"ReceiptType": "QR",
"type": "QVERKO",
"Id": "PQR251200001",
"QrId": "QR-ab29e346f1d841c8a95a63d857490818",
"Value": "25.00",
"Date": "2025-09-17",
"Time": "15:30:55",
"IBAN": "SK4509000000000286241634",
"errCode": 1,
"errMsg": "textovy popis chybovej spravy"
}
PAYME
QR-REQUEST
{
"ReceiptFormat": "VAROS_JSON",
"Version": "1.0.0",
"ReceiptType": "QR",
"type": "PAYME",
"Id": "PQR251200001",
"Value": "25.00",
"QrCode": {
"printOnPrn": false,
"showOnDsp": true,
"timeout": 30
},
"Bank": {
"IBAN": "SK4509000000000286241634",
"VS": "202500053",
"SS": "122025",
"KS": "0008",
"Msg": "Bezhotovostna uhrada Faktury"
}
}
QR-RESPOND
{
"ReceiptFormat": "VAROS_JSON",
"Version": "1.0.0",
"ReceiptType": "QR",
"type": "PAYME",
"Id": "PQR251200001",
"Value": "15000.00",
"IBAN": "SK4509000000000286241634"
}
QRCODE
QR-REQUEST
{
"ReceiptFormat": "VAROS_JSON",
"Version": "1.0.0",
"ReceiptType": "QR",
"type": "QRCODE",
"Id": "PQR251200001",
"Value": "25.00",
"Bank": {
"Msg": "Pokladnicny doklad 25123100069"
}
}
QR-RESPOND
{
"ReceiptFormat": "VAROS_JSON",
"Version": "1.0.0",
"ReceiptType": "QR",
"type": "QRCODE",
"Id": "PQR251200001",
"QrId": "QR-ab29e346f1d841c8a95a63d857490818",
"QrCode": "https://payme.sk/?V=1&IBAN=SK4509000000000286241634&AM=25.00&CC=EUR&PI=%2FVS%2FSS%2FKS0008&MSG=Platba+Faktury&CN=Varos+Trade",
"Value": "25.00",
"IBAN": "SK4509000000000286241634",
"errCode": 1,
"errMsg": "textový popis chybovej správy"
}
NOTIFY
QR-REQUEST
{
"ReceiptFormat": "VAROS_JSON",
"Version": "1.0.0",
"ReceiptType": "QR",
"type": "NOTIFY",
"Id": "PQR251200001",
"QrId": "QR-ab29e346f1d841c8a95a63d857490818",
"Value": "25.00"
}
QR-RESPOND
{
"ReceiptFormat": "VAROS_JSON",
"Version": "1.0.0",
"ReceiptType": "QR",
"type": "NOTIFY",
"Id": "PQR251200001",
"QrId": "QR-ab29e346f1d841c8a95a63d857490818",
"Value": "25.00",
"Date": "2025-09-17",
"Time": "15:30:55",
"IBAN": "SK4509000000000286241634",
"errCode": 1,
"errMsg": "textový popis chybovej správy"
}
DISPLAY
QR-REQUEST
{
"ReceiptFormat": "VAROS_JSON",
"Version": "1.0.0",
"ReceiptType": "QR",
"type": "DISPLAY",
"Line1": "Akciova ",
"Line2": "ponuka ",
"QrCode": {
"data": "https://www.varos.sk/EKASA_SK/2026_Nove_legislativne_povinnosti.pdf",
"showOnDsp": true,
"timeout": 30
}
}


