Werte
- Geldbeträge werden in JSON als ganzzahlige Centwerte übertragen.
- Datum und Uhrzeit werden als ISO-Werte ausgegeben.
- Beleg-Rohdaten werden Base64-codiert geliefert.
- OID-Felder enthalten interne Portalum-Objektkennungen.
Schnittstelle
Der Dienst nimmt HTTP-Anfragen entgegen, prüft Authentisierung und Nutzdaten und leitet aktive Endpunkte an die Portalum-Verarbeitung weiter.
jsaService.ctl übernimmt HTTP-Methode, Endpunkt, Header und Body.OPTIONS, APITEST, KEEPALIVE und AUTHINFO werden als technische Serviceaufrufe behandelt.frmJsaMain.frm ordnet den großgeschriebenen Endpunkt dem aktiven Handler zu._old oder einem Versionspräfix sind keine aktiven Endpunkte. Maßgeblich ist das Routing in frmJsaMain.frm.| Aufruf | Antwort | Zweck |
|---|---|---|
OPTIONS | CORS-/Preflight-Antwort | Beantwortet die technische Voranfrage eines Clients. |
APITEST | HTTP 222 | Prüft Dienst, Routing und technische Erreichbarkeit. |
KEEPALIVE | HTTP 206 ohne Body | Bestätigt die Erreichbarkeit mit minimaler Nutzlast. |
GET AUTHINFO | Authentisierungshinweis | Liefert Informationen zur erwarteten Authentisierung. |
Diese technischen Aufrufe werden vor der Fachauthentisierung behandelt. Fachaufrufe können den Header X-API-Key und/oder den HTTP-Header Authorization: Basic … benötigen. Zugangsdaten und Schlüssel dürfen weder in URLs noch in allgemein zugänglichen Protokollen stehen.
| Endpunkt | Zweck | Zentrale Eingabe |
|---|---|---|
DBINFO | Datenbank- und Programmversionen | keine fachlichen Felder |
READERLIST | Reader, Passage, Standort und Zonen | keine fachlichen Felder |
PASSAGENLIST | Passagen mit Richtung und Standort | keine fachlichen Felder |
SESSIONSTART | Neue Verkaufssitzung starten | Device.ID, Device.Name |
SESSIONINFO | Sitzung prüfen und Status melden | Gerät und SessionID |
SESSIONEND | Sitzung auswerten oder abschließen | SessionID, Closing |
ARTIKELLIST | Verkäufliche Artikel liefern | SessionID, optionale Filter |
CARDINFO | Ticket-/Karteninformation prüfen | OID, Barcode oder RFID |
VALUECARDINFO | Wertkarte und Guthaben lesen | OID oder CardCode |
VALUECARDCHANGE | Wertkarte laden oder entladen | Sitzung, Karte, Charge/Discharge |
EXECUTESALE | Artikel verkaufen, Tickets und Beleg erzeugen | Sitzung, Items, Zahlung |
STOCKCHANGE | Kassenbestand verändern | Sitzung, Typ und Betrag |
SESSIONSTART| Richtung | Feld | Bedeutung |
|---|---|---|
| Request | Device.ID | Kennung des aufrufenden Geräts. |
| Request | Device.Name | Bezeichnung des Geräts. |
| Request | Stock | Optionaler Anfangsbestand in Cent. |
| Response | Session.ID, Session.Start | Kennung und Startzeit der Sitzung. |
| Response | User.ID, User.Name | Zugeordneter Portalum-Benutzer. |
| Response | Station.ID, Station.Name | Zugeordnete Verkaufsstation. |
{
"Device": { "ID": "POS-01", "Name": "Webkasse Eingang" },
"Stock": 25000
}
SESSIONINFO| Richtung | Felder | Bedeutung |
|---|---|---|
| Request | DeviceID, DeviceName, SessionID | Gerät und zu prüfende Sitzung. |
| Request | Stock, Status, Info | Optionale Bestands- und Statusmeldung des Clients. |
| Response | Open | Zeigt, ob die Sitzung geöffnet ist. |
| Response | Session.End | Ende einer geschlossenen Sitzung. |
| Response | Station.*, Session.*, User.* | Detaildaten einer offenen Sitzung. |
SESSIONEND| Richtung | Feld | Bedeutung |
|---|---|---|
| Request | SessionID | Zu beendende beziehungsweise auszuwertende Sitzung. |
| Request | Closing | Bei true wird die Sitzung abgeschlossen. |
| Request | Stock | Bei Abschluss übermittelter Endbestand in Cent. |
| Response | TurnoverCash | Barumsatz in Cent. |
| Response | TurnoverElectronic | Elektronischer Umsatz in Cent. |
| Response | Closed | Bestätigung des Sitzungsabschlusses. |
| Response | DebugInfo | Optionale technische Zusatzinformation. |
DBINFODie Antwort enthält DB.UUID, DB.Type, DB.Name, DB.Version, DLL Version und App Version. Damit kann ein Client Zielsystem und kompatible Versionen protokollieren.
READERLISTJeder Eintrag enthält OID, Name, Passage (Name, OID), Standort (name, OID), Ausgangs- und Zielzone (Zone.From.*, Zone.To.*), Typ (Type.ID, Type.Name) und Reader.
PASSAGENLISTJede Passage liefert OID, Caption, Number, Standort (Location.ID, Location.Name) sowie Ausgangs- und Zielzone (FromZone.*, ToZone.*).
ARTIKELLIST| Richtung | Felder | Bedeutung |
|---|---|---|
| Request | SessionID | Aktive Verkaufssitzung. |
| Request | OnlyOrderman, OnlyExtern | Optionale, gegenseitig ausschließende Artikelfilter. |
| Response | OID, Caption, ArticleNo, EANCode | Identifikation und Bezeichnung. |
| Response | Price, Group, ShortCode | Preis in Cent und Verkaufszuordnung. |
| Response | Infos, Additional | Zusatzinformationen des Artikels. |
| Response | Ticket.Title1, Ticket.Title2, Ticket.Advertisement | Tickettexte. |
| Response | Index.Export, Index.Individual | Technische Indexwerte. |
| Response | Personalization | required oder no. |
CARDINFODie Anfrage muss genau einen geeigneten Identifikator enthalten: OID, Barcode oder RFID. Transaction steuert optional die transaktionsbezogene Behandlung.
| Gruppe | Responsefelder |
|---|---|
| Identifikation | OID, RFID, Barcode, Referenz |
| Kunde und Herkunft | CustomerOID, Customer, Origin |
| Ticket | Type, TypeInfo, Title, Artikel, Preis, Tages Aufschlag |
| Gültigkeit | ValidFrom, ValidTo, Valid, Disabled, Canceled, Blocked |
| Veranstaltung/Sitz | Ort, Block, Reihe, Sitz, Tarif und Saisonfelder |
| Zutritt | Recht, Points, IsRFID, CancellationCode, Production |
Wird keine Karte gefunden, enthält die Antwort ein entsprechendes Info-Feld.
VALUECARDINFODie Anfrage identifiziert die Wertkarte über OID oder CardCode. Die Antwort enthält OID, CardCode, Kunde (Customer.OID, Customer.Name), Title, Value.Min, Value.Max, Credit, AccountNumber, Discounts, IsRFID und Blocked. Bei unbekannter Karte wird Info: Not Found geliefert.
VALUECARDCHANGE| Richtung | Felder | Bedeutung |
|---|---|---|
| Request | SessionID | Aktive Verkaufssitzung. |
| Request | OID oder CardCode | Genau eine Wertkartenkennung. |
| Request | Charge oder Discharge | Genau eine Änderung, als Centwert. |
| Request | PaymentMethod, PaymentCardNumber | Zahlungsart und gegebenenfalls Kartennummer. |
| Response | Wertkartendaten, Charge/Discharge | Aktualisierter Stand und ausgeführte Änderung. |
| Response | Receipt.Number, Receipt.Raw, Receipt.RawQRCode | Belegnummer, Base64-Beleg und QR-Daten. |
Der Handler prüft Mindest-/Höchstwerte, Sperren und den zulässigen Kredit, bevor er die Buchung ausführt.
EXECUTESALE| Richtung | Felder | Bedeutung |
|---|---|---|
| Request | SessionID | Aktive Verkaufssitzung. |
| Request | Items[].OID, Items[].Amount, Items[].Price | Artikel, Menge und Preis in Cent. |
| Request | PaymentValue, PaymentMethod | Zahlbetrag in Cent und Zahlungsart. |
| Request | PaymentCardType, PaymentCardName, PaymentCardNumber | Optionale Angaben einer Kartenzahlung. |
| Response | Tickets[].OID, Referenz, Barcode | Erzeugte Tickets. |
| Response | Receipt.Number, Receipt.Raw, Receipt.RawQRCode | Belegnummer, Base64-Beleg und QR-Daten. |
| Response | BonPrinter, TicketPrinter | Für Beleg und Tickets vorgesehene Drucker. |
{
"SessionID": 4711,
"Items": [
{ "OID": 1001, "Amount": 2, "Price": 1250 }
],
"PaymentValue": 2500,
"PaymentMethod": "CASH"
}
STOCKCHANGEDie Anfrage enthält SessionID, Type und Amount in Cent. Die Antwort liefert Success, Session.ID, Session.Name, Type, Amount und Info.
| Situation | Typische Antwort |
|---|---|
| Authentisierung fehlt oder ist ungültig | HTTP 401 mit einem Servicefehler unter error. |
| Endpunkt fehlt | HTTP 400 mit verständlicher Meldung. |
| Inhaltslänge passt nicht | HTTP 400; Request wird nicht an den Fachhandler übergeben. |
| Endpunkt ist unbekannt | HTTP 404 aus dem aktiven Router. |
| Fachfeld fehlt oder ist ungültig | Struktur mit Code, Message, Number, Description und Source. |
{
"Code": 406,
"Message": "Fachliche Prüfung fehlgeschlagen",
"Number": 0,
"Description": "Beschreibung der Ursache",
"Source": "RequestExecuteSale"
}
{
"error": {
"code": 401,
"message": "Authentisierung erforderlich"
}
}
Clients müssen deshalb sowohl HTTP-Statuscodes als auch beide JSON-Fehlerformen auswerten. Ein HTTP-Erfolg allein bestätigt noch keine erfolgreiche Fachbuchung.
APITEST die Erreichbarkeit des Diensts prüfen.AUTHINFO die erwartete Authentisierung ermitteln.Session.ID für nachfolgende Aufrufe verwenden.SESSIONEND abschließen.| Datei | Verantwortung |
|---|---|
Frontends\Portalum\JsonServerAPI\jsaService.ctl | HTTP-Kommunikation, technische Endpunkte, CORS, Authentisierung und Vorprüfung. |
Frontends\Portalum\JsonServerAPI\frmJsaMain.frm | Aktives Routing und fachliche Request-Handler. |
Frontends\Portalum\JsonServerAPI\ProcessJsonData.cls | JSON-Verarbeitung und fachliche Hilfsfunktionen. |
Frontends\Portalum\JsonServerAPI\clsRequest.cls | Anfrageobjekt, Header und Nutzdaten. |