Integrations module

Connect your WooCommerce
shop to GSE-Web

Your catalogue and available stock go to the shop. Paid orders arrive in GSE-Web as confirmed outbound orders, with stock reserved.

Home / Documentation / WooCommerce connector

In brief

The WooCommerce connector links a WooCommerce shop to a GSE-Web warehouse. GSE-Web publishes the stock, the shop sends its orders. It is set up by an administrator of the organisation, in the ADMIN › “Integrations” menu.

  • What goes to the shop: the pages of simple products, kits and products with variants (name, reference, price, barcode), if you ask for it, and the available stock of the published warehouse.
  • What arrives in GSE-Web: each selected order becomes a confirmed outbound order, with stock reserved; the buyer becomes an “Individual” customer. If you ask for it, the description and photos of linked products are also pulled from the shop.
  • When: stock goes to the shop a few seconds after each change in GSE-Web, and an order arrives at once by webhook. A full pass runs every 5 minutes and catches up anything missed.
  • What is never done: nothing is deleted in the shop, and GSE-Web never writes the lines of a shop order. It only changes its status, “completed” or “cancelled”, if you ask for it.
  • Switching off: pause, disconnect or close the module at any time, without losing anything; on resuming, orders placed in the meantime are caught up.
Before you start

Requirements

Check these points before opening the connector screen: the connection test checks them and states plainly what does not fit.

✓

WooCommerce 7.0 or later

The shop must be served over HTTPS. The product barcode (GTIN) is published from WooCommerce 9.2.

✓

A read/write REST API key

In WooCommerce: Settings › Advanced › REST API › Add key, “Read/Write” permissions. Note the key and the secret: WooCommerce does not show the secret again.

✓

The modules enabled for your organisation

“Integrations”, then “WooCommerce”. Ask KLS-Concept to enable them. Without “Integrations”, the menu entry does not appear; without “WooCommerce”, its card reads “Not available for your organisation”.

✓

An ADMIN account with two-factor authentication

Entering the shop's credentials is refused until two-factor authentication is turned on for your account, in “My information”.

✓

A real warehouse

Its available stock is published to the shop and orders become outbound orders there. An exercise warehouse is refused.

✓

The same currency

The shop's currency must be your organisation's.

✓

The same price mode

The “Published prices” choice (excluding or including tax) must match the shop's “Prices entered with tax” setting.

Step-by-step setup

Six steps, in the order of the screen.

1

Open the connector screen

ADMIN menu › “Integrations”. The WooCommerce card is in the “E-commerce” category. Click “Set up” (the button becomes “Manage” once the shop is saved).

2

“Shop” card

