Odoo 19 Plugin

NEXGO N86 Payment Terminal

Seamless integration with Odoo 19 Point of Sale via GPE ECR v13.14 protocol. Direct TCP/IP communication over local network for secure card payments.

Odoo 19 Community / Enterprise
TCP/IP Port 2050
GPE ECR v13.14
CRC16-CCITT Validation

Overview

This module integrates the NEXGO N86 payment terminal with Odoo 19 Point of Sale. Communication is handled directly over the local network (Ethernet/WiFi) using the GPE ECR v13.14 protocol by Global Payments Czech Republic.

The terminal and the Odoo server must be on the same local network.

Supported Features

FeatureCodeDescription
SaleT00Standard card payment
ReversalT10Cancel the last approved transaction
RefundT04Return funds to the cardholder's card
HandshakeT23Check terminal availability
Close TotalsT60End-of-day batch settlement
Auto Terminal IDFilled automatically from the terminal's first response
CRC16-CCITTFull protocol validation
ConfirmationSent automatically after every transaction response

Supported Cards

All cards supported by the terminal: Visa, Mastercard, Maestro, and others.

Currencies

Defaults to the company currency configured in Odoo. For CZK – ISO 4217 code 203.

Requirements

Installation

Step 1 – Copy the files

# Extract the archive
unzip payment_terminal_nexgo.zip

# Copy to the addons directory
sudo cp -rf payment_terminal_nexgo /opt/odoo19/odoo19/addons/

# Restart Odoo
sudo systemctl restart odoo19

Step 2 – Install via command line (recommended)

sudo systemctl stop odoo19

sudo -u odoo19 /opt/odoo19/odoo19/odoo-venv/bin/python3 \
    /opt/odoo19/odoo19/odoo-bin \
    --config /etc/odoo19.conf \
    --database YOUR_DATABASE_NAME \
    --init payment_terminal_nexgo \
    --stop-after-init \
    --logfile /dev/stderr 2>&1 | tail -10

sudo systemctl start odoo19
Tip: Replace YOUR_DATABASE_NAME with your actual database name (e.g. odoo).

Alternative – Install via web interface

1
Log into Odoo → Apps
2
Click Update Apps List
3
Search for "NEXGO"
4
Click Install
If you see "Invalid Operation – scheduled action in progress", wait 1–2 minutes and try again, or use the command-line installation method above.

Configuration

1. Add a Terminal

Go to Point of Sale → Configuration → NEXGO Terminals → New

FieldDescriptionExample
Terminal NameDisplay nameTerminal01
IP AddressTerminal's IP address192.168.1.109
PortTCP port2050
Timeout (s)Response timeout120
ECR ID8-character ID from Global PaymentsODOO0001
ECR NameName of the cash register softwareOdoo POS
ECR VersionSoftware version19.0
Terminal IDFilled automatically(leave blank)
Terminal ID is populated automatically on the first successful transaction. No manual entry required.

2. Test the Connection

Click the Test Connection button on the terminal record.

3. Configure a Payment Method

Go to Point of Sale → Configuration → Payment Methods → New (or edit an existing one)

1
Enable Use NEXGO Terminal
2
Select the terminal from the NEXGO Terminal dropdown
3
Save
The use_payment_terminal field is set automatically – no manual database changes required.

4. Add to POS Configuration

Go to Point of Sale → Configuration → Settings → Payment Methods and add the new payment method.

Using the Plugin in POS

Card Payment

1
Add products and click Payment
2
Select Terminal01 (or your terminal's name)
3
Click Send – the terminal displays the amount and waits for the card
4
The customer taps, inserts, or swipes their card
5
On approval, Odoo automatically closes the order
6
On decline – an error message is shown; the order is not closed

Cancel Payment

Click Cancel while waiting – a Reversal (T10) is sent to the terminal.

Refund

Handled through the standard Odoo POS refund flow – the module sends T04 to the terminal.

End-of-Day Settlement

Go to Point of Sale → Configuration → NEXGO Terminals → [terminal] → Close Totals

Sends T60 to the terminal and closes the current transaction batch.

Protocol Structure (GPE ECR v13.14)

STX | Header (36 bytes) | Data | ETX Header: B001 | TID(8) | Timestamp(12) | Tags(4) | Length(4) | CRC(4) Data fields (separated by FS = 0x1C): T – Transaction type (T00=Sale, T10=Reversal, T04=Refund, T23=Handshake, T60=Close Totals) B – Amount (in minor currency units, no decimal point – e.g. 1000 = 10.00 CZK) S – Invoice number (order reference) X – ECR Identifiers (mandatory for all requests) R – Response code (000–009 = Approved, 103 = Format error, 106 = CRC error, 108 = Busy) CRC: CRC16-CCITT calculated over the Data part only (not the header).

Troubleshooting

ProblemCauseSolution
Cannot connectWrong IP/port or network issueCheck IP, port 2050, and network connectivity
R103 – Format errorMalformed messageUpdate the module to the latest version
R106 – CRC errorCRC mismatchSee above
R108 – Terminal BusyTerminal is processing another transactionWait and try again
Terminal does not reactJS module not loaded in POS bundleClear asset cache and restart Odoo
"Already in progress"Previous transaction not completedClose and reopen the POS session
State shows Disconnected after testState not updated on connection failureThe Test Connection button now updates the state correctly

Clear Asset Cache

sudo -u postgres psql YOUR_DATABASE_NAME -c \
    "DELETE FROM ir_attachment WHERE url LIKE '/web/assets/%';"
sudo systemctl restart odoo19

Upgrade

When a new version of the module is available:

sudo cp -rf payment_terminal_nexgo /opt/odoo19/odoo19/addons/

sudo systemctl stop odoo19
sudo -u odoo19 /opt/odoo19/odoo19/odoo-venv/bin/python3 \
    /opt/odoo19/odoo19/odoo-bin \
    --config /etc/odoo19.conf \
    --database YOUR_DATABASE_NAME \
    --update payment_terminal_nexgo \
    --stop-after-init \
    --logfile /dev/stderr 2>&1 | tail -10
sudo systemctl start odoo19

Technical Notes

License

OPL-1

GPE ECR Protocol v13.14 © Global Payments Czech Republic