Get in touch
  • OpenCart
  • CRM and integrations
  • v1.0.1

BAS Exchange for OpenCart — products, prices, stock and orders in sync with BAS

OpenCart 4, 3 and 2.3 exchange with BAS over the CommerceML 2 protocol: categories, products, characteristics, pictures, prices and stock come from BAS, orders go to BAS. The exchange address, user and password are in the admin, BAS starts every exchange itself. The base version is free; Pro adds orders, characteristics, warehouses and special prices, with a lifetime licence.

Download Free
Pro · lifetime licence The more sites, the less each one costs
Compatibility
OpenCart 4.0.2 – 4.1.x, 3.0.x and 2.3.0.2 (tested on 4.1.0.3, 4.0.2.3, 3.0.5.0, 2.3.0.2) · PHP as your OpenCart version requires (tested on 7.0, 8.2, 8.3) · BAS with website exchange over CommerceML 2
Version
v1.0.1 (OpenCart 4)
v1.0.1 (OpenCart 3.x)
v1.0.1 (OpenCart 2.3)
Licence
one site, lifetime
Trial
7 days, no card, one per site
Updated
24 September 2026
Or all 144 Pro modules with All Access — 4 990 ₴ / year

What Free has,
and what Pro adds

The free version works with no time limit. Pro adds the rest of the features in the table.

Feature Free Pro
Exchange address, user and password for BAS — all on the Connection tab, with a curl check ✔ ✔
CommerceML 2 protocol: authorisation, files in parts and as a zip, step-by-step import of large catalogs ✔ ✔
BAS groups → OpenCart categories with the tree, renames and moves ✔ ✔
Products: name, description (text or HTML), SKU → SKU and model, barcode → EAN, weight, manufacturer ✔ ✔
Pictures: main and additional, no copies on repeated exchanges ✔ ✔
BAS properties → OpenCart attributes in the "Specifications" group ✔ ✔
Price from the price type you choose (for example "Retail") and total stock ✔ ✔
SEO URL for new products (transliterated name) ✔ ✔
Items marked as deleted in BAS → disable or leave as is ✔ ✔
Matching existing products by SKU (or model), no duplicates ✔ ✔
Choice of the fields BAS may overwrite and of the languages texts go into ✔ ✔
Manual import of import.xml, offers.xml and a zip with pictures in the admin ✔ ✔
Exchange log in the admin and the cc_basx.log file ✔ ✔
Exchange files kept outside the public folder, deleted right after import ✔ ✔
Builds for OpenCart 4.x, 3.x and 2.3; admin in Ukrainian, Russian, English ✔ ✔
Order exchange: BAS collects new and changed orders — ✔
Order statuses back from BAS: paid, final, cancelled, your own rules — ✔
Characteristics (size, colour) → a required option with its own stock and price difference — ✔
Special price from a second price type — ✔
Stock from the warehouses you pick only — ✔
Products missing from a full upload → disable or stock 0 — ✔

What it looks like

BAS Exchange Connection tab in the OpenCart admin: exchange address, user and password for BAS
Connection tab (OpenCart 4.0.2.3, admin in Ukrainian): the exchange address, user and password (hidden here) with Copy buttons, the curl check, the exchange files folder outside the public folder and the short address button for the store root.
Catalog settings: SKU matching, fields, languages, price types, characteristics, warehouses
Catalog tab: matching by SKU, fields BAS may update, text languages, SEO URLs, the price type for the price and the special price, characteristics, warehouses and full upload handling. Price types and warehouses are taken from the very first exchange.
Order exchange settings in OpenCart: statuses, currency, encoding, paid statuses, status rules
Pro, Orders tab: which statuses go to BAS, currency, file encoding, what statuses from BAS mean (paid, final, cancelled), in which statuses an order counts as paid, and your own rules “BAS status text = OpenCart status”. Below: download the file BAS will get and send everything again.

Key points

What the buyer sees

The buyer sees on the site what is in BAS — and never sees the exchange itself:

What the admin gets

Extensions → Modules → BAS Exchange, five tabs: Connection, Catalog, Orders (Pro), Log and manual import, and Licence.

How much it costs

The base version is free (0 UAH), with no time limit: the whole catalog, price and stock exchange.

The trial starts when you ask

A fresh install is the free version, nothing switches on by itself. The “Try Pro for 7 days” button → e-mail → the key right in the window and by e-mail.

One key — one site

Moving the store? Unbind the licence on the old domain and activate it on the new one yourself. If our server is unreachable, Pro keeps working for 14 more days. For studios — keys for 5 or 25 sites, or unlimited.

Technical requirements

  • BAS with website exchange over the CommerceML 2 protocol.
  • OpenCart 4.0.2 – 4.1.x (tested on 4.1.0.3 and 4.0.2.3), 3.0.x (tested on 3.0.5.0) or 2.3.0.2.
  • PHP as your OpenCart version requires: the 2.3 build was tested on PHP 7.0, the others on PHP 8.2 and 8.3. The XMLReader extension is required; the Zip extension is needed for archives (without it the module asks BAS to send files unpacked).
  • The store must be reachable for BAS over HTTP(S) at the exchange address. If there is a firewall in front of the store, let this address through; OpenCart maintenance mode closes it.
  • The server must run PHP inside the module folder; if it does not, use the “Create the short address” button for the store root.
  • The server request timeout must be longer than “Seconds per import step” (20 s by default).

