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 (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.
  • When: 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 to the shop's orders.
  • 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.
  • “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.
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 — synced every 5 minutes”. Orders received before activation are not imported.

What is synchronised, and which side is authoritative

Each field has a single owner. GSE-Web never writes a shop order: no loop is possible.

📦 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
  • ✓Images
  • ✓Categories
  • ✓Tax class
  • ✓Orders

The rules

  • Simple products only. Products with variants and kits are not published.
  • 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 is read again at each pass and sent if it has changed.
  • One order = one confirmed outbound order from the published warehouse, stock reserved, delivery address copied. Never a partial order: if a line is a problem (unknown product, variation, 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.

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 — 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”

Starts a pass without waiting for the 5 minutes: product pages, stock and order catch-up. The message says whether the pass finished, whether it raised items to handle, or why it did not start.

The “Log”

Each pass is listed with its type and its result. Types: “Product pages”, “Stock”, “Order catch-up”, “Order received”, “Webhook check”, “Connection test”. Results: “Succeeded”, “Partial”, “Failed”, “Running”, “Interrupted”.

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.

Product pages

Product …: products with variants and kits are not published

Cause
Only simple products are published to the shop.
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, or is not a simple 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.

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 not supported (SKU …)

Cause
The order contains a product variation, which the connector does not handle yet.
What to do
Handle this 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”.

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's price setting (tax included: …) does not match the one chosen for the connection

What to do
Align “Published prices” with the shop's “Prices entered with tax” setting, save, 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?

Not yet. Only simple products are published. An order containing a variation is not imported: it appears in the items to handle.

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 shipments sent back to the shop?

No. GSE-Web never writes to the shop's orders. Sending shipments back is planned for a future version.

Are product images sent?

No. Images, like the description and the categories, remain managed in the shop.

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 stock is read again at each pass, every 5 minutes, and sent if it has changed. Between two passes, the shop shows the last stock sent: an issue recorded in GSE-Web during that short interval only shows there at the next pass.

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.

What about Shopify, Sage or Odoo?

They are listed on the “Integrations” page, as upcoming connectors. No date has been announced.

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.