Чтобы получать данные о заказе, созданном в 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.

Порядок шагов при приеме данных с маркетплейса:

  1. получение номера нового заказа;
  2. подключение к marketplace.cs-cart.com;
  3. получение данных о заказе;
  4. приведение данных к нужному вам виду;
  5. размещение заказа на вашем ресурсе.

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, ожидает оплаты на стороне Маркетплейса).