Инструкция использования библиотек сервиса AvtoTO

Редакция 10.01.2022

За изменениями в документации Вы можете следить в Telegram, вступив в группу @avtoto_API

Порядок подключения сервиса для оптовых клиентов:

Если Вы арендуете или купили готовый интернет-магазин, обратитесь к продавцу с просьбой подключить поставщика AvtoTO, у большинства разработчиков наш сервис уже реализован. Если Вы самостоятельно разрабатывали интернет-магазин, необходимо ознакомить с данной инструкцией своих программистов.

После технической реализации, необходимо:

  1. Заключите договор-поставки. Для этого обратитесь в клиентский отдел любым удобным способом. Дальнейшие действия возможны только после подписания договора.
  2. Активируйте сервис и добавьте IP адрес своего сайта на странице общая информация во вкладке "настройка веб-сервиса".
  3. Выполните настройки на своём сайте: введите логин / пароль (как при авторизации на сайте) и номер клиента (номер указан в разделе общая информация).

Порядок подключения сервиса для разработчиков ПО:

Если Вы представитель компании разработчика интернет-магазинов запчастей или решений на базе 1С, и весь трафик клиентов будет передаваться через Ваши сервера, необходимо прислать список IP адресов и информацию о компании (сайт, контактную информацию технических специалистов) на почту x@avtoto.su

Последние версии библиотек и примеров использования Вы можете скачать здесь: ссылка для скачивания.

Ниже представлено описание работы с библиотекой сервиса AvtoTO avtoto_parts.class.php, которая в своей основе использует методы, описанные в технической документации к сервису. Чтобы просмотреть подробную техническую документацию по работе SOAP-методов, перейдите по ссылке.

В большинстве случаев для организации взаимодействия с сервисом AvtoTO вам будет достаточно скачать библиотеку avtoto_parts.class.php, подключить ее к Вашей системе и воспользоваться готовыми методами.

Пример использования библиотеки Вы можете посмотреть в файле sample.php

Для клиентов, которым по каким-то причинам не подходит реализация взаимодействия через SOAP, мы реализовали API, который работает по HTTP протоколу с синтаксисом URL. В тестовом примере взаимодействие реализовано через библиотеку cURL (формат данных JSON). С описанием синтаксиса URL запросов и примерами использования библиотеки Вы можете ознакомиться в технической документации (HTTP)

Последние версии библиотек и примеров (cURL + JSON) использования Вы можете скачать здесь: ссылка для скачивания.

Файлы:

  1. Библиотека: avtoto_parts.curl.json.class.php
  2. Пример использования: sample_curl_json.php

Порядок взаимодействия:

Инициализация


//Загружаем библиотеку
//Заменить /path/to/library/ на реальный путь
include('/path/to/library/avtoto_parts.class.php');

$login_params = array( //Данные аккаунта на сайте www.avtoto.ru
    'user_id' =>  '1234567',
    'user_login' => 'my_login',
    'user_password' => 'my_password'
);

//Создание экземпляра класса avtoto_parts
$avtoto = new avtoto_parts($login_params);

//Элементы для удаления из корзины
$elements_for_delete_from_basket = array();
//Элементы для оформления заказа
$elements_for_add_to_orders = array();
//Элементы для проверки статуса
$elements_for_get_status = array();
                                

Поиск предложений по артикулу запчасти

Метод avtoto_parts :: get_parts

Раскрыть описание

$search_analogs = 'on'; //Искать ('on') или нет ('off') аналоги артикула
$artilce = 'PF3043'; //Артикул искомых деталей
$limit = 2000; //Ограничение на выдачу

//Максимальное время выполнения 5 сек
$avtoto->set_search_extension_time_limit(5);

$data = $avtoto->get_parts($artilce, $search_analogs, $limit);
$errors = $avtoto->get_errors();

$search_id = 0;

if(!$errors && $data) {
    //Обрабатываем данные
    if(isset($data['Parts']) && $data['Parts']) {
        //Обрабатываем список предложений
    }

    if(isset($data['Info']['SearchId'])) {
        //ID поиска на сервере AvtoTO
        $search_id = $data['Info']['SearchId'];
    }

    if(isset($data['Info']['Errors']) && $data['Info']['Errors']) {
        //В процессе выполнения запроса на сервере AvtoTO возникли ошибки
    }

} else {
    if($errors) {
        //Ошибка на нашей стороне
    } else {
        //Ответ не получен
    }
}
                                

Поиск предложений по артикулу запчасти или по артикулу и бренду

Метод avtoto_parts :: get_parts_brand

Раскрыть описание

$artilce = 'PF3043'; //Артикул искомых деталей
$brand = 'FILTRON'; //Бренд искомых деталей
$limit = 2000; //Ограничение на выдачу
$analogs = 'on';

//Максимальное время выполнения 5 сек
$avtoto->set_search_extension_time_limit(5);

$data = $avtoto->get_parts_brand($artilce, $brand, $limit, $analogs);
$errors = $avtoto->get_errors();