Fill in “Shop address” (full address, starting with https://), “Consumer key” and “Consumer secret”, then choose the “Published warehouse”.

The key and the secret are write-only: once saved, they are never shown again. The screen only shows a few characters of the key so you can recognise it. To keep it, leave both fields empty; to replace it, enter a new key and its secret.

3

“Settings” card

Each setting has a default value:

  • “Published prices”: “Excluding tax” by default, or “Including tax”.
  • “Create and update product pages in the shop”: unticked by default. Unticked, GSE-Web creates no page: it only links the products already in the shop with the same reference (SKU).
  • “Publish available stock”: ticked by default.
  • “Receive orders”: ticked by default.
  • “Report deliveries and cancellations to the shop”: ticked by default. Order delivered: shop order “completed”, with carrier and tracking number in a customer note. Order cancelled in GSE-Web: shop order cancelled.
  • “Imported order statuses”: “Processing” by default. You can add “Pending payment”, “On hold” and “Completed”.
  • “Maximum age of a caught-up order (days)”: 30 by default, from 1 to 90.
  • “Pull the description and photos from the shop”: unticked by default. The shop remains the owner of the description and photos, which GSE-Web never sends to it; ticked, they are copied onto the linked product. An empty description in the shop never erases the one in GSE-Web, and a photo added in GSE-Web is never removed.
4

Save

Click “Save”. “Test the connection” and “Activate” use the saved configuration: as long as a change is not saved, the screen says so and these two buttons wait.

5

Test the connection

“Test the connection” queries the shop and checks four points: the WooCommerce version, the key's write permission, the currency and the price mode. A refusal is shown plainly, with what is wrong (see troubleshooting below).

6

Activate

“Activate” runs the test again, then creates four “GSE-Web” webhooks in WooCommerce. The status becomes “Active — stock sent as soon as it changes, full sync every 5 minutes” (“Active — synced every 5 minutes” if stock is not published). Orders received before activation are not imported.

What is synchronised, and which side is authoritative

Each field has a single owner. In a shop order, GSE-Web only writes its status and a delivery note, never its lines.

📦 GSE-Web is authoritative

  • ✓Product name
  • ✓Reference (SKU in the shop)
  • ✓Sale price, excluding or including tax depending on the setting
  • ✓Barcode (GTIN, WooCommerce 9.2 or later)
  • ✓Published or draft
  • ✓Stock

🛒 The shop is authoritative

  • ✓Description (pulled into GSE-Web as an option)
  • ✓Photos (pulled into GSE-Web as an option)
  • ✓Categories
  • ✓Tax class
  • ✓Orders

The rules

  • Simple products, kits and products with variants. A kit is published as a simple product, its stock being the number of kits that can be assembled from the components in the published warehouse. A product with variants is published as a variable product, with no price or stock of its own; each variant is one of its variations, with its reference, price and stock.
  • A product withdrawn from sale in GSE-Web becomes a draft in the shop. It is never deleted there.
  • A product page changed in the shop on a field GSE-Web is authoritative for is rewritten at the product's next change in GSE-Web.
  • Published stock = available stock of the published warehouse (physical minus reserved), rounded down to the unit, never negative. It goes to the shop a few seconds after each change: receipt, issue, transfer, stock count, reservation placed or released on an order. The full pass also reads it again every 5 minutes.
  • One order = one confirmed outbound order from the published warehouse, with “Reserve the products for this order.” ticked: the whole ordered quantity is reserved, even beyond the stock (the shortfall shows as “Awaiting receipt” on the order), and the stock published in the shop drops at once. The delivery address is copied. Never a partial order: if a line is a problem (unknown product, unknown variation, kit that cannot be published, missing e-mail, other currency), no order is created and an item to handle explains why.
  • One buyer = one “Individual” customer, found again by e-mail from one order to the next (code starting with WEB-). A business partner already in GSE-Web is not matched: an “Individual” customer is created.
  • Order cancelled in the shop (cancelled, refunded, failed, moved to the bin or deleted): the outbound order is cancelled and its reservations released, unless someone is already handling it. In that case, an item to handle leaves the decision to the team.
  • Order changed in the shop after import: the change is not carried over to the outbound order; an item to handle asks you to check it.
  • An order for a kit becomes an outbound order for its components (quantity × number of kits); the order's note names the kit. An order for a variation gives an order for the variant, as for any product.
  • Reporting deliveries and cancellations (setting ticked by default): an order delivered or closed in GSE-Web sets its shop order to “completed”; if it left in a shipment, the carrier and tracking number are added as a customer note, which WooCommerce sends to the buyer. An order cancelled in GSE-Web cancels its shop order. A shop order already closed by the shop is not undone: an item to handle reports it. Partly delivered or in preparation: nothing until the order is complete.
  • Pulling the description and photos (setting unticked by default): on each pass, for each linked product, the shop's description (its short version if the long one is empty) is copied as plain text onto the product. Photos are added in the shop's order, the first being the main one, and removed when they disappear from the shop. An empty description in the shop never erases the one in GSE-Web, and a photo added in GSE-Web is never removed. At most 20 photos per product.
  • What is not pulled: categories, the tax class, and the description and photos specific to each variant (only those of the main product are). Names, prices and barcodes changed in the shop do not come back either: GSE-Web is authoritative for them.

Day to day

The connector screen reads from top to bottom: status, shop, settings, buttons, then the items to handle and the log.

The “Status” card

It shows where the connection stands, the shop's WooCommerce version and currency, the date of the last sync, the last error and the number of items to handle. On the card of the “Integrations” page, the status fits in a chip.

  • Not active yet “Set up, not activated yet”.
  • Connected “Active — stock sent as soon as it changes, full sync every 5 minutes”. If stock is not published: “Active — synced every 5 minutes”.
  • Paused “Paused — nothing is sent or imported”.
  • Stopped — check it “Stopped by the server — check the key and test”.

“Sync now”

Stock is sent to the shop automatically, a few seconds after each change, and orders arrive as soon as they are placed: the screen recalls this below the button. This button only starts the full sync right away (product pages, stock, missed orders, deliveries), which otherwise runs every 5 minutes. The message says whether the pass finished, whether it raised items to handle, or why it did not start.

The “What flows between GSE-Web and the shop” card

Below the settings, a card collapsed by default tells, for each exchange, which way it goes: from GSE-Web to the shop (pages, stock, kits, variants, deliveries and cancellations), from the shop to GSE-Web (orders, cancellations, description and photos) and what never goes through (order lines, categories and tax class, names, prices and barcodes changed in the shop). A line tied to an unticked setting is marked “Off”.

The “Log”

Each pass is listed with its type and its result. Types: “Product pages”, “Stock”, “Live stock” (sent as soon as a stock changes, listed only if a quantity changed), “Pull from the shop”, “Order catch-up”, “Order feedback”, “Order received”, “Webhook check”, “Connection test”. Results: “Succeeded”, “Partial”, “Failed”, “Running”, “Interrupted”. Clicking a pass opens its detail, item by item: product created or updated, stock published, order imported or cancelled, photo pulled, webhook reactivated… (at most 200 items per pass; beyond that, the number of items not detailed is shown). Passes that changed nothing can be hidden.

The “Items to handle”

A line that does not go through never blocks the sync: it becomes an item to handle and the rest carries on. Items about product pages and stock clear themselves once their cause is fixed. Order items have two buttons.

  • “Retry” reads the order from the shop again and retries the import, whatever its age.
  • “Ignore” puts the item away: an ignored item does not come back to the list. “Ignore all”, at the top of the list, puts away all open items at once, including those not displayed, after confirmation.

Product pages

Product …: product type not supported by the shop

Cause
This product is of a type the connector does not publish. Simple products, kits and products with variants are published.
What to do
Nothing to do in GSE-Web. Manage this product directly in the shop.

Product …: no sale price — not published

Cause
The product has no sale price in GSE-Web.
What to do
Enter its sale price. The item clears at the next pass.

Product …: VAT rate missing, tax-inclusive price cannot be computed

Cause
Prices are published including tax and the product has no VAT rate.
What to do
Enter the product's VAT rate.

Product …: the reference is already used in the shop by another product

Cause
The shop product carrying this reference is already linked to another GSE-Web product, is not of the same type (simple product, variable product or variation), or is a variation of another variable product. A reference containing a comma cannot be searched in the shop either.
What to do
Make sure one reference designates a single product, on both sides.

Product rejected by the shop (…)

Cause
WooCommerce rejected the product page; its rejection code is shown.
What to do
Check the product in the shop using this code.

Product deleted in the shop: recreate or unlink it

Cause
The linked product no longer exists in the shop.
What to do
Recreate it in the shop with the same reference. If it should no longer be there, write to us.

Kit …: bill of materials cannot be published (reason)

Cause
The kit has no component, one of them is archived or inactive, or a component's quantity is entered in another unit than its base unit. The kit is not put on sale.
What to do
Fix the kit's bill of materials. The item clears at the next pass.

Variable product …: no live variation — not published

Cause
A product with variants is sold through its variants: without an active variant, it is not put on sale.
What to do
Create a variant, or reactivate one. The item clears at the next pass.

Variation …: not published (reason)

Cause
The variant cannot be published: its parent product cannot be found, is archived or not yet published in the shop, or its axes and values are invalid. The reason is shown in brackets.
What to do
Fix the stated cause, on the parent product or on the variant. The item clears at the next pass.

Product …: photo not pulled from the shop (reason)

Cause
A photo from the shop could not be copied onto the product. Possible reasons: image not found, unsupported format (JPEG, PNG, WebP and GIF are accepted), over 5 MB or unreadable, shop unreachable (retried on the next pass), unsafe image address (public HTTPS required), more than 20 photos (the following ones are not pulled).
What to do
Fix the photo in the shop, or remove it. The item disappears once everything is imported; the rest of the product is pulled anyway.

Stock

Fractional stock rounded down to the unit in the shop

Cause
The available stock has decimals; the shop only sells whole units.
What to do
Information only: the shop shows the lower unit.

Stock rejected by the shop (…)

Cause
WooCommerce rejected the quantity; its rejection code is shown.
What to do
Check the product page in the shop using this code.

Orders

Order …: unknown product (SKU …) — no order created

Cause
A line of the order carries a reference that does not exist in GSE-Web.
What to do
Create the product with the same reference, then “Retry”.

Order …: variation cannot be imported (SKU …, reason) — no order created

Cause
A line refers to a variation GSE-Web does not know, or to the product with variants itself, ordered without a variation.
What to do
Unknown variation: create the variant with the same reference as the variation, then “Retry”. Product ordered without a variation: handle the order manually.

Order …: no buyer e-mail

Cause
Without an e-mail, the buyer can be neither found nor created as a customer.
What to do
Add the billing e-mail to the order in the shop, then “Retry”.

Order …: the customer is archived in GSE-Web

Cause
The customer matching this buyer has been archived.
What to do
No outbound order is created. Handle this order manually.

Order …: currency … differs from …

Cause
The order is in a currency other than your organisation's.
What to do
Handle this order manually.

Order …: too old to be imported automatically (over … days)

Cause
During catch-up, the order exceeds the “Maximum age of a caught-up order”.
What to do
“Retry” imports it anyway.

Order … cancelled in the shop, but the outbound order is already being handled: for the team to decide

Cause
The outbound order is already being prepared: GSE-Web does not cancel it on its own.
What to do
Decide with the team. If the outbound order must be cancelled, release it, then “Retry”.

Order … changed in the shop after import: check the outbound order

Cause
The order changed in the shop after the outbound order was created; the change is not carried over.
What to do
Compare the order and the outbound order, and correct the outbound order if needed.

Order …: import failed (…)

Cause
The import failed; the reason is shown in brackets.
What to do
Fix the stated cause, then “Retry”.

Order …: kit … cannot be published (reason) — no order created

Cause
The order contains a kit whose bill of materials does not hold: no component, an archived or inactive component, or a unit other than the base unit. No order is created.
What to do
Fix the kit's bill of materials, then “Retry”.

Order …: the shop refused the status (code)

Cause
WooCommerce refused to set the order to “completed” or “cancelled”; its refusal code is shown.
What to do
Check the order in the shop using this code, and change its status manually if needed.

Order …: order cancelled, but the shop order is already closed

Cause
The order was cancelled in GSE-Web, but the shop had already set the order to “completed”: GSE-Web does not undo it.
What to do
Settle the situation with the customer (refund, return) directly in the shop.

Webhooks

Webhooks disabled by the shop: reactivated, orders caught up

Cause
WooCommerce disables a webhook after several failed deliveries, or a “GSE-Web” webhook was deleted in the shop.
What to do
Nothing to do: the webhook check, every 6 hours, re-arms them and catches up the orders.

Pause, resume and changes

The connector can be switched off and on again at any time. Three changes follow a rule, which the screen reminds you of and the server enforces.

“Pause”

Nothing is sent or imported any more, and nothing is lost. The stock shown in the shop stays as last sent.

“Resume”

The shop is checked again (version, key, currency, price mode), then catch-up starts: orders placed during the pause are imported if they are less than N days old (“Maximum age of a caught-up order”, 30 by default, from 1 to 90). Older ones become items to handle.

Changing the key or the price mode

On an active connection, the address, the key, the secret and “Published prices” are locked. Follow this order: “Pause”, change, “Save”, “Test the connection”, “Resume”.

Changing shop

“Disconnect” first: the former shop's webhooks are removed. Then enter the new shop.

Reconnecting the same shop

Products, orders and customers already linked are found again: no second outbound order is created for an order already imported.

Changing a product page setting

After changing “Published prices” or “Create and update product pages in the shop”, the next pass reads the whole catalogue again.

“Disconnect”

The webhooks are removed from the shop and the credentials erased. Nothing is deleted in the shop or in GSE-Web: outbound orders and customers already imported remain. If the shop does not answer, the screen asks you to delete the “GSE-Web” webhooks yourself in WooCommerce.

Module closed

If KLS-Concept closes the module for your organisation, everything stops without anything being deleted. When it reopens, the next pass catches up the orders and publishes the stock again.

Security and data

What the connector keeps, and how.

Encrypted credentials

The shop's key and secret are encrypted on the server (AES-256-GCM). They are never shown again, nor written to the logs.

Two-factor authentication

It is required to enter or replace a shop's credentials.

HTTPS only

The shop address must use HTTPS and be reachable on the Internet; a private network address is refused.

Signed webhooks

Each webhook received is signed by the shop, and its signature is checked before any processing. Its content is not kept.

Buyer data

The buyer's details are copied to their customer record and the delivery address to the outbound order. The link with the shop keeps only a fingerprint of their e-mail.

Nothing in the export

The encrypted credentials are not included in the organisation's portability export.

Troubleshooting

The message shown by the screen, its cause and what to do. The code in square brackets helps support find the case.

Stopped — check it

“Stopped by the server — check the key and test”

After five authentication refusals in a row, the server stops the connection rather than keep trying. Check the key in WooCommerce, enter a new one if needed, “Save”, “Test the connection”, then “Activate”.

Invalid shop address: an HTTPS address without credentials or parameters is expected

What to do
Enter the shop's full address, starting with https://, with nothing after the site name.
[WOOCOMMERCE_SHOP_URL_INVALID]

The shop address points to a private network: it must be reachable on the Internet

What to do
Use the shop's public address.
[WOOCOMMERCE_SHOP_URL_PRIVATE_HOST]

The shop rejects the API key: check the key, the secret and their permissions

What to do
Check the key and the secret in WooCommerce (Settings › Advanced › REST API), or create a new one.
[WOOCOMMERCE_SHOP_AUTH_FAILED]

The API key is read-only: create a read/write key in WooCommerce

What to do
Create a key with “Read/Write” permissions and enter it.
[WOOCOMMERCE_SHOP_READ_ONLY_KEY]

Unsupported WooCommerce version (…, … at least)

What to do
Update WooCommerce (7.0 at least), then test again.
[WOOCOMMERCE_SHOP_VERSION_UNSUPPORTED]

The shop currency (…) differs from the organisation's (…)

What to do
The connector only links a shop in your organisation's currency.
[WOOCOMMERCE_SHOP_CURRENCY_MISMATCH]

The shop publishes its prices excl. tax, but the connection is set to incl. tax (or the reverse)

What to do
In “Settings”, set “Published prices” to the shop's regime, which must match “Prices entered with tax”. Pause the connection first if it is active, save, then test.
[WOOCOMMERCE_SHOP_PRICE_MODE_MISMATCH]

The shop cannot be reached (…)

What to do
Check that the shop answers, then try again.
[WOOCOMMERCE_SHOP_UNREACHABLE]

The shop did not answer in time

What to do
Try again a little later.
[WOOCOMMERCE_SHOP_TIMEOUT]

The shop is limiting calls: try again later

What to do
Wait: the next pass resumes on its own.
[WOOCOMMERCE_SHOP_RATE_LIMITED]

Unreadable answer from the shop

What to do
Check that the address leads to the WooCommerce shop and that its REST API is enabled.
[WOOCOMMERCE_SHOP_RESPONSE_INVALID]

Pause the connection before changing the shop or the API key

What to do
“Pause”, change, “Save”, “Test the connection”, “Resume”.
[WOOCOMMERCE_CONNECTION_ACTIVE_CHANGE_REFUSED]

Disconnect the current shop first (its webhooks are still armed) before entering another one

What to do
“Disconnect”, then enter the new shop.
[WOOCOMMERCE_SHOP_CHANGE_REQUIRES_DISCONNECT]

The price mode (excl./incl. tax) changes on a paused connection: pause, save, test, then resume

What to do
Follow this order; the price mode is checked against the shop at the test and on resuming.
[WOOCOMMERCE_PRICE_MODE_CHANGE_REQUIRES_PAUSE]

The WooCommerce API key and secret are required together

What to do
Enter both, or leave both empty to keep the saved key.
[WOOCOMMERCE_CREDENTIALS_REQUIRED]

Turn on two-factor authentication on your account before entering a shop's credentials

What to do
Turn it on in “My information” (the screen offers “Open “My information””), then save again.
[WOOCOMMERCE_CONNECTION_TWO_FACTOR_REQUIRED]

A training warehouse cannot be linked to an online shop

What to do
Choose a real warehouse as “Published warehouse”.
[WOOCOMMERCE_WAREHOUSE_EXERCISE_REFUSED]

The stored credentials can no longer be read on this server: enter them again

What to do
Enter the key and the secret again, test, then activate.
[INTEGRATIONS_CREDENTIALS_UNREADABLE]

A sync is already running for this connection: try again in a moment

What to do
Wait for the current pass to finish.
[INTEGRATIONS_CONNECTION_BUSY]

Frequently asked questions

Are products with variants supported?

Yes. A product with variants is published as a variable product, and each of its variants as a variation, with its reference, price and stock. An order for a variation gives an order for the variant.

Can several shops or several warehouses be linked?

No. An organisation links one shop, and a shop is linked to a single warehouse, the “Published warehouse”.

Are deliveries reported back to the shop?

Yes, if “Report deliveries and cancellations to the shop” is ticked, which it is by default. A delivered order sets its shop order to “completed”; if it left in a shipment, the carrier and tracking number are added as a customer note. An order cancelled in GSE-Web cancels its shop order. GSE-Web never writes the lines of an order.

Are product images and descriptions exchanged?

They never leave GSE-Web: photos and description are managed in the shop. However, if you tick “Pull the description and photos from the shop”, they are copied into GSE-Web onto the linked products. The photos and description specific to each variant are not pulled.

Are the shop's categories and tax class pulled?

No. They remain managed in the shop, and GSE-Web does not pull them.

What happens if I pause or if the module is closed?

Nothing is sent or imported, and nothing is deleted. The stock in the shop stays as last sent. On resuming, orders placed in the meantime are caught up if they are less than 30 days old (adjustable from 1 to 90).

How long before an order appears in GSE-Web?

At once, by webhook. If a webhook is lost, the next pass, every 5 minutes, catches up the order.

Can the shop sell a product that is no longer in stock?

The risk is cut down to a few seconds, not removed. Stock goes to the shop a few seconds after each issue, receipt or reservation recorded in GSE-Web, and each shop order reserves its whole quantity at once. A shop sale at the very moment of an issue in the warehouse is still possible: it becomes an order whose shortfall shows as “Awaiting receipt”, or an item to handle.

Is a buyer already in my business partners recognised?

No. The connector creates one “Individual” customer per buyer and finds them again by e-mail on later orders, but it does not match them with a business partner already entered in GSE-Web.

Are orders placed before activation imported?

No. Only orders received after activation are imported.

How do I get the connector?

The “Integrations” and “WooCommerce” modules are enabled organisation by organisation by KLS-Concept. Write to us from the contact page.

Link your WooCommerce shop

Ask for the connector to be enabled for your organisation, or send us your questions about your case.