Get in touch
CRM and integrations · OpenCart

OneBox Sync — CRM for OpenCart 2.3, 3.x and 4.x

Автоматична відправка замовлень OpenCart 2.3, 3.x і 4.x у OneBox OS: процес-замовлення з клієнтом і товарами створюється в CRM одразу після оформлення. Журнал синхронізації, cron-ретраї, зашифровані доступи.

Version
v1.1.1 (OpenCart 4)
v1.1.1 (OpenCart 3.x)
v1.0.0 (OpenCart 2.3)
Compatibility
OpenCart 2.3.0.0 – 2.3.0.2 · 3.0.2 – 3.0.5 · 4.0.2 – 4.1.x
Platform
OpenCart
OneBox Sync — CRM for OpenCart 2.3, 3.x and 4.x

What each licence includes

Feature Free
A process/order in OneBox OS for every OpenCart order
Customer, phone, shipping address and items
Choice of trigger statuses
Deduplication and retries
Exchange log in the admin panel
Compatible with OpenCart 2.3, 3.x and 4.x
Free

OneBox Sync for OpenCart is a module that links a store on OpenCart 2.3, 3.x or 4.x to OneBox OS: every new order automatically becomes a process/order in the CRM, together with the customer, phone number, shipping address and items. Instead of transferring data by hand, the manager sees the request in OneBox straight away and works it through your own business process.

The module is completely free, the code is open. Repository on GitHub: github.com/catcodestudio/opencart-onebox-sync. No keys, no subscriptions, no order limits.

What the admin gets

OneBox Sync settings in OpenCart 4
Module settings in the admin panel: OneBox domain, employee API login and API password, send trigger (on order creation or on transition to a chosen status), routing by business process/stage/source, and a “Test connection” button. The sync log shows, for each order, its status, OneBox ID, number of attempts, and any errors.
OneBox Sync send options: trigger, retries, cron token
Send options: when to send (on order creation or on transition to a chosen status), skip zero-price line items, a separate shipping line, a retry queue with an attempt limit, and a cron token — without it the public retry URL is open to anyone, with it you need &token=.

How it works, step by step

  1. The customer places an order — the module reacts to the order-history-add event, without touching checkout.
  2. The module authenticates with your OneBox: gets a token via POST /api/v2/token/get/ and sends the order via POST /api/v2/order/set/.
  3. Items are matched to the OneBox catalogue: name, SKU (article/model), quantity and price — catalogue products are found or created automatically, with no duplicates in the catalogue. Shipping is passed as a separate line, so the process total matches the order total.
  4. OneBox returns a process ID — it’s recorded in the sync log; an externalid is also passed, so a repeat trigger won’t create a second process.
  5. Failed sends are retried by a cron job — orders that didn’t go through on the first attempt reach the CRM automatically.

Pricing

Free. The module’s code is open — download it from GitHub and use it without restrictions. There is no paid version.

Technical requirements

  • OpenCart 2.3.0.0–2.3.0.2, 3.0.2–3.0.5 and 4.0.2–4.1.x — three separate builds
  • PHP 7.4+ for the OpenCart 3.x and 4.x builds; the OpenCart 2.3 build also runs on PHP 5.6–7.x
  • OneBox OS with the “API v2” component (1b.app → Apps → API Services) and an employee login/password for the REST API

Under the hood

  • OpenCart events — the module subscribes to the order-history-add event (addHistory in OpenCart 4, addOrderHistory in 3.x and 2.3); core and theme files are not modified.
  • Idempotency: an upsert by externalid on the OneBox side plus a unique sync log in the store’s database — no duplicate processes and no duplicate catalogue items.
  • Mapping of items, payment and shipping into the OneBox process fields; optional workflowid/statusid/sourceid routing (empty = the first business process automatically).
  • Cron retry queue for orders that failed to send the first time: it picks up both failed sends and ones stuck “in progress” for over an hour (for example if PHP was interrupted mid-request).
  • Cron token — the public retry URL can be locked down with a shared secret: ...&token=<value>. OpenCart’s built-in scheduler also works without a token; an empty field leaves the endpoint open.
  • The API password is stored encrypted in the database, and the sync log holds the API request and response for diagnostics.

