Чтобы получать данные о заказе, созданном в CS-Cart Add-on Market, необходимо настроить Web hook под названием License number issued на странице Администрирование → Web hooks.
Введите в поле адрес URL. На него CS-Cart Add-on Market будет отправлять номера оплаченных заказов (order_id), в которых были выписаны лицензии. Данные отправляются в формате JSON и содержат только один параметр — номер заказа.
Далее, используя наш API, вы можете получить все необходимые детали заказа.
При обращении к API (метод GET к сущности /orders/:id) вы дополнительно получите данные external_id и license_number:
Значение характеристики External ID приходит в products[].extra[].external_id. Выписанный номер лицензии приходит в products[].extra[].license_number.
Как получить API ключ?
Для интеграции вам также понадобится API ключ. Чтобы его получить:
- Перейдите в меню Администраторы разработчика → Администраторы разработчика.
- На вкладке API-доступ выберите пользователя, которому вы хотите предоставить доступ.
- Нажмите Сгенерировать новый ключ API.
Порядок шагов при приеме данных с маркетплейса:
- получение номера нового заказа;
- подключение к marketplace.cs-cart.com;
- получение данных о заказе;
- приведение данных к нужному вам виду;
- размещение заказа на вашем ресурсе.
1. Получение номера нового заказа
$result = new OperationResult(); if (!empty($_REQUEST['order_id'])) { $result = fn_get_order_from_marketplace($_REQUEST['order_id']);} else { $result->addError('order', __('error_empty_order'));
} // Отображение нотификаций (ошибки/успешный импорт) $result->showNotifications(); // Логирование ошибокПример функции fn_get_order_from_marketplace, используемой выше:
function fn_get_order_from_marketplace(order_id) { try { $order = new Orders($params); $order_info = $order->getOrder("orders/{$order_id}"); $order_id = $order->placeOrder($order_info); if (!empty($order_id)) { $result->setMessages([ 'message' => __('order_has_been_imported', [ '[url]' => fn_url("orders.details&order_id=$order_id", AREA), '[order_id]' => $order_id ]) ]); $result->setSuccess(true); }} catch (Exception $e) { $result->setErrors(['error' => $e->getMessage()]); // Логирование ошибок } catch (\Throwable $e) { $result->setErrors(['error' => $e->getMessage()]); // Логирование ошибок} finally { return $result; } return $result;2. Подключение к marketplace.cs-cart.com
Подключение к Маркетплейсу происходит через класс Orders.
Описание класса Orders:
public function __construct($params) { if (empty($params['login'])) { throw new Exception(__('error_empty_login')); } if (empty($params['access_token'])) { throw new Exception(__('error_empty_access_token')); } $this->headers = [ 'Accept: application/json', 'Authorization: Basic ' . base64_encode($params['login'] . ':' . $params['access_token']) ]; }
Параметры класса:
new Orders($params);
$params — массив минимально необходимых данных для подключения:
$params['login'] и $params['access_token']
access_token — ключ доступа, берется из данных пользователя в панели управления вендора на marketplace.cs-cart.com
3. Получение данных о заказе: функция getOrder
function getOrder($url, $data) { if (empty($url)) { throw new Exception(__('error_empty_url')); } $order_data = Http::get( self::API_URL . $url, $data, [ 'headers' => $this->headers, 'connection_timeout' => self::DEFAULT_CONNECTION_TIMEOUT, ] ); $order_data = json_decode($order_data, true); if (Http::getError()) { throw new Exception(Http::getError()); } try { $order_data = $this->prepareOrderData($order_data); } catch (Exception $e) { throw new Exception($e->getMessage()); } return $order_data;}4. Приведение данных к нужному вам виду
prepareOrderData($data_from_getOrder)
Подготавливает данные перед импортом заказа, т.к. структура может отличаться от той, которая используется на marketplace.cs-cart.com.
5. Размещение заказа на вашем ресурсе
placeOrder(data_from_prepareOrderData)
Статусы заказов
Ниже приведены статусы заказов, которые используются на Маркетплейсе:
- P — Обработан;
- C — Выполнен;
- O — Открытый;
- F — Неудачный;
- D — Отклонен;
- B — Отложен;
- I — Аннулирован (рефанд / фрауд);
- A — На удержании;
- E — Возвращено (рефанд);
- H — External (при размещении заказа по API);
- J — Awaiting payment (при размещении заказа по API, ожидает оплаты на стороне Маркетплейса).