Инструкция использования библиотек сервиса 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 {
        //Ответ не получен
    }
}

                                
В начало ↑