# Install on PrestaShop

> Upload the ShopAssist module ZIP, connect one shop, and provide stock per store through the location-stock hook or a feed.

Source: https://shopassist.coec.dk/docs/install/prestashop · Updated 2026-10-01

## Requirements [#requirements]

- PrestaShop 1.7.8: >=1.7.8.0 <1.8 (PHP 7.1-7.4)
- PrestaShop 8: >=8.0 <9 (PHP 7.2-8.1)
- PrestaShop 9: >=9.0 <10 (PHP 8.1-8.5)
- Latest plugin version: 1.0.0

* SSL enabled and **Enable SSL on all pages** switched on (`PS_SSL_ENABLED` and `PS_SSL_ENABLED_EVERYWHERE`).
* Friendly URLs recommended (the module warns when they are off).
* A back-office employee allowed to install modules.

## Install [#install]

Typical setup: About 10 minutes

**1. Download the module**

Download the module ZIP from your ShopAssist dashboard. The download is behind sign-in so its version matches your account.

**2. Upload and install it**

In the PrestaShop back office open **Modules → Module Manager → Upload a module**, choose the ZIP and install it. There is no Composer step.

**3. Connect your shop**

Open the module configuration and click **Connect**, or paste a pairing code from the dashboard. With multistore, select a single shop context first, never "All shops".

## Connect [#connect]

In the module configuration, click **Connect**. You are sent to `shopassist.coec.dk/connect/prestashop` to sign in, confirm the shop address and choose or create the store, and then back to your shop through a relay page on the storefront (the back office may run on another host). The module finishes the connection with a one-time code and a proof key.

You can also paste a pairing code from the dashboard (**Add store → PrestaShop → Generate pairing code**).

> **Multistore: connect one shop at a time:** Select a single shop in the shop context selector before connecting. The module refuses to connect in "All shops" or
> group context, because each PrestaShop shop is its own ShopAssist store.

## Verify [#verify]

* The module page shows "Connected" and the sync progress.
* The launcher appears on your storefront, but never on the order and order-confirmation pages or the maintenance page.

[Send a test message](/app/go/playground)

## Signed-in customers [#signed-in-customers]

Signed-in customers are recognised automatically through the module's identity front controller, using PrestaShop's static token. Orders are only shown for the connected shop, even when a shop group shares customers or orders. See [PrestaShop identity](/docs/orders-and-identity/prestashop).

## Stock per location [#location-stock]

PrestaShop stores (**Shop Parameters → Contact → Stores**) become ShopAssist locations with their addresses and opening hours. Stock per store needs one of two sources, because PrestaShop keeps one stock quantity per product:

**1. The `actionShopAssistLocationStock` hook.** A module that knows stock per store (for example your POS or warehouse integration) appends entries for each product combination:

```php
public function hookActionShopAssistLocationStock(array $params): void
{
    // $params: id_product, id_product_attribute, id_shop, and 'stock' (by reference)
    foreach ($this->stockPerStore((int) $params['id_product'], (int) $params['id_product_attribute']) as $idStore => $qty) {
        $params['stock'][] = [
            'location_id' => (int) $idStore,  // the id_store of an active store of this shop
            'quantity' => $qty,               // int, or null when unknown
            // optional: 'status' => 'in_stock'|'low_stock'|'out_of_stock'|'backorder'|'unknown',
            // optional: 'as_of' => gmdate('Y-m-d\TH:i:s\Z'),
        ];
    }
}
```

Entries whose `location_id` is not an active store of the connected shop are ignored. Register the hook in your module's `install()` with `$this->registerHook('actionShopAssistLocationStock')`.

**2. A location stock feed.** If your stock per store lives elsewhere, send it with the [Catalog Push API](/docs/install/generic/catalog-push-api) (`locations:batch` and `inventory:batch`) or a [local inventory feed](/docs/install/generic/product-feeds#local-inventory). Use your PrestaShop `id_store` values as `location_external_id` (`location_ref`), so the feed's locations match the stores the module already sent.

## Updating [#updating]

Upload the new ZIP in **Module Manager** (the module keeps its connection), or use the update notification in the back office. The dashboard tells you when the module is more than two minor versions behind.

## Uninstall and data removal [#uninstall]

* **Disable** pauses the store: the widget disappears and data is kept until you enable the module again.
* **Uninstall** disconnects every connected shop, removes the module's configuration and tables, and keeps Customer Service threads and order messages it created. ShopAssist deletes the store's data 30 days later unless you reconnect.

## Troubleshooting [#troubleshooting]

* [Maintenance mode](/docs/troubleshooting/connection-errors#maintenance_mode) blocks connecting; switch it off while you connect.
* Full-page cache modules or a CDN must not cache `module/shopassist/*` URLs ([`page_cache_bypass_needed`](/docs/troubleshooting/sync-issues#page_cache_bypass_needed)).
* [Order returns disabled](/docs/troubleshooting/sync-issues#order_returns_disabled)
* [The widget is not showing](/docs/troubleshooting/widget-not-showing)
