Migration of a site from OpenCart to 1C-Bitrix

Our company is engaged in the development, support and maintenance of Bitrix and Bitrix24 solutions of any complexity. From simple one-page sites to complex online stores, CRM systems with 1C and telephony integration. The experience of developers is confirmed by certificates from the vendor.
Our competencies:
Development stages

Website Migration from OpenCart to 1C-Bitrix

OpenCart is a solid engine for small stores. But when the catalog grows to tens of thousands of items, 1C integration appears, complex promotions logic or marketplace integration needed — OpenCart hits its ceiling. Migration to 1C-Bitrix solves these limitations, but requires careful work with data: storage structures are fundamentally different.

What Exactly Migrates

Everything accumulated in the OpenCart database:

  • Products — tables oc_product, oc_product_description, oc_product_image, oc_product_attribute. Each product has main image and gallery, SEO fields (oc_product_description.meta_title, meta_description), arbitrary attributes.
  • Categoriesoc_category, oc_category_description. Category tree with unlimited nesting.
  • Ordersoc_order, oc_order_product, oc_order_history. Order history with products, statuses, delivery addresses.
  • Customersoc_customer with addresses from oc_address.
  • Reviewsoc_review.
  • Manufacturersoc_manufacturer.

Additionally check installed extensions: store often has third-party modules storing data in custom oc_* tables.

How Storage Works in Bitrix

Bitrix has no direct "product table" analog. Products stored as iblock elements (b_iblock_element, b_iblock_element_property), properties — flexibly through types. Catalog is implemented by catalog module on top of infoblocks: prices in b_catalog_price, stock in b_catalog_store_product (if warehouse connected), product offers as separate iblock.

This fundamental difference defines entire migration logic.

Migration Stages

1. Analysis and Preparation

Take OpenCart database dump. Inventory: how many products, category tree depth, number of attributes, unique options (product variants). If OpenCart used products with options (oc_option, oc_product_option) — design product offers structure in Bitrix.

2. Bitrix Deployment

Install 1C-Bitrix of required edition. For online store minimum — "Small Business", for full catalog with multiple price lists and warehouses — "Business". Configure catalog infoblocks, create properties for OpenCart attributes.

3. Data Import

Write PHP migration script. Structure: read from OpenCart MySQL dump via PDO, create elements in Bitrix via CIBlockElement::Add() or, for speed, direct insert into b_iblock_element with subsequent \Bitrix\Iblock\IblockTable call. For large catalogs (50,000+ items) direct insert via batch queries is 10–20x faster than API.

Transfer categories first — form sections tree via CIBlockSection::Add(), save oc_category_id → IBLOCK_SECTION_ID mapping for subsequent product binding.

4. Image Transfer

Copy images from OpenCart's /image/catalog/ to Bitrix server. Register each image via \CFile::MakeFileArray() and attach to element via MORE_PHOTO property. Main image — PREVIEW_PICTURE field of iblock element.

5. Orders and Customers

Transfer orders to b_sale_order / b_sale_order_props_value / b_sale_basket. Create customers as users via CUser::Add() in "Customers" group. OpenCart passwords stored in MD5 with salt (oc_customer.salt) — these hashes incompatible with Bitrix. Send users password reset emails.

6. SEO and Redirects

Map old OpenCart URLs to new ones. OpenCart builds URL by template /index.php?route=product/product&product_id=42 or via SEO filter /product-slug. In Bitrix URL determined by component's URL structure. Form 301-redirect table, upload via main module (\Bitrix\Main\UrlRewriter) or via .htaccess / nginx config.

Pitfalls

OpenCart attributes → Bitrix properties. OpenCart attributes (oc_attribute) are just text "name: value" pairs. Bitrix properties are typed. Before migration, inventory attributes and decide: what becomes "List" property, what — "String", what — "Number".

Product options. If OpenCart had options (color, size) with separate prices and stock — in Bitrix these are product offers (PO). Create PO iblock and transfer options as separate elements bound to parent product via PROPERTY_CML2_LINK.

Multi-currency. OpenCart stores multiple currencies in oc_currency. In Bitrix currencies configured in currency module, each price type (b_catalog_price_type) can have its currency.

Extensions. Third-party OpenCart modules — subscription form, loyalty program, shipping — don't migrate automatically. Each needs Bitrix analog or custom development.

Timeline

Stage Typical Duration
Data analysis and structure design 1–2 days
Writing migration script and testing on copy 3–5 days
Image transfer 1–2 days
Orders, customers, history 1–2 days
SEO-redirects and URL verification 1 day
Final verification and launch 1 day
Total 8–13 working days

Timeline depends on catalog volume and number of non-standard extensions in source store.

What Remains Client's Responsibility

After migration, you'll need to configure design (OpenCart theme doesn't transfer), payment systems via sale module, shipping services. If store works with 1C — configure exchange via CommerceML and standard /bitrix/admin/1c_exchange.php handler. This goes beyond data migration, but logically done in same project.