$search_id = 0;

if(!$errors && $data) {
    //Обрабатываем данные
    if(isset($data['Parts']) && $data['Parts']) {
        //Обрабатываем список предложений
    }

    if(isset($data['Info']['SearchId'])) {
        //ID поиска на сервере AvtoTO
        $search_id = $data['Info']['SearchId'];
    }

    if(isset($data['Info']['Errors']) && $data['Info']['Errors']) {
        //В процессе выполнения запроса на сервере AvtoTO возникли ошибки
    }

} else {
    if($errors) {
        //Ошибка на нашей стороне
    } else {
        //Ответ не получен
    }
}
                                

Поиск брендов по артикулу запчасти

Метод avtoto_parts :: get_brands_by_code

Раскрыть описание

$artilce = 'PF3043'; //Артикул искомых деталей

//Максимальное время выполнения 5 сек
$avtoto->set_search_extension_time_limit(5);

$data = $avtoto->get_brands_by_code($artilce);

$errors = $avtoto->get_errors();

if(!$errors && $data) {
    //Обрабатываем данные
    if(isset($data['Brands']) && $data['Brands']) {
        //Обрабатываем список предложений
    }

    if(isset($data['Info']['Errors']) && $data['Info']['Errors']) {
        //В процессе выполнения запроса на сервере AvtoTO возникли ошибки
    }

} else {
    if($errors) {
        //Ошибка на нашей стороне
    } else {
        //Ответ не получен
    }
}

                                

Работа с корзиной: добавление, изменение кол-ва и удаление

Метод avtoto_parts :: add_to_basket

Раскрыть описание

Метод avtoto_parts :: update_count_in_basket

Раскрыть описание

Метод avtoto_parts :: delete_from_basket

Раскрыть описание

if($search_id && isset($data['Parts'])) {

    //Подготавливаем данные для добавления

    //Для примера берем первые два результата поиска из примера выше
    $work_part1 = $data['Parts'][0];
    $work_part2 = $data['Parts'][1];

    //Им необходимо присвоить уникальный ID в Вашей системе,
    //чтобы потом можно было получить по нему отчет.

    $work_part1['RemoteID'] = 345345;
    $work_part2['RemoteID'] = 345346;

    //Чтобы мы могли сопоставить запрос на добавление с данными в кэше поиска,
    //необходимо присвоить ID поиска каждой детале.

    $work_part1['SearchID'] = $search_id;
    $work_part2['SearchID'] = $search_id;

    //Присваиваем номер детали из множества данного поиска

    $work_part1['PartId'] = $work_part1['AvtotoData']['PartId'];
    $work_part2['PartId'] = $work_part2['AvtotoData']['PartId'];

    //Указываем количество для добавления в корзину
    $work_part1['Count'] = 1;
    $work_part2['Count'] = 3;

    //Объединяем запчасти в один массив
    $parts = array ( $work_part1, $work_part2 );

    //Добавление в корзину
    $data = $avtoto->add_to_basket($parts);

    if(!$errors && $data) {
        //Обрабатываем данные
        if(isset($data['DoneInnerId']) && $data['DoneInnerId']) {

            //Обрабатываем список предложений

            foreach($data['DoneInnerId'] as $added_part) {

                //Сохраняем ID в корзине на сервере AvtoTO в своей системе
                $our_id = $added_part['RemoteID'];
                $avtoto_id = $added_part['InnerID'];

                //Сохраняем, чтобы в дальнейшем могли удалить
                //из корзины или оформить заказ
                //....


            }

            //Для удаления из корзины
            //(для примера берем первый элемент)
            $elements_for_delete_from_basket[] = $data['DoneInnerId'][0];


            //Для изменения кол-ва в корзине и оформления заказа
            //(для примера берем второй элемент)
            if(isset($data['DoneInnerId'][1])) {
                $elem = $data['DoneInnerId'][1];

                //Оформление заказа
                //Необходимо указать кол-во
                $elem['Count'] = 1;
                $elements_for_add_to_orders[] = $elem;

                //Изменение кол-ва
                //Новое кол-во
                $elem['NewCount'] = 6;
                $elements_for_update_count_in_basket[] = $elem;

            }
        }


        if(isset($data['Errors']) && $data['Errors']) {
            //В процессе выполнения запроса на сервере AvtoTO возникли ошибки
        }

    } else {
        if($errors) {
            //Ошибка на нашей стороне
        } else {
            //Ответ не получен
        }
    }

}


//Изменение кол-ва в корзины
if( $elements_for_update_count_in_basket ) {
    $data = $avtoto->update_count_in_basket($elements_for_update_count_in_basket);

    $errors = $avtoto->get_errors();
    if(!$errors && $data) {
        //Обрабатываем данные
        if ( isset($data['Done']) && count($data['Done']) > 0) {
            foreach($data['Done'] as $element) {
                //...
            }
        }
    } else {
        if($errors) {
            //Ошибка на нашей стороне
        } else {
            //Ответ не получен
        }
    }
}


