akazie / pay-nexopos-terminal-modul
NexoPOS-Modul: Anbindung eines akazie-pay Kartenterminals (Payrexx ECR API) als Zahlungsart. Ein Terminal pro Kasse, Polling statt Webhook.
Package info
gitlab.xippo.net/akazie-it-public/akazie-pay-nexopos-terminal-modul.git
Type:nexopos-module
pkg:composer/akazie/pay-nexopos-terminal-modul
Requires
- php: ^8.2
- ext-curl: *
README
NexoPOS-Modul AkaziePay: bindet akazie-pay Kartenterminals (Payrexx-ECR-API, Kreditkarte/Twint) als Zahlungsart an die NexoPOS-Kasse an, statt den Betrag manuell am Terminal einzutippen.
Herkunft: Zusammenzug aus dem AkaziePay-Scaffold (Fork
akazie-pay-nexopos,
Branch feature/akazie-pay-terminal) und der Payrexx-Logik aus dem
NsPayrexxTerminal-Skeleton (Repo str_26_kasse_pos). Pilotprojekt der reinen
API-Anbindung: _akaziepay_pos (PHP/cURL, ohne NexoPOS).
Architektur-Entscheidungen
- 1 Kasse = 1 Terminal. Jede Kasse (NexoPOS "Cash Register") hat genau ein
fest zugeordnetes Terminal (Tabelle
akazie_pay_terminals, unique aufregister_id). - Polling statt Webhook. Der Kassen-PC ist nur im lokalen WLAN erreichbar –
Payrexx kann keinen Webhook zurückschicken. Die Kasse fragt den
Zahlungsstatus aktiv ab (
GET /ecr/{serial}/payment/{id}). - Risikoarmer Checkout: Der Cart-Button steuert nur Terminal + Polling an.
Verbucht wird die Zahlung anschliessend regulär über das Checkout-Popup mit
dem Payment-Type
akazie-pay(wird per Migration angelegt). Der letzte Klick bleibt manuell.
Installation (NexoPOS-Standardweg: Modul-Ordner)
Das Modul gehört nach <nexopos>/modules/AkaziePay – der Ordnername muss
dem Namespace AkaziePay entsprechen:
cd /var/www/nexopos/modules
sudo -u www-data git clone \
https://gitlab.xippo.net/akazie-it-public/akazie-pay-nexopos-terminal-modul.git AkaziePay
Danach im NexoPOS-Dashboard unter Modules aktivieren (führt die
Migrationen aus: Tabelle, Berechtigung akaziepay.manage-terminals,
Payment-Type akazie-pay).
Update: git -C /var/www/nexopos/modules/AkaziePay pull – oder das
Deploy-Skript deploy-terminal-modul.sh aus dem Repo str_26_kasse_pos
verwenden.
Konfiguration
- Dashboard → akazie-pay Einstellungen: API-Basis-URL, API-Key, Payrexx-Instanz, Polling-Timeout.
- Dashboard → akazie-pay Terminals: Zuordnung Kasse ↔ Terminal-Seriennummer, dann Pairing mit dem Code vom Terminal-Display (Pairing-Codes sind zeitlich begrenzt – frischen Code verwenden).
- Rolle der Kassen-Admins braucht die Berechtigung
akaziepay.manage-terminals(Dashboard → Roles).
Composer / Packagist
Das Paket ist als akazie/pay-nexopos-terminal-modul auf
Packagist
gelistet (Sichtbarkeit/Versionierung). Der Installationsweg in NexoPOS bleibt
der Modul-Ordner (siehe oben) – NexoPOS lädt Module nicht aus vendor/.
Versionen entstehen durch git-Tags (v0.1.0, …).
Status (Stand 14.07.2026)
- Backend (Service, Settings, Modell, Migrationen, API unter
/api/akazie-pay/...): verifiziert mit echtem Terminal – Pairing und Testzahlung CHF 1.00 (Mastercard) erfolgreich. - Verifizierte Payrexx-ECR-Statuswerte:
IN_PROGRESS(läuft),SUCCESS(bezahlt),TERMINATED(abgelaufen/nicht bezahlt). - Terminal-Verwaltung im Dashboard: Erfassen, Koppeln (Pairing-Code), Entkoppeln.
- POS-Cart-Button «Kartenterminal»: implementiert ohne Vite-Build –
der Kern bündelt
vue.esm-bundler(Runtime-Compiler), die Komponente wird perRenderFooterEventnur auf der POS-Seite injiziert (Resources/Views/pos/footer.blade.php). Ablauf: Restbetrag ans Terminal → Polling → beiSUCCESSPaymentakazie-paydem Order hinzufügen und Checkout-Popup öffnen (Abschluss bleibt manuell). Resources/js/ist nur noch historische Referenz (Skeleton-Phase); die aktive Implementation ist die Blade-View oben.
Änderungshistorie
| Datum | Version | Autor | Beschreibung |
|---|---|---|---|
| 12.07.2026 | 0.1.0 | Lorenz Fehr | Ersterfassung als eigenes Repo: AkaziePay-Scaffold + portierte Payrexx-Logik (Service, Settings, API-Controller, Cart-Button) |