Version history

v1.0.1 Current 24 September 2026

Fixed a fatal error on the module page.

v1.0.0 First release September 2026

For OpenCart 4.x, 3.x and 2.3: CommerceML 2 exchange point (authorisation, files in parts and zip, step-by-step import), groups → categories, products with pictures, barcode, weight and…

Frequently bought with BAS Exchange for OpenCart

4 modules in one order — 40% cheaper than separately

“Store starter” bundle BAS Exchange Nova Poshta Premium LiqPay Telegram notifications and Viber/SMS for customers Need more — all 144 modules in All Access for 4 990 ₴.
3 790 ₴ lifetime instead of 6 260 UAH bought separately
Buy the bundle →

Full module description

BAS Exchange for OpenCart connects an OpenCart store with BAS over the CommerceML 2 protocol. Products, prices and stock are kept in BAS and the store receives them by itself: no CSV or Excel exports, no retyping prices by hand, and no “in stock” on the site for goods that are already gone from the warehouse. In the other direction (Pro), BAS collects orders from the store and sends their statuses back.

BAS starts every exchange: in its website exchange settings you enter the address, user and password from the Connection tab, and BAS then sends the catalog and offers and collects orders on schedule or on demand. The store answers exactly the way the protocol expects. One module, three builds: OpenCart 4.x, 3.x and 2.3.

Running WordPress? There is BAS Exchange for WooCommerce with the same protocol and the same settings.

What the buyer sees

The buyer sees on the site what is in BAS — and never sees the exchange itself:

  • Current prices and availability. The price from the chosen price type and the stock are updated with every exchange.
  • The catalog as in your accounting. BAS groups become categories with the same nesting (top-level ones in the storefront menu), properties become attributes on the product’s Specification tab.
  • Pictures and description come with the product; a repeated exchange does not multiply image copies in image/catalog.
  • Sizes and colours (Pro) — a required “Size / Colour” option with its own stock and price for each value; a value that is out of stock cannot be bought. The special price is shown next to the crossed-out regular one.
  • A product marked as deleted in BAS is disabled and disappears from the storefront.

What the admin gets

Extensions → Modules → BAS Exchange, five tabs: Connection, Catalog, Orders (Pro), Log and manual import, and Licence.

  • Connected in a minute. The module creates the address, user and password on install — you only copy them into BAS. The user and password are separate; this is not an OpenCart admin account.
  • Control over fields. Name, description, SKU and barcode, categories, images, attributes, manufacturer — each field can be handed to BAS or kept editable in the store. Texts go into every store language or just one, if you translate the others by hand.
  • Price types and warehouses are taken from the BAS files and listed in the settings — no need to guess the names.
  • The log records every exchange step with its result: what came in, how many items were created and updated, what was skipped and why. The full history is in cc_basx.log in the store’s log folder.
  • Manual import — upload import.xml, offers.xml or a zip with pictures right in the admin. Handy for the first load and for checking a problem file.

Pro: orders, characteristics, warehouses, special prices

  • Orders to BAS. During an order exchange BAS collects new and changed orders with the chosen statuses: buyer, shipping address, phone and e-mail, product lines with BAS ids (including the characteristic), shipping and fees as services, discounts and coupons spread over the lines.
  • Statuses from BAS. Paid, the final status, cancelled and your own rules like “Відвантажено = Complete”. The change goes through the core OpenCart order history — with a history entry, like a manual status change.
  • An honest “paid” flag. For cash on delivery only in a completed status; for prepaid orders in the statuses you ticked.
  • Characteristics. OpenCart has no variations, so product characteristics from BAS become one required option with its own stock and price difference; the product price is the cheapest characteristic.
  • Special price from a second price type (for example “Sale”) — when it is lower than the regular one.
  • Warehouses: stock in the store is the sum of the ticked warehouses only.
  • Full upload: products that came from BAS before but are missing from a full upload — disable or set stock to 0. When they are back in BAS, they reappear on the storefront. Products added in the store by hand are never touched.

How it works — step by step

  1. BAS calls the exchange address with the user and password and gets a session.
  2. The store tells BAS whether it accepts zip archives and how big the file parts may be — within what your server accepts.
  3. BAS sends the files: import.xml (groups, properties, products), offers.xml (prices and stock) and pictures — in parts or as one archive.
  4. The store imports the file in steps: when the step time runs out it answers “progress”, and BAS repeats the request until the import is finished.
  5. Every product, category and characteristic gets its BAS id in the module’s tables — later exchanges update them instead of creating new ones.
  6. Exchange files are deleted right after import; the log keeps the result of every step.
  7. Pro: during an order exchange BAS gets a file with orders, confirms receipt, and next time gets only new and changed ones. Statuses from BAS come back in a separate file.

How much it costs

