OpenCart Store Management
OpenCart Store Management connects a self-hosted OpenCart storefront to Odoo. This page is the installation and configuration guide for the module you downloaded from your ECOSIRE dashboard. Everything below describes the opencart_store_management module as it ships today.
| Technical name | opencart_store_management |
| Odoo versions | 17.0, 18.0, 19.0 (Community or Enterprise) |
| Current shipped version | 17.0 → 17.0.2.0.2, 18.0 → 18.0.2.0.2, 19.0 → 19.0.2.0.2 |
| Price | $499 USD — one-time, per Odoo version |
| Odoo module licence | LGPL-3 |
| Category | Connector |
A licence issued for Odoo 17 unlocks only the 17.0 download and only validates on an Odoo 17 database. It will not activate on 18 or 19, and the 18.0/19.0 ZIPs will not appear in your dashboard. Buy the version you actually run — and if you later upgrade Odoo, you need the licence for the new version. This is enforced on both the download and the activation paths, so there is no way round it.
Requirements
| Requirement | Detail |
|---|---|
| Odoo | 17.0, 18.0 or 19.0, Community or Enterprise. Self-hosted or Odoo.sh — Odoo Online (SaaS) cannot install third-party modules |
| Odoo apps | base, sale_management, stock, account, delivery, mail, web, product, contacts, knowledge — Odoo installs any that are missing |
| ECOSIRE dependency | ecosire_license_client — a separate free download, not bundled in this ZIP. See step 3 |
| Python packages | requests |
| Platform account | An OpenCart seller/partner account with API access |
| Licence | An active ECOSIRE licence for this module and your Odoo version |
Install the Python packages into the same interpreter that runs Odoo:
sudo -u odoo pip install requests
Installation
1. Download the ZIP for your Odoo version
Sign in at ecosire.com and open your dashboard downloads. You will only be offered the file matching your licence's Odoo version — that is expected, see the warning above.
2. Extract into your addons path
unzip opencart_store_management_v19_*.zip -d /opt/odoo/addons/
ls /opt/odoo/addons/opencart_store_management/__manifest__.py # sanity check
The archive contains a single top-level opencart_store_management/ directory. If your ls check fails, the module folder ended up one level too deep — move it up so __manifest__.py sits directly inside opencart_store_management/.
3. Install the ECOSIRE licence client
opencart_store_management declares ecosire_license_client as a hard dependency. It is a separate, free module and it is not bundled in the connector ZIP — Odoo will refuse to install the connector until the licence client is present in your addons path. Download it from your ECOSIRE dashboard alongside the connector and extract it the same way:
unzip ecosire_license_client_v19_*.zip -d /opt/odoo/addons/
4. Restart Odoo and install
sudo systemctl restart odoo
- Go to Apps and click Update Apps List (developer mode must be on).
- Search for OpenCart Store Management and click Install.
- Odoo pulls in
ecosire_license_clientand the Odoo apps listed above automatically.
When the install finishes, an OpenCart menu appears in the main Odoo app switcher.
Activate your licence
Before you activate
Set your instance's public URL first. The licence is bound to the domain derived from web.base.url, so activating with a placeholder value binds the licence to the wrong host:
- Turn on developer mode.
- Settings → Technical → System Parameters, find
web.base.url. - Set it to the real HTTPS URL your users browse to, e.g.
https://erp.example.com.
Activate
- Go to Settings → ECOSIRE.COM → Activate License.
- Paste your licence key.
- Choose OpenCart Store Management in the module dropdown (it lists the installed ECOSIRE modules).
- Click Activate.
Settings → ECOSIRE.COM → License Status then shows, per module, the licence state, last-verified time, Odoo version, module version, support expiry, and whether an offline token is cached.
What the client sends
Activation and validation are plain HTTPS JSON calls to https://api.ecosire.com/api. Every request carries the same five fields:
{
"key": "ECO-XXXX-XXXX-XXXX-XXXX",
"module_name": "opencart_store_management",
"domain": "erp.example.com",
"hw_fingerprint": "<sha256 of this installation's hardware/db identity>",
"odoo_version": "19.0"
}
| Endpoint | Used for |
|---|---|
POST /api/licenses/activate | First-time activation — binds the licence to this domain |
POST /api/licenses/validate | Ongoing verification |
POST /api/licenses/issue-token | Fetches the RSA-signed offline token used for the grace period |
POST /api/licenses/deactivate-self | Releases this domain so the key can move to another database |
The base URL is overridable through the ecosire.license.api_url system parameter, and the client refuses any value that is not HTTPS. You do not need to change it.
Activation slots, and moving between databases
Each licence carries its own activation limit. New licences default to a single domain; some licences are issued with more. Check License Status, or the licence detail page in your ECOSIRE portal, for the number on yours. Re-activating on a domain that is already bound is a no-op success, not a second slot.
- Odoo.sh staging and development builds do not consume a slot — they are recognised as non-production hosts and activate without binding.
- To move a live licence to a different database, use Deactivate on the activation screen first; that releases the domain server-side so you can activate elsewhere.
- Ten failed activation attempts within an hour trips a client-side rate limiter. Wait up to 60 minutes, or contact support — do not keep retrying a key you are unsure about.
Staying licensed after activation
A daily scheduled action, ECOSIRE License: Background Re-verification, re-checks the licence out of the request path, refreshes the cached offline token, and keeps the last-known-good timestamp fresh. Because of that, a transient network problem, an Odoo.sh rebuild or a worker restart does not lock you out. Verification results are cached for five minutes, so a licence change can take a few minutes to show up.
If you see a hard rejection instead — LICENSE_NOT_FOUND, LICENSE_INACTIVE, LICENSE_EXPIRED, MODULE_MISMATCH, VERSION_MISMATCH or NOT_ACTIVATED_ON_DOMAIN — the grace period is deliberately not granted; fix the underlying problem. See Troubleshooting.
Configuration
Connect to OpenCart
Open OpenCart → Configuration and create a record (model opencart.instance). The connection fields are:
| Label | Technical name | Required | Values |
|---|---|---|---|
| — | store_url | Yes | Text |
| — | api_key | Yes | Text |
| — | api_secret | Yes | Text |
Where the Label column shows —, the module does not set an explicit label and Odoo derives one from the technical name, so the wording on screen may differ slightly. The technical name is the reliable identifier.
OpenCart issues API credentials from System → Users → API in its own admin. Set OpenCart Version to match your storefront (3.x or 4.x) — the module speaks a different API dialect for each.
Credentials are issued from the your OpenCart admin panel — see docs.opencart.com/en-gb. The connector talks to your own store — the Store URL you enter on the instance.
When the fields are filled in, click Test Connection. The record's status moves to connected only when the platform answers successfully — do not run a first import until it does.
Scheduled actions
The module installs 4 scheduled actions (Settings → Technical → Scheduled Actions):
| Scheduled action | Runs every | Enabled on install |
|---|---|---|
| OpenCart: Sync Products | 30 minutes | Yes |
| OpenCart: Sync Orders | 15 minutes | Yes |
| OpenCart: Sync Customers | 60 minutes | Yes |
| OpenCart: Process Queue Jobs | 5 minutes | Yes |
Intervals above are the shipped defaults. Adjust them to your volume — but be aware that the platform, not Odoo, sets the API rate limits, and shortening a sync interval is the usual cause of throttling errors in the logs.
Using the module
The OpenCart menu is laid out as:
- OpenCart → Automation Dashboard
- OpenCart → Configuration — OpenCart Instances, Cron Jobs, Webhooks
- OpenCart → Products — Products
- OpenCart → Orders — Orders
- OpenCart → Customers
- OpenCart → Operations — Queue Jobs, Logs
- OpenCart → Tools — Manual Sync
A normal first run is:
- Test Connection until the instance reads connected.
- Review the mapping records (categories, order statuses, payment and shipping methods) so imported data lands on the right Odoo records.
- Run a small import first — restrict it by date or by a handful of products — and check the results before letting the scheduled actions take over.
- Watch the Logs view during the first full sync. Every sync writes a log line; failures are recorded there rather than raised at the user.
Module-specific notes
- OpenCart Version (
3.xor4.x) is required and selects the API dialect. OpenCart 4 changed its admin API; picking the wrong one produces authentication errors that look like bad credentials. - OpenCart is self-hosted, so the connector reaches your server. The Store URL must be reachable over HTTPS from the Odoo host — a firewall between the two is a common cause of connection failures.
- This module ships four scheduled actions; there is no inventory-sync job, so stock is handled through the product sync.
Troubleshooting
Licensing
| Symptom / error code | Cause and fix |
|---|---|
VERSION_MISMATCH | The licence is for a different Odoo major version than the database you activated on. Licences are not transferable across Odoo versions — you need the licence for the version you run. |
MODULE_MISMATCH | The licence belongs to a different ECOSIRE module. Check you selected OpenCart Store Management (opencart_store_management) in the activation dropdown. |
NOT_ACTIVATED_ON_DOMAIN | The database's web.base.url domain is not among the licence's activated domains. Activate on this domain, or deactivate the old one first. |
LICENSE_EXPIRED / LICENSE_INACTIVE | The licence is past its expiry or has been suspended/revoked. Check the licence in your ECOSIRE portal. |
LICENSE_NOT_FOUND | The key does not exist. Keys are upper-cased before sending, so case is not the problem — re-copy it from your portal. |
| Activation limit reached | Every slot on the licence is bound to a domain. Deactivate one first. |
| Too many failed activation attempts | Ten failures in an hour. Wait up to 60 minutes. |
| Could not determine your Odoo instance domain | web.base.url is empty. Set it, then activate. |
The requests library is required | requests is missing from Odoo's Python environment. Install it into the interpreter that runs Odoo. |
| The downloaded ZIP is the wrong version | The download list is filtered by your licence's version. If you need a different Odoo version, you need that version's licence. |
Syncing
| Symptom | Cause and fix |
|---|---|
| Test Connection fails | Re-check every required field in the table above. Most failures are a mistyped secret, or credentials created for the sandbox while the connector points at production (or vice-versa). |
| Nothing syncs even though the connection is fine | The scheduled actions are disabled at the Odoo level, or Odoo's cron worker is not running. Check Settings → Technical → Scheduled Actions and that --max-cron-threads is greater than zero. |
| Sync starts then stops part-way | Read the Logs view for that run. Rate limiting and rejected field values are the two common causes; both are logged with the platform's own error text. |
| Records import but map to the wrong Odoo values | Fix the mapping records under the module's configuration, then re-run the import. |
| Duplicated products or customers | Run the initial import once. If a first attempt half-finished, check the existing records before re-running rather than importing on top. |
Version history
| Odoo version | Version you download today |
|---|---|
| 17.0 | 17.0.2.0.2 |
| 18.0 | 18.0.2.0.2 |
| 19.0 | 19.0.2.0.2 |
ECOSIRE module versions are <odoo major>.<module major>.<minor>.<patch>, so 19.0.2.0.3 is the Odoo 19 build of module version 2.0.3. Your installed version is shown in Apps and in Settings → ECOSIRE.COM → License Status.