Загрузка(удаление) индивидуальных кодов компании

1. Общие сведения

Данная часть API предназначена для загрузки(удаления) в базу РАЭК индивидуальных кодов (артикулов и складских статусов) компаний-участников РАЭК.

Взаимодействие происходит по протоколу HTTPS. Форматы выдачи ответа API — JSON.

2. Авторизация  

Авторизация запроса происходит по API-KEY, который должен быть указан в HEADER каждого запроса.

Коды состояния ответа сервера

200 - OK.

400 - Bad Request.

401 - You must be authorized to view this page.

403 - Forbidden

404 - The requested URL was not found.

500 - The server encountered an error processing your request.

501 - The requested method is not implemented.

505 - HTTP Version Not Supported

3. Использование

Все вызовы методов API — это POST HTTPS-запросы:

  • к URL https://catalog.raec.su/api/companycodes/add для загрузки информации
  • к URL https://catalog.raec.su/api/companycodes/delete для удаления информации

В запросе должны быть отправлены два параметра companyId и xml

 

 

ПараметрОписаниеВозможные значения
companyIdID компании-участника РАЭКДанные по компании можно узнать, используя метод company
xmlXML файл с данными по артикулам, складским статусам и ссылками на сайт участникаОписание структуры файла см. здесь.

Серые товары

В случае если при загрузки индивидуальных кодов товар не удалось идентифицировать, информация заносится в таблицу Серых товаров. Соответственно при удалении индивидуальных кодов для неидентифицированных товаров запись из таблицы Серых товаров удаляется.

4. Ответ сервера

В случае успешной загрузки файла (200 код)

JSON

{"report":["ok","Product not found. Save as grey product.","Article and status is not set"],"offers":3,"success":2,"errors":1,"time":"00:00:01"}}

report - отчет по каждой позиции из файла. "ok" - индивидуальные коды успешно добавлены/обновлены. В противном случае текст ошибки или строка "error". Ключ массива соответствует позиции товара, начиная с 0.

offers - количество найденных позиций в файле.

success - количество успешно обработанных позиций из файла.

errors - количество не обработанных позиций из-за возникшей ошибки.

time - время, затраченное сервером на обработку в формате HH:mm:ss.


В случае проблем на этапе авторизации и получения файла

JSON

{"description":"Parameter \"companyId\" is empty","code":400,"title":"Bad Request","message":"Bad Request"}

Или другие ошибки с кодом 400 или 500.

5. Режим тестирования 

Для для использования режима тестирования нужно в хедере запроса передать параметр DEBUG: 1
---------------------------------------------
$httpHeader = ['API-KEY: ' . $this->apiKey];
$httpHeader[] = 'DEBUG: 1';
---------------------------------------------

При таком режиме изменение данных в БД не произойдет. Будет сделана валидация параметров запроса. Если валидация не проходит то вернется ошибка, в противном случае всегда 200 код и подробные данные по результатм импорта с подробным отчетом по каждой позиции.

6. Примеры кода на PHP

<?php
/**
* Образец клиента для тестирования API
*/
 
class RestClient
{
    // Сертификат пока не используется
    //const CAINFO = 'path_to/catalog.raec.su.crt';
     
    /**
     * Код состояния ответа сервера
     * @var int
     */
    protected $_httpCode;
 
    /**
     * 32-значный ключ пользователя API
     * @var string
     */
    protected $apiKey;
 
    /**
     * Базовый URL API сервера
     * @var string
     */
    protected $urlBase;
 
    /**
     * Режим отладки
     * @var bool
     */
    public $debug = true;
 
    /**
     * @param string $urlBase
     * @param string $apiKey
     */
    public function __construct($urlBase, $apiKey)
    {
        $this->urlBase = $urlBase;
        $this->apiKey = $apiKey;
    }
 
    /**
     * @param string $url
     * @param array $params
     * @return string|bool
     */
    public function post($url, $params = [])
    {
        return $this->httpRequest($url, $params, 'POST');
    }
 
    public function getHttpCode()
    {
        return $this->_httpCode;
    }
 
    /**
     * @param string $url
     * @param array $postfields
     * @param string $method
     * @return mixed
     */
    public function httpRequest($url, $postfields = [], $method = "POST")
    {
 
        foreach ($postfields as $key => $value) {
            if (is_null($value)) {
                unset($postfields[$key]);
            }
        }
 
        $url = $this->urlBase . $url;
 
        $ci = curl_init();
 
        /* Curl settings */
        curl_setopt($ci, CURLOPT_HEADER, false);
        curl_setopt($ci, CURLOPT_RETURNTRANSFER, true);
 
        $httpHeader = ['API-KEY: ' . $this->apiKey];
        if ($this->debug) {
            $httpHeader[] = 'DEBUG: 1';
        }

        switch ($method) {
            case 'POST':
                curl_setopt($ci, CURLOPT_POST, true);
                if (!empty($postfields)) {
                    curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
                }
                curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, false);
                // VERIFYHOST временно не используется
                //curl_setopt($ci, CURLOPT_SSL_VERIFYHOST, 2);
                //curl_setopt($ci, CURLOPT_CAINFO, self::CAINFO);
 
                break;
        }
        curl_setopt($ci, CURLOPT_URL, $url);
 
        curl_setopt($ci, CURLOPT_HTTPHEADER, $httpHeader);
 
        $response = curl_exec($ci);
 
        $this->_httpCode = curl_getinfo($ci, CURLINFO_HTTP_CODE);
        curl_close($ci);
 
        return $response;
    }
}
 
/*
* Пример использования клиента 
*/
$client = new RestClient('https://catalog.raec.su/api/', 'f85aa1473448577845a7094d4ab5bc22'); // используйте ваш ключ
 
$filePath = '/path/company_products.xml';
$cfile = curl_file_create($filePath, 'text/xml', 'company_products.xml');
$post = ['xml' => $cfile, 'companyId' => 4];

$response = $client->post('companycodes/add', $post);