BambooForge OpenCart Connector
A real connector that imports from OpenCart — the open-source PHP commerce platform — into Odoo 19. Bring in products (with categories & images), customers and orders through a small token-secured API companion you drop at your store root — plus two-way stock sync, a live Sync Control Tower, a resilient queue, dry-run safety and full source you can audit.
Verified live against a running OpenCart
We don't just claim a vague version range. The connector was installed on Odoo 19 and pointed at two live, locally-run OpenCart stores — 3.0.3.8 and 4.0.2.3 — running a full product, customer and order import through the same bf_api.php companion with 0 errors on both.
| OpenCart version | API line | Live result |
|---|---|---|
| 4.0.2.3 (OpenCart 4 line) | bf_api.php companion (token) | ✔ Live-tested — 0 errors |
| 3.0.3.8 (OpenCart 3 line) | bf_api.php companion (token) | ✔ Live-tested — 0 errors |
| 3.x & 4.x lines | bf_api.php companion | ✔ Supported — the companion reads the shared OC3/OC4 schema |
The live test imported a real OpenCart product (name, SKU, decimal price, category, stock — the demo "HTC Touch HD"), a customer, and an order with its line items through the state mapping — all green. OpenCart stores text HTML-encoded and prices as decimals; the connector unescapes and converts automatically.
Built to actually sync — not to look busy
OpenCart returns clean, fully-expanded JSON, and this connector treats it that way: one request returns a product with its variants, options, images and categories inline. Every model ships with verifiable sync logic, covered by tests — no fake dashboards, no “readiness score” with nothing behind it.
What you actually get
Everything below ships in the box — including the bf_api.php API companion and a bundled mock OpenCart API so you can demo without a live store.
Products with category & stock
Each OpenCart product imports with its name, SKU/model, decimal price, status, category path, stock quantity and image URLs — HTML-encoded text is unescaped automatically. (Variant/option grid is on the v2 roadmap.)
Customers
Each OpenCart customer becomes a res.partner with name, email, telephone and group — matched to existing partners by email so orders link cleanly.
Orders with state machine
Orders import with line items, shipping and tax totals, and the payment provider. OpenCart status maps to Odoo confirm / cancel / draft through an editable mapping table per instance.
Scheduled, deduplicated sync
A scheduled import pulls new and changed records on a cadence you set. An external-id binder keeps each OpenCart record mapped to its Odoo twin, so re-runs update instead of duplicating.
Self-contained API companion
A single bf_api.php file at your OpenCart root exposes products / customers / orders as JSON, secured by a shared token. It reuses OpenCart's own config.php for DB access — no third-party extension to buy or maintain.
REST JSON client
A hardened client to the bf_api.php companion: a single shared token, limit/offset paging, retry with backoff and 429 handling.
Two-way stock sync
A delta-reconcile cron pushes Odoo on-hand for every bound product back to OpenCart through the companion's native action=set_stock call — one product id + quantity, never a full payload. A 3-layer oversell guard (instance clamp + safety buffer + final ≥0 clamp) means the store can never be told it has stock it doesn't. Optional guarded import writes platform stock into real Odoo inventory.
Sync Control Tower
A live operations dashboard: a kanban of instances surfacing per-instance health, circuit-breaker state, queue backlog depth, dead-letter and conflict counts, 24h throughput and failure rate — as clickable stat cards that drill straight into the queue, dead-letter and conflict views. At-risk instances are coloured.
Bulk Dead-letter Console
A dedicated view of exhausted-retry jobs grouped by error type, with bulk requeue or discard actions — clear a whole class of failures in one move instead of job by job.
Conflict-Resolution Workbench
A triage list with a side-by-side Odoo-vs-remote snapshot diff and bulk resolve: Odoo-wins, remote-wins or mark-reviewed. Every divergence is captured, not silently overwritten.
Conditional branching
The multi-step flow engine now walks true/false branches: a condition step's boolean result routes to true_step_id or false_step_id, with a loop guard against cyclic links. Backward-compatible — flows with no branch links fall through to the next step in sequence.
Field-Mapping Studio
A payload-test wizard: paste a sample JSON payload and see exactly how each field mapping transforms it, in one consolidated studio view — plus one-click mapping suggestions. Tune the mapping before it ever touches live data.
A live walkthrough inside Odoo 19
Recorded in a real Odoo 19 connected to a live OpenCart 4.0.2 — the connection cockpit, a synced product and order, the state mapping and the flow engine, all on real data.
Every screen, from a live install
Captured from a running Odoo 19 connected to a live OpenCart 4.0.2 — real data synced through the connector, not mockups.








