# OpenCart

## Что это

**OpenCart** — бесплатная платформа интернет-магазина (на ней же построен ocStore). Интеграция работает через **встроенный API OpenCart** версий 3.x и 4.x — ничего дополнительно ставить в магазин не нужно. Бот проверяет наличие и стоимость товаров, оформляет заказ с доставкой и оплатой и меняет статус заказа. В OpenCart 3.x бот также получает информацию о заказе. Заказ из бота появляется в админке OpenCart как обычный.

Встроенный API OpenCart создан для оформления заказов из админки, поэтому в нём **нет выгрузки каталога, поиска товаров и истории заказов клиента**. Чтобы бот показывал товары, подключите каталог магазина в разделе **Товары → Синхронизация** через YML- или CSV-фид. ID товаров из каталога OpenCart подходят для заказа.

## Требования

- Магазин на OpenCart 3.x (включая ocStore 3) или 4.x, доступный из интернета по **HTTPS**.
- Доступ администратора к админке OpenCart.
- API-пользователь OpenCart, в белый список IP которого добавлен **IP сервера Botconsole**.

## Как подключить

1. В админке OpenCart откройте **Система → Пользователи → API** и нажмите **Добавить**.
2. Задайте **имя API-пользователя**, нажмите **Сгенерировать** и скопируйте ключ — позже его не посмотреть. Включите **статус**.
3. На вкладке **IP-адреса** добавьте IP сервера Botconsole и сохраните. Этот IP показан в инструкции в форме подключения OpenCart в конструкторе.
4. В конструкторе откройте **Интеграции** → найдите карточку **OpenCart** → **Подключить**.
5. Укажите **адрес магазина** с `https://`, **имя API-пользователя** (в точности как в OpenCart) и **API-ключ**.
6. Нажмите **Проверить соединение**. Botconsole сам определит версию OpenCart. Если магазин отклонит запрос, в тексте ошибки будет IP, который нужно внести в список.

## Доступные операции

| Операция | Что делает |
|---|---|
| Проверить наличие и стоимость | Кладёт товары во временную корзину и возвращает `available` = 1/0, цены, итог и текст ошибки магазина: нет на складе, не выбрана обязательная опция, меньше минимального количества |
| Создать заказ | Клиент, позиции, адрес, способы доставки и оплаты, комментарий, статус. Возвращает номер заказа и выбранные способы |
| Информация о заказе | Статус, сумма, валюта, дата, контакты и способы доставки/оплаты. **Только OpenCart 3.x** |
| Изменить статус заказа | Добавляет запись в историю заказа с новым статусом и комментарием, может уведомить клиента письмом |

Позиции задаются строками `ID_товара:количество`. Для товаров с обязательными опциями (размер, цвет) используйте JSON: `[{"product_id": 42, "quantity": 1, "option": {"225": "17"}}]`. Здесь `225` — ID опции товара, `17` — ID значения; их видно в карточке товара в админке.

## Настройка блока «Создать заказ»

- **ID страны** и **ID региона** — из **Система → Локализация → Страны / Регионы**, число в адресе страницы редактирования. В стандартной установке США — `223`, Россия — `176`. Регион обязателен, если у страны есть регионы.
- **Код способа доставки** — например `flat.flat`, `free.free`, `pickup.pickup`. Пусто — первый способ, который магазин предложит для адреса.
- **Код способа оплаты** — например `cod`, `bank_transfer`. Пусто — первый доступный.
- **ID статуса заказа** — из **Система → Локализация → Статусы заказов**. По умолчанию `1` («Ожидание»).

## Ограничения

- Только **HTTPS**: ключ API передаётся магазину, по HTTP он ушёл бы открытым текстом. Адрес должен быть публичным сайтом. Botconsole не следует за редиректами, поэтому указывайте итоговый адрес магазина.
- Без IP сервера Botconsole в белом списке API-пользователя магазин отклоняет все запросы. При смене серверов Botconsole список нужно обновить.
- В OpenCart 4.x запросы подписываются ключом, и в подпись входят домен и путь магазина. Если магазин стоит за прокси, который меняет заголовок `Host`, подпись не сойдётся и магазин ответит «доступ запрещён».
- Имя API-пользователя вводите в точности как в OpenCart, с учётом регистра.
- Каталога, поиска товаров и заказов клиента во встроенном API нет. Информации о заказе нет в OpenCart 4.x.
- Модули, меняющие стандартное оформление заказа (например, быстрый или упрощённый заказ), могут менять поведение API.

## Особенности и примечания

> Типичный сценарий: каталог из синхронизации Botconsole → «Проверить наличие и стоимость» → «Создать заказ» → бот отправляет клиенту номер заказа.

> OpenCart требует email, имя, фамилию и адрес. Если клиент не назвал фамилию, бот подставит имя.

> Стоимость доставки всегда берётся из расчёта самого магазина для адреса клиента, а не из параметров бота.