//Удаление из корзины
if( $elements_for_delete_from_basket ) {
    $data = $avtoto->delete_from_basket($elements_for_delete_from_basket);

    $errors = $avtoto->get_errors();

    if(!$errors && $data) {

        //Обрабатываем данные
        if ( isset($data['Done']) && count($data['Done']) > 0) {
            foreach($data['Done'] as $element) {
                //...
            }
        }

    } else {
        if($errors) {
            //Ошибка на нашей стороне
        } else {
            //Ответ не получен
        }

    }

}
                                

Оформление заказа и проверка его статуса

Метод avtoto_parts :: check_availability_in_basket

Раскрыть описание

Метод avtoto_parts :: add_to_orders_from_basket

Раскрыть описание

Метод avtoto_parts :: get_orders_status

Раскрыть описание

//Оформление заказа
if( $elements_for_add_to_orders ) {

    $data = $avtoto->check_availability_in_basket($elements_for_add_to_orders);
    $availability_orders_ids = array();

    if($data) {
        $availability_orders_ids = array();
        foreach($data['PartsInfo'] as $row) {
            if(isset($row['Availability']) && (bool)$row['Availability'] && isset($row['InnerID'])) {
                $availability_orders_ids[] = $row['InnerID'];
            }
        }
    }

    //Формируем список доступных для заказа позиций
    $elements_for_add_to_orders_avail = array();
    foreach($elements_for_add_to_orders as $element) {
        if(in_array($element['InnerID'],$availability_orders_ids)) {
            $elements_for_add_to_orders_avail[] = $element;
        }
    }
    //Очищаем начальный список
    unset($elements_for_add_to_orders);

    //В этом месте может быть оплата заказа на Вашем сайте

    $data = $avtoto->add_to_orders_from_basket($elements_for_add_to_orders_avail);
    $errors = $avtoto->get_errors();

    if(!$errors && $data) {
        //Обрабатываем данные

        if(isset($data['DoneInnerId']) && $data['DoneInnerId']) {

            foreach($data['DoneInnerId'] as $part) {
                //Сохраняем новый ID заказа в оформленных заказов
                $order['InnerID'] = $part['InnerID'];
                $order['RemoteID'] = $part['RemoteID'];

                //Для проверки статуса
                $elements_for_get_status[] = $order;
            }

        }


    } else {
        if($errors) {
            //Ошибка на нашей стороне
        } else {
            //Ответ не получен
        }

    }

}

//Проверка статуса
if( $elements_for_get_status ) {
    $data = $avtoto->get_orders_status($elements_for_get_status);
    $errors = $avtoto->get_errors();

    if(!$errors && $data) {
        //Обрабатываем данные

        foreach($data['OrdersInfo'] as $order) {


            //Заказ в системе AvtoTO
            $order['InnerID'];

            //Общий статус
            $order['Info']['progress'];

            //Частичные статусы
            if($order['Info']['sub_progress']) {

                foreach($order['Info']['sub_progress'] as $sub_progress_int => $count) {

                    //Количество товара
                    $count;

                    //В статусе
                    $avtoto->get_progress_text($sub_progress_int);
                }

            }
        }

    } else {
        if($errors) {
            //Ошибка на нашей стороне
        } else {
            //Ответ не получен
        }

    }
}
                                

Получение статистики по проценкам

Метод avtoto_parts :: get_stat_search

Раскрыть описание

$data = $avtoto->get_stat_search();
$errors = $avtoto->get_errors();

if (!$errors && $data) {

    //обрабатываем информацию о проценках

    if (isset($data['StatInfo']['SearchHistory']) &&
        is_array($data['StatInfo']['SearchHistory']) &&
        count($data['StatInfo']['SearchHistory'])!=0) {
        //обрабатываем информацию о количестве проценок по дням
    }

    if (isset($data['BrandsStatInfo']['SearchHistory']) &&
        is_array($data['BrandsStatInfo']['SearchHistory']) &&
        count($data['BrandsStatInfo']['SearchHistory'])!=0) {
        //обрабатываем информацию о количестве запросов по дням
    }
} else {
    if ($errors) {
        //Ошибка на нашей стороне
    } else {
        //Ответ не получен
    }
}

                                

Получение списка отгрузок

Метод avtoto_parts :: get_shipping_list

Раскрыть описание

$date_from = date('d.m.Y', time() - (3600*24*14));
$date_to = date('d.m.Y');
$page_num = 1;
$data = $avtoto->get_shipping_list($date_from, $date_to, $page_num);
$errors = $avtoto->get_errors();

if (!$errors && $data) {
    //обрабатываем информацию об отгрузках

    if (isset($data['Shippings']) &&
        is_array($data['Shippings']) &&
        count($data['Shippings'])!=0) {
        //обрабатываем информацию об отгрузках
    }
} else {
    if ($errors) {
        //Ошибка на нашей стороне
    } else {
        //Ответ не получен
    }
}

                                
В начало