Run every OpenCart store from one Control Tower
A short walkthrough of the operations tooling on real data: the Control Tower board, the side-by-side conflict workbench and the bulk dead-letter console.
Production safety, by default
Resilient queue
Retry with exponential backoff, rate-limit awareness, dead-letter handling and conflict capture for every job.
Circuit breaker
Auto-pauses sync after N consecutive failures so a broken endpoint can never flood your data.
Dry-run mode
Default-ON for every new instance — preview the exact write before anything touches live records.
Pre-flight validation
Blocking and warning findings surfaced before go-live, with auto-fix suggestions.
Rollback snapshots
Capture record state before risky writes and roll back cleanly when needed.
SSRF-safe by default
Internal / loopback hosts are blocked unless you explicitly opt in for a trusted self-hosted OpenCart.
Honest feature matrix
No asterisks, no fake checkmarks. Here is exactly what version 1 does — and what is on the v2 roadmap.
| Capability | Status |
|---|---|
| Product import (name, SKU/model, price, status, stock) | ✔ Included |
| Decimal price → Odoo list price (HTML text unescaped) | ✔ Included |
| Product image URLs captured | ✔ Included |
| Categories → Odoo product category | ✔ Included |
| Customers (name · email · telephone · group) | ✔ Included |
| Orders + line items + state mapping | ✔ Included |
| Auth: single shared companion token (bf_api.php) | ✔ Included |
| bf_api.php read companion — included, no third-party extension | ✔ Included |
| Product variants / options → Odoo attribute grid | Roadmap v2 |
| Refunds → draft credit notes (no live OpenCart refund source yet) | Roadmap v2 |
| Queue: retry · backoff · dead-letter · circuit breaker | ✔ Included |
| Pre-flight validation · rollback snapshots · dry-run | ✔ Included |
| Schema introspection & field mapping (JSON path + transforms) | ✔ Included |
Two-way stock sync (Odoo → OpenCart via set_stock, delta-gated, oversell guard) | ✔ Included |
| Guarded stock import → real Odoo inventory adjustment (opt-in, never dry-run) | ✔ Included |
| Sync Control Tower dashboard (health · backlog · dead-letter · conflicts · 24h KPIs) | ✔ Included |
| Bulk dead-letter console (group by error · requeue / discard) | ✔ Included |
| Conflict-resolution workbench (side-by-side diff · Odoo-wins / remote-wins / reviewed) | ✔ Included |
| Conditional branching in the flow engine (true/false steps · loop guard) | ✔ Included |
| Field-Mapping Studio (payload-test wizard · one-click suggestions) | ✔ Included |
| Product export Odoo → OpenCart (create / update) | Roadmap (import-first today) |
| Image binary upload Odoo → OpenCart | Roadmap v2 |
| Multi-region price lists | Roadmap v2 |
Live in four steps
A guided quick-setup wizard and onboarding checklist walk you from API key to first safe sync.
Connect
Enter your OpenCart URL + admin key (or email/password). One click tests credentials and reachability.
Map
Run schema introspection and generate suggested field mappings automatically.
Dry-run
Preview exact writes with dry-run + validation on. Clear any blocking findings.
Go live
Schedule the import cron and let the resilient queue keep Odoo in sync with OpenCart.
Buy with full clarity
In the box today
- Import: products (category, price, stock, images), customers, orders
- Two-way stock sync — push Odoo on-hand to OpenCart (delta-gated, 3-layer oversell guard) + opt-in guarded import into real Odoo inventory
- Sync Control Tower dashboard — live health, backlog, dead-letter, conflict and 24h KPIs as drill-in stat cards
- Bulk dead-letter console — group failures by error type, requeue or discard in bulk
- Conflict-resolution workbench — side-by-side diff with Odoo-wins / remote-wins / mark-reviewed
- Conditional branching in the flow engine — true/false steps with a loop guard
- Field-Mapping Studio — payload-test wizard with one-click mapping suggestions
- bf_api.php API companion — included, not sold separately
- Bundled mock OpenCart API — demo without a live store
- Automated tests (unit + HttpCase, all green)
- Full source included — audit and extend every line for your own use
Deferred / beta
- Product export Odoo → OpenCart is in beta (import is the primary path)
- Image binary upload Odoo → OpenCart (image import is read-only today)
- Multi-region price-list sync
- v1 line is supported via the capability layer — validate on your build
Frequently asked
Which versions are supported?
Odoo 19.0 on the Odoo side. On the store side, the connector was live-tested on OpenCart 3.0.3.8 and 4.0.2.3. Because the bf_api.php companion reads the shared OC3/OC4 database schema, the whole 3.x and 4.x range is supported — validate your exact build with the bundled mock first.
Do I need to install OpenCart to evaluate it?
No. A mock OpenCart API ships inside, so you can install, explore and demo the full import flow before connecting a real store.
How does authentication work?
A single shared token. Set BF_API_TOKEN in the bundled bf_api.php companion at your OpenCart root, and the same token in the Odoo instance. Always serve over HTTPS.
What is the API companion and why is it needed?
OpenCart has no rich admin REST API, so a small self-contained bf_api.php ships inside this package under phase2/opencart_api/. Drop it at your store root and set a shared token; it reuses OpenCart's own config.php for DB access and returns products / customers / orders as JSON. No third-party extension to buy.
Is it safe to run against production data?
Dry-run mode is ON by default for new instances, validation blocks risky writes, and rollback snapshots let you undo. You decide when to go live.
What support and refund policy do I get?
Every request is answered within 24 hours, setup help included. If you report a bug within 2 months of purchase and it isn't resolved within 15 days, you're entitled to a full money-back refund.
Connect Odoo and OpenCart the honest way
24-hour support · Report a bug within 2 months — unresolved in 15 days = full refund · Full source included
bambooforge.labs@gmail.comMore from BambooForge Labs — one vendor, the same standard: tested, source included, supported.
BambooForge OpenCart Connector
A bridge between Odoo 19 and your OpenCart store: import products (with categories and images), customers and orders, map order statuses to sale-order actions, and turn order refunds into draft credit notes — with a resilient job queue, dry-run safety, validation and rollback so you stay in control.
OpenCart ships no rich admin REST API, so this connector includes a small, token-secured API companion (bf_api.php) that you drop at your OpenCart web root. The connector reads it over a hardened token-authenticated client; the companion reuses OpenCart's own config.php for database access and returns products, customers and orders as JSON.
This page is the complete manual. If you follow it top to bottom you can install, connect, run your first sync, automate it, and fix the common issues without contacting support.
- Overview
- Requirements
- Installation
- Step 1 — Configure the companion token & URL
- Step 2 — Create the connection in Odoo
- Step 3 — First sync (dry-run, then live)
- Order status mapping
- Field mapping & customization
- Automation (scheduled actions & webhooks)
- Safety features
- Troubleshooting
- Frequently asked questions
- Data, privacy & limits
- Support & updates
- Upgrading & version compatibility
- Uninstallation
- Changelog
Overview
The connector keeps Odoo in sync with your OpenCart store. Because OpenCart has no native admin REST API, the data comes from the bundled bf_api.php companion (a single self-contained PHP file you install on the OpenCart server). It covers:
- Products — import OpenCart products into Odoo product templates, including their categories and images, and (optionally) stock and tax group.
- Customers — import OpenCart customers (name, email, telephone) into Odoo contacts.
- Orders — import OpenCart orders into Odoo sale orders, mapping each order's numeric OpenCart order_status_id to a sale-order action (keep draft, confirm, cancel, or ignore).
- Refunds — optionally discover OpenCart order credit slips (order_slip) and create matching draft customer credit notes in Odoo.
Direction of sync: Odoo ← OpenCart (import is the primary flow; product export and webhook-driven updates are supported).
Every remote call goes through a queue: nothing is written to Odoo until a job runs, jobs retry with back-off on transient failures, and a circuit breaker pauses an instance that keeps failing.
Requirements
- Odoo: 19.0, Community or Enterprise.
- OpenCart: a running OpenCart store you can add one PHP file to, with access to its config.php database credentials. The companion talks to OpenCart's database directly, so it works across OpenCart versions that keep the standard product, customer and order tables. The store must be reachable from the Odoo server.
- PHP / MySQL: the OpenCart host must run PHP with the mysqli extension (standard on any OpenCart server).
- Python: no extra libraries beyond a standard Odoo 19 install.
- Odoo access: any internal user can use the connector screens. The companion token, webhook secret and other credentials are stored in system-only fields, so only the Settings / Administration user can read or change them.
- Network: outbound HTTPS from Odoo to your store. By default the connector refuses internal/loopback/private hosts as an SSRF safeguard (see Safety features).
Installation
The connector has two parts: the Odoo module, and the bf_api.php companion on the OpenCart server.
Odoo side
- Copy bambooforge_opencart_connector into your Odoo addons path.
- Restart the Odoo service.
- Open Apps, click Update Apps List, search for OpenCart, and press Activate / Install. Dependencies (Sales, Contacts, Invoicing) install automatically.
No OpenCart store is required to evaluate the connector: a mock companion ships inside the module, so you can install, explore and run the full import flow against sample data before pointing it at a real store. To use it, set the instance Base URL to https://<your-odoo-domain>/opencart/mock_api (the mock accepts any non-empty token).
OpenCart side — install the companion
The companion file ships inside the module at bambooforge_opencart_connector/phase2/opencart_api/bf_api.php.
- Copy bf_api.php to your OpenCart web root — the same directory that holds OpenCart's index.php and config.php (the companion reads config.php from its own directory for the database credentials, so it must sit next to it).
- The file is then reachable at https://store.example.com/bf_api.php.
- Set its token (next section), and always serve it over HTTPS in production — the token travels in the request.
Step 1 — Configure the companion token & URL
The companion is protected by a single shared token. It is read from the BF_API_TOKEN environment variable if set, otherwise from the constant at the top of the file (which ships as the placeholder CHANGE-ME-LONG-SECRET). You must change it.
Open bf_api.php and either:
- set the BF_API_TOKEN environment variable on the OpenCart host to a long random secret, or
- edit the line define('BF_API_TOKEN', getenv('BF_API_TOKEN') ?: 'CHANGE-ME-LONG-SECRET'); and replace CHANGE-ME-LONG-SECRET with your own long secret.
Keep that exact secret — you will paste the same value into the Odoo instance API Token field in Step 2. They must match exactly.
Verify the companion responds. In a browser or with curl (replace the token):
https://store.example.com/bf_api.php?token=YOUR-SECRET&resource=ping
A healthy companion returns JSON like {"ok": true, "platform": "opencart", ...}. A 401 Unauthorized means the token does not match; a 500 with "OpenCart config.php not found" means bf_api.php is not next to config.php.
The companion exposes only read endpoints — ping, products, customers and orders — and authenticates every request, either by the token query parameter or an X-BF-Token header.
Step 2 — Create the connection in Odoo
Open OpenCart Connector ▸ Configuration ▸ Instances and create a record.
Key fields:
| Field | What to enter |
|---|---|
| Name | A label for this store, e.g. My Live Store. |
| Base URL | Your store root, e.g. https://store.example.com (or the mock URL to evaluate). |
| Authentication | Companion API Token — the only mode. OpenCart has no admin REST API, so the connector talks to bf_api.php with a shared token. |
| API Token | The BF_API_TOKEN you set in the companion (Step 1). Must match exactly. Visible to administrators only. |
| Companion Path | Path to the companion at the store root. Default bf_api.php; change only if you renamed or relocated the file. |
| Verify SSL | Keep on for production. Turn off only for self-signed test certificates. |
| Allow internal host | Off by default. Turn on only to reach a store on localhost or a private network (lowers the SSRF guard — see Safety features). |
Then click Test Connection. The connector calls the companion's ping endpoint; a green Connected state means the URL and token are correct, and the default order-status mappings are seeded on the first successful connect. If it fails, the exact error is shown on the form and recorded in Logs (see Troubleshooting).
Tip: use Quick Setup (button on the instance) to pick a use case (catalog only, B2C full sync, …), seed default field mappings and order-status rules, and apply a recommended schedule in one step.
Step 3 — First sync (dry-run, then live)
New instances start with Dry-run ON. In dry-run, import and delete jobs simulate writes: instead of changing data they produce Validation Results you can review under OpenCart Connector ▸ Operations ▸ Validation Results. This lets you confirm what would happen before anything is written.
To run a first import:
- On the instance, click Import Products (and/or Import Customers, Import Orders). This enqueues jobs; it does not block the UI.
- Jobs are processed by the OpenCart Queue Processor scheduled action (every minute), or immediately if you run it manually from Operations ▸ Queue Jobs.
- Review Validation Results while still in dry-run.
- When satisfied, open the instance, turn Dry-run OFF, and run the imports again to write the records for real.
Imported records land in the standard Odoo apps: Sales ▸ Products, Contacts, and Sales ▸ Orders. Each carries its OpenCart reference so re-imports update the same record instead of duplicating it.
Order status mapping
OpenCart stores each order's status as a numeric order_status_id, which the connector normalizes onto the order. Under Configuration ▸ Order State Mappings each instance gets a default table (seeded on first successful connect) that decides what happens to the Odoo sale order when an order arrives in a given status:
| OpenCart status id | OpenCart status name | Default Odoo action |
|---|---|---|
| 1 | Pending | Keep draft |
| 2 | Processing | Confirm sale order |
| 3 | Shipped | Confirm sale order |
| 5 | Complete | Confirm sale order |
| 7 | Canceled | Cancel sale order |
| 8 | Denied | Cancel sale order |
| 9 | Canceled Reversal | Cancel sale order |
| 10 | Failed | Keep draft |
| 11 | Refunded | Cancel sale order |
| 12 | Reversed | Cancel sale order |
| 13 | Chargeback | Keep draft |
| 14 | Expired | Cancel sale order |
| 15 | Processed | Confirm sale order |
| 16 | Voided | Cancel sale order |
Change any row to Ignore (do nothing), Keep draft, Confirm sale order or Cancel sale order. Unknown/custom statuses default to Ignore, so a status you have not mapped never triggers a destructive transition. Add a row for any custom status your store introduces (use the exact numeric order_status_id).
Field mapping & customization
- Field Mappings (Configuration) map OpenCart fields to Odoo fields per model. Use Generate suggested mappings on the instance to seed the business-critical ones, then adjust. The mapping board flags fields that need attention.
- Schema Fields lists the discovered OpenCart fields per resource. Run Schema Introspection on the instance to refresh it from your live store (it falls back to sample data if the store is not reachable).
- Stock / images / tax are opt-in toggles on the instance: Sync stock, Sync images (and max images), Upload images on export, Sync taxes and Auto-match taxes on import. They are off by default; turn on only what you need. Tax matching is name-based and never auto-creates taxes.
- Refunds are opt-in: turn on Sync refunds to create draft credit notes from OpenCart order slips, and Auto-post refunds if you want them validated automatically (off by default so accountants can review first).
Automation (scheduled actions & webhooks)
The module ships these scheduled actions (Settings ▸ Technical ▸ Scheduled Actions):
| Scheduled action | Default | Purpose |
|---|---|---|
| OpenCart Queue Processor | every 1 min | Processes queued import/export/delete jobs. |
| OpenCart Reconciliation | every 15 min | Pulls recent remote changes for enabled models. |
| OpenCart Maintenance | every 1 hr | Recovers stale/locked jobs and trims old logs. |
| OpenCart Flow Scheduler | every 5 min | Runs scheduled sync flows. |
| OpenCart Flow Metrics | every 1 hr | Aggregates flow-run metrics. |
| OpenCart Auto Recover | every 15 min | Reopens a tripped circuit breaker once the store is healthy. |
Turn on Auto import / Auto reconcile per model on the instance to let the scheduled actions keep things in sync hands-free.
Real-time webhooks (optional): if your store (or a custom OpenCart extension) can POST events, point them at:
- Delivery URL: https://<your-odoo-domain>/opencart/webhook
- Signature header: X-Opencart-Signature — an HMAC-SHA256 of the raw body using the instance Webhook Secret (admin-only field on the instance).
Odoo verifies the signature on each delivery, rejects stale or replayed requests (the signed emitted_at must be recent), and enqueues a safe import. Without webhooks the scheduled reconciliation still keeps data current.
Safety features
- Dry-run mode — simulate writes and review Validation Results before going live.
- Business validation profiles — Minimal / Standard / Strict gate risky writes.
- Resilient queue — every remote action is a job with retry and exponential back-off, plus a dead-letter state for jobs that exhaust their retries.
- Circuit breaker — after repeated failures an instance auto-pauses (Tripped); the Auto Recover action reopens it once the store responds again.
- Rollback snapshots — when enabled, imports capture a snapshot so you can undo a batch from Operations ▸ Rollback Snapshots.
- SSRF guard — the connector refuses internal/loopback/private hosts unless Allow internal host is explicitly enabled.
- Token-only companion — bf_api.php rejects every request without the matching token and exposes read-only endpoints; serve it over HTTPS so the token is not exposed.
Troubleshooting
| Symptom | Cause and fix |
|---|---|
| Test Connection fails with 401 / "rejected the token" | The API Token in Odoo does not match BF_API_TOKEN in bf_api.php (or its BF_API_TOKEN env var). Re-check Step 1; the placeholder CHANGE-ME-LONG-SECRET must be replaced. |
| Test Connection fails with "config.php not found" | bf_api.php is not in the OpenCart web root next to config.php. Move it beside index.php / config.php (see Installation). |
| Test Connection fails with "Check that bf_api.php is deployed at the store root" | The companion URL returns 404. Confirm the file is uploaded and the Companion Path field matches the actual filename/location. |
| "DB connection failed" from the companion | OpenCart's config.php credentials are wrong/blocked, or PHP lacks mysqli. Confirm the store itself loads, then retry. |
| "Refused internal/private host" | Base URL points at localhost/private IP. Enable Allow internal host on the instance (test/self-hosted only). |
| SSL errors on Test Connection | Self-signed certificate. Use a valid cert, or turn off Verify SSL for testing only. |
| Orders import but never confirm | The order's OpenCart order_status_id is mapped to Keep draft or Ignore. Adjust Order State Mappings. |
| Jobs stay in Pending | The Queue Processor is off or the instance is paused. Check Scheduled Actions is active and the instance is not Paused. |
| Instance shows Tripped | Circuit breaker tripped after repeated failures. Fix the store/token; Auto Recover reopens it, or click Resume. |
| Records imported twice | Imports are keyed by the OpenCart reference, so this should not happen. If it does, check that two instances do not point at the same store. |
| Nothing happens after Import | You are in Dry-run. Review Validation Results, then turn dry-run off and re-run. |
For anything else, Operations ▸ Logs records every API call, payload and error with a timestamp.
Frequently asked questions
Which versions are supported? Odoo 19.0 on the Odoo side. On the store side the companion reads OpenCart's database directly, so it works with OpenCart builds that keep the standard product, customer and order tables. Validate your exact build with the bundled mock first.
Why does it need a PHP file? Can't it use OpenCart's API? OpenCart ships no rich admin REST API. The connector therefore includes bf_api.php, a small self-contained, token-secured companion you drop at the OpenCart web root; it reuses OpenCart's config.php for database access and returns products/customers/orders as JSON.
Where exactly do I put bf_api.php? In the OpenCart web root, the directory that already contains index.php and config.php. It must sit next to config.php because it reads the database credentials from there. It is then reachable at https://store.example.com/bf_api.php.
Do I need OpenCart installed to evaluate it? No. A mock companion ships inside the module. Point the instance Base URL at https://<your-odoo-domain>/opencart/mock_api (any non-empty token) and run the full import flow before connecting a real store.
How does authentication work? A single shared token. Set BF_API_TOKEN in bf_api.php (constant or environment variable) and paste the same value into the Odoo instance API Token field. The companion rejects every request whose token does not match.
How does real-time sync work? If your store can POST events, point them at /opencart/webhook with an X-Opencart-Signature HMAC-SHA256 of the body using the instance Webhook Secret; Odoo verifies the signature and enqueues a safe import. Without it, scheduled reconciliation keeps things in sync.
Is it safe to run against production data? Dry-run is ON by default, validation blocks risky writes, and rollback snapshots let you undo. You decide when to go live. The companion is read-only.
What support and refund policy do I get? Every request is answered within 24 hours, setup help included. If you report a bug within 2 months of purchase and it is not resolved within 15 days, you are entitled to a full money-back refund.
Data, privacy & limits
- The connector reads products (with categories and images), customers, orders and order slips from your store via bf_api.php and writes the corresponding Odoo records. The companion token, webhook secret and other credentials are stored in admin-only fields.
- The companion is read-only: it exposes only the ping, products, customers and orders endpoints and never writes to the OpenCart database.
- In scope today: product/customer/order import (with categories and images), order-status mapping, refund discovery from order slips, product export, scheduled sync, signed webhooks.
- Out of scope / best-effort: tax auto-matching (off by default, name-based, never auto-creates taxes); multi-warehouse stock routing; subscription/booking order types.
Support & updates
- Support: bambooforge.labs@gmail.com — answered within 24 hours, setup help included.
- Refund: report a bug within 2 months of purchase; if unresolved within 15 days, full refund.
- Full source is included, companion file bundled. Updates track the supported Odoo 19 line.
Upgrading & version compatibility
This build targets Odoo 19.0. Each Odoo major series (17.0, 18.0, 19.0) has its own dedicated build of this module — always install the build that matches your Odoo version. Mixing a build with a different Odoo series is not supported.
Patch upgrades (same series, e.g. 19.0.1.0.0 → later)
Back up your database and filestore first.
Replace the module folder with the newer build.
Restart Odoo with the module updated:
./odoo-bin -c your.conf -u bambooforge_opencart_connector -d your_db
Odoo applies any schema/data changes automatically. Your existing records and configuration are preserved.
Cross-version migration (e.g. Odoo 17 → 18)
Upgrading Odoo itself is a database migration handled by Odoo's standard upgrade tooling. When you migrate the database to the next Odoo series, install the matching build of this module for that series. Data created by this module carries over with the database migration.
After any upgrade the module's scheduled actions resume on their normal cadence — no manual re-activation is required.
Uninstallation
You can remove this module at any time from Apps → (this module) → Uninstall, or from the command line. Uninstalling is clean and reversible by reinstalling — but note what is and is not deleted.
What is removed
- The module's own tables and every record in them (20 models, prefixed opencart.*) — this is the data this module created.
- The menus, actions, views and reports this module installed.
- Its scheduled actions (cron jobs) — they stop immediately on uninstall.
- Connection records, credentials, field mappings, queue jobs and sync logs stored in Odoo.
What is preserved
- Your remote platform is never touched. Uninstalling only removes the Odoo-side connector; products, customers and orders on the external store/service are untouched.
- Records already imported into standard Odoo models (e.g. contacts, products, sales orders) remain — they are ordinary Odoo records once created.
- Attachments and chatter messages on standard records are kept.
As always, take a database backup before uninstalling in production.
Changelog
19.0.1.0.0
Current release for Odoo 19.0. This build includes:
- Odoo 19 <-> OpenCart connector: import products, customers and orders via a bundled token-secured API companion.
- Two-way stock sync, live Sync Control Tower, resilient queue and dry-run safety.
Feature additions and fixes ship as new builds on the Odoo Apps store; this page and the module's version reflect the current published release. Always keep the build matched to your Odoo series (see Upgrading & version compatibility).
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module