Kartenterminal an die Odoo-Kasse anbinden
Kurz gesagt
Ein Kartenterminal binden Sie in Odoo 20.0 so an: den Anbieter in den Kasseneinstellungen aktivieren, eine Zahlungsmethode mit Journal Bank und Integration Terminal anlegen, dort die Zugangsdaten des Anbieters eintragen und die Zahlungsmethode der Kasse zuordnen. Adyen, Mollie, Stripe und Viva.com arbeiten ohne IoT-System; SIX und Worldline verlangen ein lokales IoT-System, das die nur in der Enterprise-Edition enthaltene App IoT voraussetzt. Worldline und Axepta BNP Paribas sind mit Odoo aber nur in Belgien, den Niederlanden und Luxemburg verfügbar. Angeschlossene Terminals brauchen Internet und arbeiten nicht offline.
Das Wichtigste
- Adyen, Mollie, Stripe und Viva.com brauchen kein IoT-System; SIX und Worldline verlangen eines, und die App IoT dafür gibt es nur in der Enterprise-Edition (Odoo 20.0).
- Terminalzahlungen bucht Odoo in das Bankjournal der Zahlungsmethode (Feld Integration: Terminal); nach den Release Notes 20 entstehen die Zahlungsbuchungen zu dem in den Einstellungen festgelegten Zeitpunkt, ohne dass die Sitzung dafür abgeschlossen werden muss.
- Worldline und Axepta BNP Paribas sind mit Odoo nur in Belgien, den Niederlanden und Luxemburg verfügbar.
- Bricht die Verbindung zum Terminal ab, storniert Odoo die Transaktion; Erledigt erzwingen (Force done) schließt den Auftrag manuell ab.
- Angeschlossene Terminals arbeiten nicht offline; in Deutschland gilt zusätzlich die TSE-Pflicht nach § 146a Abs. 1 AO.
- In Österreich zählt die Bankomat- und Kreditkartenzahlung zum Barumsatz (§ 131b Abs. 1 Z 3 BAO).
Wer Kartenzahlungen annimmt, hat zwei Dinge zu verbinden: die Kasse in Odoo und das Terminal vor der Kundschaft. Odoo 20.0 kennt dafür mehrere Wege, und welcher gilt, entscheidet das Terminal und nicht die Kasse. Der Ablauf unten führt von der Anbieterauswahl bis zum Testverkauf, und der Test prüft auch den Abbruch und den Ausfall der Verbindung.
Was Sie vorab brauchen
- Ein Konto und mindestens ein betriebsbereites Terminal bei einem Zahlungsanbieter. Die Anbindung setzt voraus, dass der Anbieter das Gerät für Ihren Betrieb freigeschaltet hat.
- Die Zugangsdaten aus diesem Konto: API-Schlüssel, Händler- oder Merchant-ID, Terminal-ID oder Seriennummer des Geräts.
- Ein Bankjournal in der Buchhaltung. Für eine Zahlungsmethode mit Terminal verlangt Odoo das Journal Bank; darüber läuft die Zahlung bis zum Bankabgleich.
- Für SIX und für Worldline zusätzlich ein IoT-System, laut Dokumentation ein Raspberry Pi oder das Windows Virtual IoT. Bei SIX muss das Terminal online und mit dem IoT-System im selben Netz sein. Das IoT-System setzt die App IoT voraus, die es nur in der Enterprise-Edition gibt.
- Eine funktionierende Internetverbindung am Kassenarbeitsplatz. Angeschlossene Zahlungsterminals arbeiten nicht offline.
- Rechte zum Ändern der Kasseneinstellungen und der Zahlungsmethoden; haben Sie sie nicht, lassen Sie die Einrichtung von jemandem mit diesen Rechten durchführen.
Zwei Anschlusswege, drei Terminalarten
Bei der ersten Art steht der Anbieter zwischen Kasse und Terminal. Odoo trägt nur Zugangsdaten ein, schickt den Zahlungsauftrag über die Schnittstelle des Anbieters und bekommt das Ergebnis zurückgemeldet; ein lokales IoT-System ist dafür nicht nötig. Bei Stripe müssen das Gerät des Benutzers und das Terminal trotzdem im selben Netz sein. Bei der zweiten Art spricht Odoo das Terminal über ein IoT-System an, das im selben Netz wie das Gerät steht; dieses IoT-System setzt die App IoT voraus, die es nur in der Enterprise-Edition gibt. Eine dritte Form sind Terminal-Apps: Bei Viva.com macht die App aus einem Smartphone mit NFC-Chip ein Terminal, das ohne IoT-System arbeitet.
Die Tabelle nennt für die in Europa einsetzbaren Anbindungen den Anschluss, den die Dokumentation von Odoo 20.0 beschreibt.
| Terminal | Anschluss und Zugangsdaten | IoT-System nötig | Länderhinweis |
|---|---|---|---|
| Adyen | API-Schlüssel, Terminal-ID und Merchant Account am Zahlungsmittel; die Ereignis-URL des Terminals zeigt auf die Adresse Ihrer Datenbank mit dem Pfad /pos_adyen/notification | nein | In-Person-Zahlungen nach Anbieterangabe unter anderem in Deutschland, Österreich und der Schweiz möglich |
| Mollie | Terminal-ID und Live-API-Schlüssel; am Zahlungsmittel wird der Zahlungsanbieter Mollie verknüpft, das Feld Integrieren mit kann laut Dokumentation zusätzlich auf Mollie stehen | nein | Odoo verweist auf die Länderliste des Anbieters |
| Stripe | Seriennummer des Terminals, Feld Use a Payment Terminal auf Stripe, Verbindung über die Schaltfläche Connect Stripe; das Gerät des Benutzers und das Terminal müssen im selben Netz sein; auf einer On-Premise-Datenbank tragen Sie die Schlüssel von Hand ein | nein | Laut Odoo in vielen Ländern, aber nicht weltweit; die Länderliste steht beim Anbieter |
| Viva.com | Merchant-ID, API-Schlüssel, Client-ID, Client-Secret und Terminal-ID, dazu eine Webhook-Adresse aus Odoo | nein | Laut Odoo in vielen europäischen Ländern; Odoo unterstützt Viva.com nur in Euro |
| SIX | Modul POS IoT Six, Integrieren mit auf SIX IOT; am Zahlungsmittel Setup Six Terminal mit IoT-System, Six Terminal ID (TID) und Gerät | ja, App IoT nur Enterprise | In der Anleitung haben wir keine Länderangabe gefunden |
| Worldline, Axepta BNP Paribas | Terminal im CTEP-Protokoll auf die Adresse des IoT-Systems; Integrieren mit steht auf Worldline | ja, App IoT nur Enterprise | Mit Odoo nur in Belgien, den Niederlanden und Luxemburg |
Daneben führt die Anleitung weitere Anbindungen, die auf andere Regionen begrenzt sind: DPO Pay für Unternehmen in der afrikanischen Region, Mercado Pago für Argentinien, Brasilien und Mexiko, Pine Labs für Unternehmen in Indien, QFPay ausschließlich für Hongkong und Tyro ausschließlich für Australien. Bei Razorpay nennt die Seite keine Länderbeschränkung. Einen Weg für ein Terminal außerhalb dieser Anbindungen haben wir in der Dokumentation 20.0 nicht gefunden; klären Sie in diesem Fall mit dem Zahlungsanbieter und Ihrem Odoo-Partner, ob es eine Anbindung gibt.
Schritt für Schritt: Terminal anbinden
Schritt 1: Anbieter in den Kasseneinstellungen aktivieren
Öffnen Sie Kassensystem ‣ Konfiguration ‣ Einstellungen (Point of Sale ‣ Configuration ‣ Settings) und wählen Sie die Kasse. Im Abschnitt Zahlungsterminals (Payment Terminals) schalten Sie den Schalter Ihres Anbieters ein und speichern. Unter dem aktivierten Anbieter steht danach die Schaltfläche Zahlungsmethode (Payment method) bereit, über die Sie das Formular der Zahlungsmethode öffnen.
Schritt 2: Zahlungsmethode anlegen
Gehen Sie auf Kassensystem ‣ Konfiguration ‣ Zahlungsmethoden (Point of Sale ‣ Configuration ‣ Payment Methods) und legen Sie einen neuen Eintrag an. Setzen Sie das Journal auf Bank, das Feld Integration auf Terminal und das Feld Integrieren mit (Integrate with) auf den aktivierten Anbieter; laut Dokumentation öffnet dieselbe Konfiguration auch die Schaltfläche Setup auf der Karte des Terminals in diesem Formular. Gespeichert ist die Zahlungsmethode mit einem Bankjournal und einem zugeordneten Anbieter.
Schritt 3: Zugangsdaten des Anbieters eintragen
Tragen Sie die Werte aus Ihrem Anbieterkonto in die Felder ein, die die Tabelle nennt, und speichern Sie das Formular. Bei Adyen und Viva.com gehört ein Rückkanal dazu: Adyen braucht die Ereignis-URL aus Odoo in seinen Terminaleinstellungen im entschlüsselten Modus, Viva.com die Webhook-Adresse im Anbieterkonto. Gibt es beim Anbieter ein Testkonto, beginnen Sie dort; Adyen hat am Zahlungsmittel den Schalter Adyen-Testmodus.
Schritt 4: Bei SIX und Worldline das IoT-System einrichten
Diesen Schritt gibt es nur in der Enterprise-Edition: Das IoT-System setzt die App IoT voraus, und die ist nicht Teil der Community-Edition. Bei SIX installieren Sie das Modul POS IoT Six, das das frühere Modul POS Six ersetzt, und verbinden ein IoT-System. Am Zahlungsmittel öffnen Sie Setup Six Terminal, wählen dort das IoT-System, tragen die von SIX vergebene Terminal-ID (TID) ein und wählen das Gerät. Das Terminal muss laut Anleitung online und mit dem IoT-System im selben Netz sein; den Zustand prüft der Test-Knopf auf der Karte des IoT-Systems in der App IoT.
Bei Worldline und Axepta BNP Paribas stellen Sie das Terminal auf das ECR-Protokoll CTEP um und tragen als Hostname die IP-Adresse des IoT-Systems ein, als Port 9001 bei einer IoT-Box oder 9050 beim Windows Virtual IoT. Am Windows Virtual IoT muss Port 9050 zusätzlich als Firewall-Ausnahme eingetragen sein. In Odoo setzen Sie Integrieren mit auf Worldline und wählen das eingerichtete Gerät im Feld für das Terminalgerät.
Schritt 5: Zahlungsmethode der Kasse zuordnen
In den Kasseneinstellungen steht im Abschnitt Zahlungen (Payment) das Feld Zahlungsmethoden (Payment Methods). Fügen Sie dort die neue Zahlungsmethode hinzu und speichern Sie. Ohne diesen Schritt erscheint sie im Bezahlbildschirm nicht. Für eine Terminalzahlung ist die Zahlung mit einem Klick (One-click Payment) nicht verfügbar; sie gilt laut Dokumentation nicht für Terminal-, Online- und Lieferzahlungsmethoden und nicht für Zahlungsmethoden mit Kundenprüfung.
Schritt 6: Testverkauf mit Karte machen
Öffnen Sie das Register, legen Sie einen Artikel in den Warenkorb und drücken Sie Bezahlen. Wählen Sie die Zahlungsmethode des Terminals und folgen Sie den Anweisungen auf dem Terminalbildschirm. Nach der erfolgreichen Transaktion bestätigt Odoo die Zahlung im Register selbst.
So prüfen Sie das Ergebnis
- Testverkauf: Nach der Transaktion steht der Auftrag als bezahlt im Register. Den Journalposten im Bankjournal der Zahlungsmethode erzeugt Odoo nach den Release Notes 20 zu dem in den Einstellungen festgelegten Zeitpunkt und ohne dass dafür die Sitzung beendet werden muss, also gegebenenfalls nicht sofort; prüfen Sie dort, ob der Posten angekommen ist.
- Abbruch: Drücken Sie im Register Abbrechen (Cancel), um die Zahlungsanforderung zurückzuziehen.
- Verbindungsverlust: Unterbrechen Sie testweise die Verbindung des Terminals oder des IoT-Systems. Kommt zwischen Kasse und Terminal keine Verbindung zustande, storniert Odoo die Transaktion. Ist das Geld trotzdem geflossen, schließen Sie den Auftrag im Register mit Erledigt erzwingen (Force done) ab.
- Offline-Probe: Trennen Sie das Internet am Kassenarbeitsplatz. Das Register wechselt in den Offline-Betrieb; die Terminalzahlung steht dort nicht zur Verfügung. Aufträge, die offline entstehen, holt Odoo nach, sobald die Verbindung zurück ist; laden Sie den Browser währenddessen nicht neu. Was die Kasse online und offline kann, steht unter Odoo-Kasse ohne Internet.
- Abgleich: Vergleichen Sie die Terminalzahlungen beim Abschluss der Kassensitzung mit der Abrechnung des Anbieters. Den Ablauf der Sitzung beschreibt Schichtabschluss und Kassenabgleich.
Wenn etwas nicht klappt
| Symptom | Ursache | Vorgehen |
|---|---|---|
| Die Zahlung bricht ab, der Auftrag bleibt offen | Zwischen Odoo und dem Terminal kam keine Verbindung zustande; Odoo storniert die Transaktion dann selbst | Netz am Terminal und am IoT-System prüfen und die Zahlung neu starten; ist das Geld geflossen, den Auftrag mit Erledigt erzwingen (Force done) abschließen |
| Ein SIX-Terminal wird nicht gefunden | Das Terminal ist offline oder nicht im selben Netz wie das IoT-System | Gerät einschalten, ins gleiche Netz bringen und die Verbindung mit dem Test-Knopf in der App IoT prüfen |
| Ein Worldline-Terminal reagiert nicht | Das Terminal steht nicht im CTEP-Modus, oder IP-Adresse und Port stimmen nicht | Hostname auf die IP-Adresse des IoT-Systems setzen, Port 9001 für die IoT-Box oder 9050 für das Windows Virtual IoT; Port 9050 dort als Firewall-Ausnahme eintragen |
| Die Karte wird nicht angenommen | Die Anbindung ist im Land nicht verfügbar oder das Terminal gehört zu einem anderen Anbieter | Länderangaben in der Tabelle prüfen; Worldline und Axepta BNP Paribas sind mit Odoo nur in Belgien, den Niederlanden und Luxemburg verfügbar |
| Ein SIX-Terminal von Worldline wird nicht erkannt | Worldline hat SIX Payment Services übernommen; die Firmware der Geräte weicht ab | Das Gerät beim Anbieter der konfigurierten Anbindung bestellen; Odoo nennt Worldline-Terminals mit der SIX-Anbindung unvereinbar |
| Eine Zahlung in Franken schlägt bei Viva.com fehl | Odoo unterstützt Viva.com nur in Euro | Eine andere Zahlungsmethode wählen oder mit dem Anbieter klären, welche Währung er führt |
Was rechtlich am Terminal hängt
In Deutschland hängt an der Kasse die zertifizierte technische Sicherheitseinrichtung: Wer aufzeichnungspflichtige Geschäftsvorfälle oder andere Vorgänge mit Hilfe eines elektronischen Aufzeichnungssystems erfasst, muss dieses durch eine zertifizierte technische Sicherheitseinrichtung schützen (§ 146a Abs. 1 Satz 2 AO). Die Vorschrift ist erstmals für Kalenderjahre nach dem Ablauf des 31. Dezember 2019 anzuwenden, also seit 1. Januar 2020 (Art. 97 § 30 Abs. 1 Satz 1 EGAO). Wer ohne ein solches System kassiert, etwa mit einer offenen Ladenkasse, fällt nicht unter diese Pflicht. Die deutsche Lokalisierung von Odoo bindet dafür nach der Dokumentation eine cloudbasierte TSE über den Dienst fiskaly ein und verlangt eine funktionierende Internetverbindung; das ist dieselbe Bedingung, unter der ein angeschlossenes Terminal arbeitet. Die Einzelheiten stehen unter Odoo-Kasse und TSE in Deutschland.
In Österreich hängen die Pflichten am Barumsatz. Als Barzahlung und damit als Barumsatz gilt nach § 131b Abs. 1 Z 3 BAO auch die Zahlung mit Bankomat- oder Kreditkarte oder durch andere vergleichbare elektronische Zahlungsformen. Der Anschluss eines Terminals ersetzt deshalb keine Registrierkasse: Wer die Grenzen des § 131b Abs. 1 Z 2 BAO überschreitet, bleibt zur Verwendung eines elektronischen Aufzeichnungssystems verpflichtet, und die Kartenzahlungen zählen dabei als Barumsätze mit. Erfasst werden sie laufend im Umsatzzähler (§ 8 Abs. 1 RKSV). Betroffene Betriebe müssen dieses System gegen Manipulation schützen und die Unveränderbarkeit jedes Barumsatzes über eine Signatur- oder Siegelerstellungseinheit gewährleisten (§ 131b Abs. 2 BAO); Odoo bildet das nach der Dokumentation über das Modul l10n_at_pos mit cloudbasierter Anbindung ab. Die Einzelheiten stehen unter Registrierkassa in Österreich mit Odoo.
Für die Schweiz enthält dieser Artikel keine Rechtsaussage. Die Schweizer Seite der Fiskallokalisierung in der Dokumentation 20.0 behandelt ISR-Einzahlungsscheine, die MWST-Sätze und die Schweizer ISO-20022-Formate; einen Abschnitt zum Kassensystem oder eine Signatur- bzw. Siegelerstellungseinheit haben wir dort nicht gefunden. Was für Ihre Kasse gilt, klären Sie mit Ihrer Treuhandstelle; die MWST-Seite beschreibt Odoo-Kasse in der Schweiz.
Wann Sie Hilfe holen sollten
- Ihr Terminal steht in keiner der Anbindungen: Fragen Sie den Zahlungsanbieter nach einer Schnittstelle für Odoo und lassen Sie von Ihrem Odoo-Partner prüfen, ob es dafür ein Modul aus dem Apps-Store oder eines aus der OCA-Gemeinschaft gibt.
- Firmware, Vertrag und Gebühren des Terminals klären Sie mit dem Zahlungsanbieter.
- Die TSE-Pflicht in Deutschland, die Registrierkassenpflicht in Österreich und die Behandlung der Kartenzahlung in der Buchhaltung gehören in die Hand Ihrer Steuerberatung.
- Für den Abgleich zwischen Kassenabschluss und Anbieterabrechnung ziehen Sie Ihre Buchhaltung hinzu. Den Aufbau der Kasse selbst beschreibt Odoo-Kasse einrichten, und die Anschlüsse der übrigen Geräte stehen unter Hardware für die Odoo-Kasse.