The plugin implements the standard "exchange with website" protocol built into 1C configurations
(Trade Management, Small Business Management, Integrated Automation, etc.). Nothing needs to be modified on the 1C side.
A Russian version of this document is in readme-ru.txt.
Catalog (1C → website)
- Category tree from 1C groups, products, descriptions, SKUs, weight, images.
- 1C properties become global WooCommerce attributes (usable in filters).
- 1C characteristics ("Id#Id") become variable products with variations.
- Prices: a chosen price type plus an optional "sale" price type (by name or Id).
- Stock: summed across all warehouses; CommerceML 2.05 and 2.08+ (offers / prices / rests).
- Products marked for deletion in 1C are moved to drafts or trash and restored with their previous
status when the mark is removed. Products you removed manually are never touched.
- Large catalogs are imported in steps, so hosting timeouts are not a problem.
Orders (website → 1C)
- Orders are sent to 1C after creation and after every status change, including shipping and fees.
- Optional: order statuses from 1C (cancelled, shipped, paid) are applied back to the website.
- Compatible with HPOS (WooCommerce high-performance order storage).
Speed
- Products whose data in 1C has not changed since the previous exchange are skipped; prices and stock are saved
only when they actually change. A repeated exchange of an unchanged catalog takes seconds.
- Images are uploaded once: identical files are recognised, including images uploaded by the previous
1C exchange plugin (no duplicates after switching).
- Optional "WooCommerce sizes only" mode generates fewer thumbnail files and uploads images 2–3× faster.
- "Forced full exchange" (Maintenance tab) reprocesses every product once on the next exchange.
- "Image cleanup" removes images uploaded by the exchange that are no longer used by any product.
Other
- Picks up GUIDs left by the previous 1C exchange plugin (
_id_1c meta), so switching does not create duplicates.
- Polylang / WPML: when translations share a GUID, the product or category in the default language is updated;
the exchange URL also works with a language prefix (/en/wc1c-exchange/).
- Per-field update control for existing products: name, description, categories, images, SKU, weight, prices and stock
can each be protected from being overwritten by 1C.
- A "Do not update from 1C" checkbox on a product's Inventory tab protects a hand-edited product
(prices and stock still update).
- Attributes: "sync with 1C", "only add values from 1C, never remove" or "don't touch".
Attributes added manually (not coming from 1C properties) are never removed in any mode.
Full export and changes-only export
- The export type is detected automatically from the 1C file ("contains only changes" flag).
- Changes-only export: only the received products are updated, nothing else is touched.
- Full export: products from 1C that are missing in it can be left as is, unpublished (draft),
set to "Out of stock" or moved to trash. Products created manually on the website are never affected.
- Runs in the background (WooCommerce Action Scheduler) after 1C signals the end of the exchange,
or 15 minutes after the last full file for configurations that do not send the signal.
- Safety: if more than half of the 1C products are missing, nothing is done and a warning is logged
(looks like an interrupted exchange). A hidden product comes back as soon as it appears in an export again.
- Translations (Polylang / WPML) follow the original product.
Security
- The exchange password is stored only as a hash; after login a random session token is used.
- 10 wrong passwords lock the IP for 15 minutes; an optional IP allowlist is available.
- Temporary files live in a randomly named folder protected by .htaccess / web.config.
- Strict file name checks (only xml / zip / images, no "..", no symlinks); zip-slip and zip-bomb protection.
- XML is parsed as a stream without network access or external entities (XXE-safe).
- Statuses from 1C are applied only to orders the website itself sent to 1C.
- Internal errors are written to the WooCommerce log only and are never shown to the client.
- In WordPress go to Plugins → Add New → Upload Plugin, choose the zip file and click Install Now, then Activate.
WooCommerce must be installed and active.
- Go to WooCommerce → Обмен с 1С (the GerSync settings page). Set an exchange login (Latin letters) and a long random password, then save.
- Copy the exchange URL shown at the top of the settings page, e.g.
https://example.com/wc1c-exchange/.
- In 1C open Administration → Data exchange → Exchange with websites (the exact path depends on the configuration),
create an exchange node and enter the URL, login and password from step 2–3.
- Choose what to exchange in 1C: products (catalog, prices, stock) and/or orders. Run the exchange.
- If products already exist on the website and have no 1C GUID, enable "Match existing products by SKU"
before the first exchange to avoid duplicates.
It is strongly recommended to run the first exchange on a copy of the website or after making a database backup.
If 1C reports that the server did not receive the login/password
On some hosts (PHP running as CGI/FastCGI) the Authorization header does not reach PHP.
For Apache add this to
.htaccess in the site root, before the WordPress rules:
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
For nginx + PHP-FPM add:
fastcgi_param HTTP_AUTHORIZATION $http_authorization;
nginx note: .htaccess is ignored by nginx. Deny direct access to the temporary exchange folder in the server config:
location ~* /gersync-[a-f0-9]{24}/ { deny all; return 404; }
The "Connection" tab of the settings page checks automatically whether the folder is reachable from the web.
CDN / page cache note: exchange responses are sent with
Cache-Control: no-store, but a CDN rule like Cloudflare "Cache Everything" with an Edge TTL override ignores it. Exclude the exchange address (
/wc1c-exchange/ or
?wc1c_exchange) from such rules (Cloudflare: Cache Rules → Bypass cache).