How to install

  1. In OneBox, install the “API v2” component (1b.app → Apps → API Services) and set an employee’s login and password (Users and Employees → Login, password, access rights).
  2. Upload cc_onebox.ocmod.zip via Extensions → Installer in the OpenCart admin. For OpenCart 3.0.2–3.0.5 use the separate build — cc_onebox-oc3.ocmod.zip (after installing, refresh modifications: Extensions → Modifications → “Refresh” button).
  3. For OpenCart 2.3.0.0–2.3.0.2 use the build cc_onebox-oc2.ocmod.zip. ⚠️ The built-in 2.3 installer copies files via FTP only: if FTP isn’t configured, unpack the archive and upload the contents of the upload/ folder to the store root, then go to Extensions → Modules → OneBox Sync → “Install”.
  4. In Extensions → Modules, find OneBox Sync, click “Install” and open the settings.
  5. Enter your OneBox domain, API login and API password, then click “Test connection”.
  6. If needed, fill in the business process, stage and source IDs (you can leave them blank — the module will take the first business process) and save.
  7. Place a test order and check the process in OneBox and the entry in the log.
  8. OpenCart 2.3 has no scheduler — the retry line is added to the hosting’s crontab manually (typically every 15 minutes):
    curl -s "https://SHOP/index.php?route=extension/module/cc_onebox_cron/retry&token=TOKEN"

Version history

1.1.1 — August 2026
Amounts in the CRM no longer travel in the store’s base currency: item and shipping prices are converted into the order’s currency at its historical rate (currency_value), and the currency code is appended to the process’s “Content” field. On a store with a USD base and sales in hryvnia, a 629.99 line item used to arrive as “629.99” instead of 26,144.59 ₴. The change is in the OpenCart 4 and 3.x builds (it was already present in the 2.3 build from the first release).
1.0.0 (OpenCart 2.3) — August 2026
A separate build for OpenCart 2.3.0.0–2.3.0.2 and PHP 5.6–7.x: namespace-free classes, Bootstrap 3 templates, the addOrderHistory event via extension/event. Instead of the scheduler — a storefront URL with its own cron token. The sync log is a separate paginated page. Item and shipping amounts are converted into the order’s currency at its historical rate, and the currency code and order status are carried in the process’s “Content” field.
1.1.0 — August 2026
The order event is registered as order*addHistory — on OpenCart 4.0.2.x the method separator is different, and with a dot the module didn’t trigger at all. Compatibility with PHP 7.4 (PHP 8 syntax removed, string-function polyfills added, mb_substr guarded for hosts without mbstring). A cron token for the public retry URL. The retry queue now also picks up sends stuck “in progress”, not just failed ones. The same changes in the OC3 build: cron token (without it the retry URL returns 403), picking up stuck sends, escaping a hint in the template.
1.0.1 — July 2026
Fixed a “silent” trigger on OpenCart 4.0.2.x: the order-history-add event wasn’t firing because of the method separator.
1.0.0 — July 2026
First public release: sending OpenCart 4.x orders to OneBox OS via API v2 (POST /order/set/ with token auth), upsert by externalid + unique sync log, mapping of items/payment/shipping, workflowid/statusid/sourceid routing, cron retry queue, encrypted API password, connection test.

Frequently asked questions

Where do I get OneBox API access?

From the employee card in the “Users and Employees” app of your OneBox: the employee's login and REST API password. The module exchanges them for a token itself via /api/v2/token/get/.

Does the module change checkout or the theme?

No. The module works through server-side OpenCart events — the checkout page and templates stay exactly as they were, and nothing needs restoring after the module is removed.

Can processes or products get duplicated in OneBox?

No. The module passes an externalid (OneBox updates the found process instead of creating a new one) and keeps a unique sync log; catalogue products are matched by SKU rather than created every time.

What happens if OneBox is unavailable at the moment of ordering?

The send goes into the retry queue — a cron retry will automatically deliver the order once OneBox responds again. The number of attempts and any errors are visible in the log.

Where do orders land in OneBox?

In the business process you specify in the settings (workflowid + statusid + sourceid). If the fields are left blank, the module automatically uses the first business process in your OneBox.

What happens after the module is removed?

Processes in OneBox and orders in the store are left untouched — the module only reads orders and keeps its own sync log.

Questions about the module?

Message us on Telegram — we reply within the working day. We will help with setup, compatibility and key activation.

@catcode_support

Not quite what you are looking for?

We build custom modules for WordPress, WooCommerce, OpenCart and Shopify. Tell us about your task and we will prepare an estimate.

Order a custom module