Pro — 1,290 UAH, one payment, lifetime licence. No yearly fees: the module and the Pro features stay yours. One licence for one domain covers all three builds — OpenCart 4.x, 3.x and 2.3. Moving the store to another domain — press “Release the licence from this store” on the Licence tab of the old store and activate the key on the new one.

Trial first, then payment. The free 7-day Pro trial is switched on with a button on the Licence tab, no card needed. The trial never starts by itself: a fresh install is the plain free version. When the trial ends only the Pro features switch off; catalog, prices and stock keep exchanging.

Under the hood

  • Streaming XML. Files are read one element at a time instead of loading the whole file into memory, so a large catalog does not hit memory_limit. Files in windows-1251 are read too.
  • Resume where it stopped. The import state of each file is kept between steps; a repeated BAS request continues instead of starting over.
  • Own link tables with BAS ids for categories, products, characteristics, attributes and images: no duplicates on repeated exchanges or after renames. OpenCart tables only get ordinary catalog rows.
  • Security. A separate user and password for BAS; file names are checked (no “../” and no executable extensions), zip archives are unpacked with protection against leaving the folder.
  • Files outside the public folder. The module picks a folder outside the site root for exchange files and deletes XML right after import — order files included, since they hold personal data. The admin shows where the files are; another folder can be set with the CC_BASX_EXCHANGE_DIR constant in config.php.
  • Own error handler. The exchange runs under its own error handler: OpenCart 4 redirects to an error page on any PHP warning, while BAS must get a protocol answer.
  • Cleans up after itself. With “Delete data on uninstall” ticked, uninstalling removes its tables, log and exchange folder; the products, categories and orders stay.

How to install

  1. OpenCart 4: Extensions → Installer → upload cc_basx.ocmod.zip (do not rename the archive) and press Install. OpenCart 3: Extensions → Installer → cc_basx-oc3.ocmod.zip, then Extensions → Modifications → Refresh. OpenCart 2.3: upload the contents of the upload/ folder from cc_basx-oc2.ocmod.zip to the store root (FTP or the hosting file manager).
  2. Extensions → Extensions → Modules → BAS Exchange → Install, then Edit.
  3. Connection tab: copy the exchange address, user and password. The curl command on the same tab checks that the address answers “success”.
  4. In BAS open the website exchange settings (CommerceML protocol) and paste these three values.
  5. On the Catalog tab choose which fields BAS may update, and keep “Match by SKU” on if the store already has products.
  6. One exchange first, then warehouses. Run the exchange in BAS and check the log. After the first exchange the Catalog tab lists the price types and warehouses — choose the price type (for Pro also the special price type and warehouses) and save.
  7. For Pro: paste the licence key from the e-mail after payment or start the 7-day trial on the Licence tab, then switch on order exchange on the Orders tab.

Questions
about the module

Didn't find the answer? Message us on Telegram and we'll reply within a business day.

@catcode_support Setup, compatibility, activation
Where do I find the address for BAS?

Extensions → Modules → BAS Exchange → Connection tab. It shows the exchange address, user and password with Copy buttons, plus a curl command to check it: the answer must start with "success". BAS adds the protocol parameters to the address by itself.

Has the module been tested with a live BAS?

No. The exchange was tested with a CommerceML 2 protocol simulator playing the part of BAS: the same requests, files in parts and as an archive, large catalogs, orders and statuses — on OpenCart 4.1, 4.0.2, 3.0 and 2.3. Run your first exchange with your BAS during the 7-day trial; if something goes wrong, the log shows at which step, and we fix it quickly.

The warehouses do not show up in the settings.

That is expected before the first exchange: the module takes the list of warehouses and price types from the BAS files. Run one exchange first, then choose the warehouses and the special price type on the Catalog tab and save. If you save earlier, stock is counted over all warehouses.

The exchange address answers 403 or 404.

Some servers do not run PHP inside module folders. Press "Create the short address" on the Connection tab — a bas_exchange.php file appears in the store root that only passes the request on. Then give BAS the address https://your-store/bas_exchange.php.

Will the exchange overwrite descriptions I wrote in the store?

Only the fields ticked in Catalog → "BAS may update". Untick "Description" and BAS fills it only for new products. Prices and stock always come from BAS.

The store already has products. Will there be duplicates?

No, with "Match by SKU" on: a product BAS sends for the first time is linked to the existing product with the same SKU or model. After that the link is kept by the BAS id, so renaming an item in BAS updates the same product.

How does BAS know an order is paid?

For cash on delivery — only in a completed status (for example Complete): a COD order in Processing is not paid yet. For prepaid orders — in the statuses you ticked in "Paid statuses" on the Orders tab.

Will my whole order history go to BAS?

No. Only orders with the chosen statuses created after the order exchange was switched on are sent. If BAS missed something, "Send everything again" sends those orders once more.

Can I try it without BAS?

Yes. Export import.xml and offers.xml from BAS (or any CommerceML 2 files) and upload them on the "Log and manual import" tab — they are imported exactly like an exchange.

Not quite what you are looking for?

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

Order a custom module