Инструкция использования
SOAP-сервиса AvtoTO для технических специалистов (расширенная)
Редакция 18.09.2023
Порядок подключения сервиса для оптовых клиентов:
Если Вы арендуете или купили готовый интернет-магазин, обратитесь к продавцу с просьбой подключить поставщика AvtoTO, у большинства разработчиков наш сервис уже реализован. Если Вы самостоятельно разрабатывали интернет-магазин, необходимо ознакомить с данной инструкцией своих программистов.
После технической реализации, необходимо:
- Заключите договор-поставки. Для этого обратитесь в клиентский отдел любым удобным способом. Дальнейшие действия возможны только после подписания договора.
- Активируйте сервис и добавьте IP адрес своего сайта на странице настройка веб-сервиса.
- Выполните настройки на своём сайте: введите логин / пароль (как при авторизации на сайте) и номер (id) клиента (номер указан в разделе общая информация).
Порядок подключения сервиса для разработчиков ПО:
Если Вы представитель компании разработчика интернет-магазинов запчастей или решений на базе 1С, и весь трафик клиентов будет передаваться через Ваши сервера, необходимо прислать список IP адресов и информацию о компании (сайт, контактную информацию технических специалистов) на почту x@avtoto.su
Адреса WSDL-документов:
- Версия SOAP 1.0: https://www.avtoto.ru/services/search/soap.wsdl (основной)
- Версия SOAP 1.2: https://www.avtoto.ru/services/search/soap2.wsdl
- Версия SOAP для .NET клиентов: https://www.avtoto.ru/services/search/soap_dotnet.wsdl
см. так же Дополнение для .NET разработчиков
Адрес точки API для URL запросов в формате JSON:
- https://www.avtoto.ru/?soap_server=json_mode
- cм. так же Дополнение для версии на cURL
Асинхронные вызовы:
- SearchStart - запуск поиска предложений
- SearchGetParts - получение результатов
- SearchGetParts2 - получение результатов (расширенная версия)
Список методов:
- GetBrandsByCode - поиск брендов по артикулу
- AddToBasket - добавление в корзину AvtoTO
- UpdateCountInBasket - изменение количества запчастей в корзине AvtoTO
- DeleteFromBasket - удаление из корзины AvtoTO
- CheckAvailabilityInBasket - проверка наличия в прайсах товара в корзине AvtoTO
- AddToOrdersFromBasket - добавление в заказы из корзины AvtoTO
- GetOrdersStatus - получение статусов заказов в системе AvtoTO
- GetStatSearch - получение статистики по проценкам и запросам брендов
- GetShippingList - получение списка отгрузок
Метод: SearchStart
Описание: Предназначен для запуска поиска запчастей по коду на сервере Avtoto.
Параметры запроса: В качестве входного параметра используется ассоциативный массив, со следующими элементами:
- user_id* - Уникальный идентификатор пользователя (номер клиента) (тип: целое)
- user_login* - Логин пользователя (тип: строка)
- user_password - Пароль пользователя (тип: строка)
- search_code - Поисковый запрос, минимум 3 символа (тип: строка)
- search_cross - Искать в аналогах или нет (тип: строка, 'on' или 'off')
- brand** - Искать код с учетом бренда, минимум 2 символа (опционально)(тип: строка)
[**] Список брендов можно получить с помощью метода GetBrandsByCode
Примечание: если бренд не указан, будет автоматически выбран самый популярный и произведен поиск с учетом этого бренда.
Параметры ответа: Сервис возвращает ассоциативный массив, с элементами:
- ProcessSearchId - идентификатор процесса поиска (тип: строка). Необходим для отслеживания результатов процесса поиска.
Метод: SearchGetParts
Описание: Предназначен для получения результатов поиска запчастей по коду на сервере Avtoto.
Параметры запроса: В качестве входного параметра используется ассоциативный массив, со следующими элементами:
- ProcessSearchId - Уникальный идентификатор процесса поиска (тип: строка).
Параметры ответа: Сервис возвращает многомерный массив, с элементами:
- Parts - Список запчастей, найденных по запросу - индексированный массив с упорядоченными целочисленными ключами, начиная с 0. Каждый элемент этого массива содержит информацию о конкретной детали и представляет из себя ассоциативный массив. Свойства детали:
- Code* - Код детали
- Manuf* - Производитель
- Name* - Название
- Price - Цена
- Storage* - Склад
- Delivery* - Срок доставки
- MaxCount - Максимальное количество для заказа, остаток по складу. Значение "-1" - означает "много" или "неизвестно".
- BaseCount* - Кратность заказа
- BeingUsed - Значение 1 - означает что предложение Б/У
- Availability - Значение 1 - означает что предложение со склада наличия
- StorageDate - Дата обновления склада
- DeliveryPercent - Процент успешных закупок из общего числа заказов
- BackPercent - Процент удержания при возврате товара (при отсутствии возврата поставщику возвращается значение "-1")
- AvtotoData - Массив со след. элементами:
- PartId* - Номер запчасти в списке результата поиска
- Info - Общая информация по запросу. Массив, содержащий 2 элемента:
- Errors - Массив ошибок, возникший в процессе поиска
- SearchID* - Уникальный идентификатор запроса поиска, возвращается в случае удачного поиска
Метод: SearchGetParts2
Описание: Предназначен для получения результатов поиска запчастей по коду на сервере AvtoTO. Расширенная версия, выдает статус ответа.
Параметры запроса: В качестве входного параметра используется ассоциативный массив, со следующими элементами:
- ProcessSearchId - Уникальный идентификатор процесса поиска (тип: строка).
- Limit - необязательный параметр, орграничение на количество строк в выдаче (тип: целое).
Параметры ответа: Сервис возвращает многомерный массив, с элементами:
- Parts - Список запчастей, найденных по запросу - индексированный массив с упорядоченными целочисленными ключами, начиная с 0. Каждый элемент этого массива содержит информацию о конкретной детали и представляет из себя ассоциативный массив. Свойства детали:
- Code* - Код детали
- Manuf* - Производитель
- Name* - Название
- Price - Цена
- Storage* - Склад
- Delivery* - Срок доставки
- MaxCount - Максимальное количество для заказа, остаток по складу. Значение "-1" - означает "много" или "неизвестно".
- BaseCount* - Кратность заказа
- BeingUsed - Значение 1 - означает что предложение Б/У
- Availability - Значение 1 - означает что предложение со склада наличия
- StorageDate - Дата обновления склада
- DeliveryPercent - Процент успешных закупок из общего числа заказов
- BackPercent - Процент удержания при возврате товара (при отсутствии возврата поставщику возвращается значение "-1")
- AvtotoData - Массив со след. элементами:
- PartId* - Номер запчасти в списке результата поиска
- Info - Общая информация по запросу. Массив, содержащий 2 элемента:
- Errors - Массив ошибок, возникший в процессе поиска
- SearchStatus - информация о статусе процесса на сервере AvtoTO. Возможные варианты значений:
- 0 - Неверно указан ID процесса ProcessSearchId
- 1 - Запрос не найден
- 2 - Запрос в обработке
- 3 - Ошибка данных
- 4 - Результат получен
- SearchID* - Уникальный идентификатор запроса поиска, возвращается в случае удачного поиска
Методы SearchStart и SearchGetParts позволяют организовать асинхронную передачу данных, помогая снизить нагрузку на Ваш и на наш сервер.
Метод SearchStart выдает идентификатор процесса поиска на сервере AvtoTO. Потом нужно отслеживать, не появился ли ответ с помощью метода SearchGetParts. Эта схема работы реализуется на Ajax: первый запрос запускает метод SearchStart, по его окончанию вызывается функция, которая с небольшим периодом (0.3 - 0.5 сек) проверяет наличие ответа. Когда ответ появился, она его выдает.
Если у Вас нет возможности использовать Ajax, то воспользуйтесь решением на PHP, которое описывается в инструкции к библиотеке сервиса AvtoTO.
Для того чтобы в результатах поиска были Б/У предложения, необходимо авторизоваться пользователем, от которого осуществляется запрос, на сайте.
Далее запустить поиск по любому коду, и на странице результата открыть окно "Настройки поиска".
Установить галочки "Показывать предложения по б/у запчастям" и "Транслировать б/у предложения в api сервис" в положение "вкл".
Нажать кнопку "Сохранить"
Метод: GetBrandsByCode
Описание: Предназначен для поиска списка брендов по артикулу запчасти
Параметры запроса: В качестве входного параметра используется ассоциативный массив со следующими элементами:
- user_id* - Уникальный идентификатор пользователя (номер клиента) (тип: целое)
- user_login* - Логин пользователя (тип: строка)
- user_password - Пароль пользователя (тип: строка)
- search_code - Поисковый запрос, минимум 3 символа (тип: строка)
Параметры ответа: Сервис возвращает многомерный массив с элементами:
- Brands - Список брендов, найденных по запросу - индексированный массив с упорядоченными целочисленными ключами, начиная с 0. Каждый элемент этого массива содержит информацию о конкретном производителе и представляет из себя ассоциативный массив. Свойства бренда:
- Manuf - Производитель
- Name - Название
- Info - Общая информация по запросу. Массив, содержащий 1 элемент:
- Errors - Массив ошибок, возникший в процессе поиска
Пример запроса и обработки ответа:
$client = new SoapClient("https://www.avtoto.ru/services/search/soap.wsdl",
array('soap_version' => SOAP_1_1));
// Параметры запроса
$params = array(
'user_id' => 11111,
'user_login' => 'UserLogin',
'user_password' => 'UserPassword',
'search_code' => '55555',
);
// Поиск
$result = $client->GetBrandsByCode($params);
// Обработка результата
if (isset($result['Brands']) && count($result['Brands'])>0) {
echo 'Результат поиска по коду: '.$params['search_code'];
echo 'Всего найдено:'.count($result['Brands']);
foreach($result['Brands'] as $element) {
// Здесь обрабатываем каждый элемент отдельно
print_r($element);
}
}
// Вывод ошибок
if (isset($result['Info']['Errors']) && count($result['Info']['Errors'])>0) {
echo join(', ', $result['Info']['Errors']);
}
Примечание к методу GetBrandsByCode
Сервис поиска предложений будет работать в случае выполнения условия: сумма заказов / количество
запросов > 20 после некоторого порога проценок.
Метод: AddToBasket
Описание: Добавляет запчасти в корзину
Параметры запроса: В качестве входного параметра необходим массив со следующей структурой:
- user - Данные пользователя для авторизации (тип: ассоциативный массив):
- user_id - Уникальный идентификатор пользователя (тип: целое)
- user_login - Логин пользователя (тип: строка)
- user_password - Пароль пользователя (тип: строка)
- parts - Список запчастей для добавления в корзину (тип: индексированный массив):
- Code* - Код детали
- Manuf* - Производитель
- Name* - Название (тип: строка)
- Price - Цена (тип: вещест.)
- Storage* - Склад (тип: строка)
- Delivery* - Срок доставки (тип: строка)
- Count - количество для покупки (тип: целое)
- PartId* - Номер запчасти в списке результата поиска (тип: целое)
- SearchID* - Номер поиска (тип: целое)
- RemoteID - ID запчасти в Вашей системе(тип: целое)
- Comment - Ваш комментарий к запчасти (тип: строка) [необязательный параметр]
Параметры ответа: Сервис возвращает многомерный массив со следующими элементами:
- Done - Массив RemoteID успешно добавленных элементов
- Errors - Массив ошибок:
- type - Тип ошибки: RemoteID - Если элемент прошел проверку на корректность, но возникла ошибка при добавлении элемента в корзину или Element, если возникла ошибка при проверке на корректность
- id - RemoteID или номер элемента
- error - Описание ошибки
- Info - Общая информация по запросу
- DoneInnerId - Массив успешно добавленных запчастей с внутренними ID корзины:
- RemoteID - ID товара в Вашей системе
- InnerID - ID товара в корзине AvtoTO
Пример запроса и обработки ответа:
$client = new SoapClient("https://www.avtoto.ru/services/search/soap.wsdl",
array('soap_version' => SOAP_1_1));
// Запчасти для добавления в корзину
$elements_for_basket = array(
0 => array(
'Code' => 'Код запчасти',
'Manuf' => 'Производитель',
'Name' => 'Название запчасти',
'Price' => 100.00,
'Storage' => 'Склад',
'Delivery' => 0,
'BaseCount' => 1,
'SearchID' => 1001,
'RemoteID' => 452356,
'Count' => 1,
'PartId' => 5,
)
);
// Параметры для добавления в корзину
$params_basket = array(
'user' => array(
'user_id' => 11111,
'user_login' => 'UserLogin',
'user_password' => 'UserPassword'
),
'parts' => $elements_for_basket
);
// Добавление в корзину
$result = $client->AddToBasket($params_basket);
// Обработка результата
if ( isset($result['DoneInnerId']) && count($result['DoneInnerId']) > 0) {
foreach($result['DoneInnerId'] as $element) {
// Сохраняем $element['InnerID'] для дальнейшей работы с корзиной
//...
}
}
// Обработка ошибок
if (isset($result['Errors']) && count($result['Errors'])>0) {
print_r($result['Errors']);
}
Метод: UpdateCountInBasket
Описание: Изменяет количество запчастей в корзине
Параметры запроса: В качестве входного параметра необходим массив со следующей структурой:
- user - Данные пользователя для авторизации (тип: ассоциативный массив):
- user_id - Уникальный идентификатор пользователя (тип: целое)
- user_login - Логин пользователя (тип: строка)
- user_password - Пароль пользователя (тип: строка)
- parts - Список запчастей для обновления количества в корзине (тип: индексированный массив):
- InnerID* - ID записи в корзине AvtoTO (тип: целое)
- RemoteID - ID запчасти в Вашей системе (тип: целое)
- NewCount** - Необходимое количество запчастей в карзине (тип: целое, положительное)
[**] — Необходимо, чтобы новое количество NewCount не превышало максимальное количество MaxCount, и соответствовало кратности заказа BaseCount
Параметры ответа: Сервис возвращает многомерный массив, со следующими элементами:
- Done - Массив RemoteID успешно обновленных элементов
- Errors - Массив ошибок:
- type - Тип ошибки: RemoteID - Если элемент прошел проверку на корректность, но возникла ошибка при обновлении количества в корзине или Element, если возникла ошибка при проверке на корректность
- id - RemoteID или номер элемента
- error - Описание ошибки
- Info - Общая информация по запросу
Пример запроса и обработки ответа:
$client = new SoapClient("https://www.avtoto.ru/services/search/soap.wsdl",
array('soap_version' => SOAP_1_1));
// Запчасти для обновления количества в корзине
$elements_for_update_count_in_basket = array(
0 => array(
'InnerID' => 56741135,
'RemoteID' => 23789,
'NewCount' => 5
)
);
// Параметры для обновления количества в корзине
$params_basket = array(
'user' => array(
'user_id' => 11111,
'user_login' => 'UserLogin',
'user_password' => 'UserPassword'
),
'parts' => $elements_for_update_count_in_basket
);
// Обновление количества в корзине
$result = $client->UpdateCountInBasket($params_basket);
// Обработка результата
if ( isset($result['Done']) && count($result['Done']) > 0) {
foreach($result['Done'] as $element) {
// Подтверждаем для $element['RemoteID'] новое количество запчастей в корзине
//...
}
}
// Обработка ошибок
if (isset($result['Errors']) && count($result['Errors'])>0) {
print_r($result['Errors']);
}
Метод: DeleteFromBasket
Описание: Удаляет запчасти из корзины
Параметры запроса: В качестве входного параметра необходим массив со следующей структурой:
- user - Данные пользователя для авторизации (тип: ассоциативный массив):
- user_id - Уникальный идентификатор пользователя (тип: целое)
- user_login - Логин пользователя (тип: строка)
- user_password - Пароль пользователя (тип: строка)
- parts - Список запчастей для удаления из корзины (тип: индексированный массив):
- InnerID* - ID записи в корзине AvtoTO (тип: целое)
- RemoteID - ID запчасти в Вашей системе (тип: целое)
Параметры ответа: Сервис возвращает многомерный массив, со следующими элементами:
- Done - Массив RemoteID успешно удаленных элементов
- Errors - Массив ошибок:
- type - Тип ошибки: RemoteID - Если элемент прошел проверку на корректность, но возникла ошибка при удалении элемента или Element, если возникла ошибка при проверке на корректность
- id - RemoteID или номер элемента
- error - Описание ошибки
- Info - Общая информация по запросу
Пример запроса и обработки ответа:
$client = new SoapClient("https://www.avtoto.ru/services/search/soap.wsdl",
array('soap_version' => SOAP_1_1));
// Запчасти для удаления из корзины
$elements_for_delete = array(
0 => array(
'InnerID' => 56741135,
'RemoteID' => 23789
)
);
// Параметры для добавления в корзину
$params_basket = array(
'user' => array(
'user_id' => 11111,
'user_login' => 'UserLogin',
'user_password' => 'UserPassword'
),
'parts' => $elements_for_delete
);
// Удаление из корзины
$result = $client->DeleteFromBasket($params_basket);
// Обработка результата
if ( isset($result['Done']) && count($result['Done']) > 0) {
foreach($result['Done'] as $element) {
// Помечаем $element['RemoteID'] как удаленный
//...
}
}
// Обработка ошибок
if (isset($result['Errors']) && count($result['Errors'])>0) {
print_r($result['Errors']);
}
Метод: CheckAvailabilityInBasket
Описание: Проверяет запчасти в корзине AvtoTO на наличие в прайсах для дальнейшего заказа, а так же срок хранения в корзине.
Параметры запроса: В качестве входного параметра необходим массив со следующей структурой:
- user - Данные пользователя для авторизации (тип: ассоциативный массив):
- user_id - Уникальный идентификатор пользователя (тип: целое)
- user_login - Логин пользователя (тип: строка)
- user_password - Пароль пользователя (тип: строка)
- parts - Список запчастей для добавления в заказы (тип: индексированный массив):
- InnerID* - ID записи в корзине AvtoTO (тип: целое)
- RemoteID - ID запчасти в Вашей системе (тип: целое)
- Count - количество для добавления (необязательный параметр, тип: целое)
Параметры ответа: Сервис возвращает многомерный массив, со следующими элементами:
- PartsInfo - информация о наличии товара в корзине, массив:
- RemoteID - ID товара в Вашей системе
- InnerID - ID товара в корзине AvtoTO (тип: целое)
- Availability - 1/0 (в наличии / нет в наличии) (тип: целое)
- MaxCount - максимальное допустимое количество товара для заказа в корзине AvtoTO (тип: целое, значение "-1" означает "без ограничений")
- Errors - Массив ошибок:
- RemoteID - ID товара в Вашей системе
- InnerID* - ID товара в корзине AvtoTO (тип: целое)
- Errors - список ошибок по данному ID товара (массив)
- Info - Общая информация по запросу
Пример запроса и обработки ответа:
$client = new SoapClient("https://www.avtoto.ru/services/search/soap.wsdl",
array('soap_version' => SOAP_1_1));
// Запчасти для добавления в заказы
$elements_for_orders = array(
0 => array(
'RemoteID' => 452356,
'InnerID' => 5302355, // ID записи в корзине AvtoTO
'Count' => 2
),
1 => array(
'RemoteID' => 452357,
'InnerID' => 5302356
)
);
// Параметры для проверки наличия
$params_orders = array(
'user' => array(
'user_id' => 11111,
'user_login' => 'UserLogin',
'user_password' => 'UserPassword'
),
'parts' => $elements_for_orders
);
// Проверка наличия
$result = $client->CheckAvailabilityInBasket($params_orders);
// Обработка результата
if ( isset($result['PartsInfo'])) {
foreach($result['PartsInfo'] as $element) {
if($element['Availability'] == 1) {
// Сохраняем $element['InnerID'] для дальнейшего добавления в заказы
} else {
// Этот $element['InnerID'] нельзя заказать
}
}
}
// Обработка ошибок
if (isset($result['Errors']) && count($result['Errors'])>0) {
print_r($result['Errors']);
}
Метод: AddToOrdersFromBasket
Описание: Добавляет запчасти в заказы из корзины Avtoto
Параметры запроса: В качестве входного параметра необходим массив со следующей структурой:
- user - Данные пользователя для авторизации (тип: ассоциативный массив):
- user_id - Уникальный идентификатор пользователя (тип: целое)
- user_login - Логин пользователя (тип: строка)
- user_password - Пароль пользователя (тип: строка)
- parts - Список запчастей для добавления в заказы (тип: индексированный массив):
- InnerID* - ID записи в корзине AvtoTO (тип: целое)
- RemoteID - ID запчасти в Вашей системе (тип: целое)
Укажите RemoteID = test, чтобы совершить добавление в тестовом режиме. - Count - количество для добавления (необязательный параметр, тип: целое)
Параметры ответа: Сервис возвращает многомерный массив, со следующими элементами:
- Done - Массив RemoteID успешно добавленных элементов
- Errors - Массив ошибок:
- RemoteID - ID товара в Вашей системе
- InnerID* - ID товара в корзине AvtoTO (тип: целое)
- Errors - список ошибок по данному ID товара (массив)
- Info - Общая информация по запросу
- DoneInnerId - Массив успешно добавленных запчастей с внутренними ID корзины:
- RemoteID - ID товара в Вашей системе
- InnerID - ID успешно добавленного в заказы товара AvtoTO
Пример запроса и обработки ответа:
$client = new SoapClient("https://www.avtoto.ru/services/search/soap.wsdl",
array('soap_version' => SOAP_1_1));
// Запчасти для добавления в заказы
$elements_for_orders = array(
0 => array(
'RemoteID' => 452356,
'InnerID' => 5302355, // ID записи в корзине AvtoTO
'Count' => 2
),
1 => array(
'RemoteID' => 452357,
'InnerID' => 5302356
)
);
// Параметры для добавления в заказы
$params_orders = array(
'user' => array(
'user_id' => 11111,
'user_login' => 'UserLogin',
'user_password' => 'UserPassword'
),
'parts' => $elements_for_orders
);
// Добавление в заказы
$result = $client->AddToOrdersFromBasket($params_orders);
// Обработка результата
if ( isset($result['DoneInnerId']) && count($result['DoneInnerId']) > 0) {
foreach($result['DoneInnerId'] as $element) {
// Сохраняем $element['InnerID'] для дальнейшей работы с заказами
//...
}
}
// Обработка ошибок
if (isset($result['Errors']) && count($result['Errors'])>0) {
print_r($result['Errors']);
}
Метод: GetOrdersStatus
Описание: Проверка статуса заказа в системе AvtoTO
Параметры запроса: В качестве входного параметра необходим массив со следующей структурой:
- user - Данные пользователя для авторизации (тип: ассоциативный массив):
- user_id - Уникальный идентификатор пользователя (тип: целое)
- user_login - Логин пользователя (тип: строка)
- user_password - Пароль пользователя (тип: строка)
- parts - Список запчастей для добавления в заказы (тип: индексированный массив):
- InnerID* - ID записи в заказах AvtoTO (тип: целое)
- RemoteID - ID записи в Вашей системе (тип: целое)
Параметры ответа: Сервис возвращает многомерный массив, со следующими элементами:
- OrdersInfo - Массив с информацией о статусах заказов
- RemoteID - ID заказа в Вашей системе
- InnerID - ID заказа в системе AvtoTO
- Info - массив данных о статусе заказа
- progress - общий статус заказа (тип: целое)
- progress_text - общий статус заказа (тип: строка)
- count - общее количество заказа (тип: целое)
- sub_progress - частичные статусы заказа (тип: массив)
- Частичный статус (номер) => количество частичного статуса
- sub_progress_text - частичные статусы заказа, описание (тип: строка с HTML разметкой)
- Errors - Массив ошибок:
- RemoteID - ID товара в Вашей системе
- InnerID* - ID товара в корзине AvtoTO (тип: целое)
- Errors - список ошибок по данному ID товара (массив)
Пример запроса и обработки ответа:
$client = new SoapClient("https://www.avtoto.ru/services/search/soap.wsdl",
array('soap_version' => SOAP_1_1));
// Запчасти для добавления в заказы
$elements_for_status = array(
0 => array(
'RemoteID' => 452356,
'InnerID' => 6412257 // ID записи в заказах AvtoTO
),
1 => array(
'RemoteID' => 452357,
'InnerID' => 6412258
)
);
// Параметры для добавления в корзину
$params_status = array(
'user' => array(
'user_id' => 11111,
'user_login' => 'UserLogin',
'user_password' => 'UserPassword'
),
'parts' => $elements_for_status
);
// Проверка статуса заказов
$result = $client->GetOrdersStatus($params_status);
// Обработка результата
if ( isset($result['OrdersInfo']) && count($result['OrdersInfo']) > 0) {
foreach($result['OrdersInfo'] as $element) {
echo 'Статус заказа '.$element['RemoteID'].' в системе AvtoTO (внутренний номер '.
$element['InnerID'].'): '.$element['Info']['progress_text'];
//...
}
}
// Обработка ошибок
if (isset($result['Errors']) && count($result['Errors'])>0) {
print_r($result['Errors']);
}
Метод: GetStatSearch
Описание: Предназначен для получения статистики проценок по всем объединенным регистрациям.
Параметры запроса: В качестве входного параметра используется ассоциативный массив, со следующими элементами:
- user_id - Уникальный идентификатор пользователя (номер клиента) (тип: целое)
- user_login - Логин пользователя (тип: строка)
- user_password - Пароль пользователя (тип: строка)
Параметры ответа: Сервис возвращает ассоциативный массив, с элементами:
- StatInfo - Информаци о проценках - индексированный массив с упорядоченными целочисленными ключами, начиная с 0:
- SearchCount - Количество проценок за определенный период
- SearchEnabled - Доступность использования проценки (true - доступно, false - недоступно)
- MaxCount - лимит проценок
- OrdersSum - сумма закупок за определенный период
- StatDateStart - дата начала периода подсчета
- StatDateStartStamp - дата начала периода подсчета в формате UNIX
- StatDateEnd - дата окончания периода подсчета
- StatDateEndStamp - дата окончания периода подсчета в формате UNIX
- SearchHistory - Информация о количестве проценок по дням - Массив со след. элементами:
- Day - день (в формате dd/mm)
- SearchCount - количество проценок
- BrandsStatInfo - Информаци о запросах брендов по коду - индексированный массив с упорядоченными целочисленными ключами, начиная с 0:
- SearchCount - Количество запросов за определенный период
- SearchEnabled - Доступность использования запросов (true - доступно, false - недоступно)
- MaxCount - лимит запросов
- OrdersSum - сумма закупок за определенный период
- StatDateStart - дата начала периода подсчета
- StatDateStartStamp - дата начала периода подсчета в формате UNIX
- StatDateEnd - дата окончания периода подсчета
- StatDateEndStamp - дата окончания периода подсчета в формате UNIX
- SearchHistory - Информация о количестве запросов по дням - Массив со след. элементами:
- Day - день (в формате dd/mm)
- SearchCount - количество запросов
- Errors - Массив ошибок, возникший в процессе поиска
Пример запроса и обработки ответа:
$client = new SoapClient("https://www.avtoto.ru/services/search/soap.wsdl",
array('soap_version' => SOAP_1_1));
// Параметры для авторизации пользователя
$params_login = array(
'user_id' => 11111,
'user_login' => 'UserLogin',
'user_password' => 'UserPassword'
);
// Получение статистики по проценкам и поиску брендов
$result = $client->GetStatSearch($params_login);
// Обработка результата по проценкам
if ( isset($result['StatInfo']) && count($result['StatInfo']) > 0) {
// Обработка результата по проценкам
if (isset($result['StatInfo']['SearchHistory']) && is_array($result['StatInfo']['SearchHistory'])) {
foreach($result['StatInfo']['SearchHistory'] as $searchHistory) {
echo 'День - '.$searchHistory['Day'].', количество проценок - '.$searchHistory['SearchCount'];
//...
}
}
}
// Обработка результата по брендам
if ( isset($result['BrandsStatInfo']) && count($result['BrandsStatInfo']) > 0) {
// Обработка результата по брендам
if (isset($result['BrandsStatInfo']['SearchHistory']) && is_array($result['BrandsStatInfo']['SearchHistory'])) {
foreach($result['BrandsStatInfo']['SearchHistory'] as $searchHistory) {
echo 'День - '.$searchHistory['Day'].', количество запросов - '.$searchHistory['SearchCount'];
//...
}
}
}
// Обработка ошибок
if (isset($result['Errors']) && count($result['Errors'])>0) {
print_r($result['Errors']);
}
Метод: GetShippingList
Описание: Предназначен для получения списка отгрузок.
Параметры запроса: В качестве входного параметра используется ассоциативный массив, со следующими элементами:
- user - Данные пользователя для авторизации (тип: ассоциативный массив):
- user_id - Уникальный идентификатор пользователя (тип: целое)
- user_login - Логин пользователя (тип: строка)
- user_password - Пароль пользователя (тип: строка)
- from - дата начала выборки (ДД.ММ.ГГГГ) (опционально) (тип: строка)
- to - дата окончания выборки (ДД.ММ.ГГГГ) (опционально) (тип: строка)
- page_num - номер страницы (опционально) (тип: целое)
Параметры ответа: Сервис возвращает ассоциативный массив, с элементами:
- Shippings - Список отгрузок - индексированный массив с упорядоченными целочисленными
ключами, начиная с 0:
- Id - ID отгрузки
- Date - Дата отгрузки
- Type - Тип отгрузки
- Summ - Сумма отгрузки
- Orders - Список заказов отгрузки - индексированный массив с упорядоченными целочисленными
ключами, начиная с 0:
- OrderId - ID заказа
- Comment - Комментарий к заказу
- Sclad - Направление склада
- Code - Артикул
- Name - Название
- Manuf - Бренд
- Price - Цена
- Count - Количество
- Pagination - массив с информацией о пагинации:
- CountItems - Количество отгрузок
- CountPages - Количество страниц
- PerPage - Количество результатов на странице
- CurrentPage - Текущая страница
- Errors - Массив ошибок, возникший в процессе поиска
Пример запроса и обработки ответа:
$client = new SoapClient("https://www.avtoto.ru/services/search/soap.wsdl",
array('soap_version' => SOAP_1_1));
// Параметры для авторизации пользователя
$params_login = array(
'user_id' => 11111,
'user_login' => 'UserLogin',
'user_password' => 'UserPassword'
);
$date_from = date('d.m.Y', time() - (3600*24*14));
$date_to = date('d.m.Y');
$page_num = 1;
// Получение списка отгрузок
$result = $client->GetShippingList([
'user' => $params_login,
'from' => $date_from,
'to' => $date_to,
'page_num' => $page_num,
]);
// Обработка результата
if ( isset($result['Shippings']) && count($result['Shippings']) > 0) {
// Обработка результата
//...
}
// Обработка ошибок
if (isset($result['Errors']) && count($result['Errors'])>0) {
print_r($result['Errors']);
}
Дополнение для .NET разработчиков
Из-за проблем совместимости существуюших WSDL, пригодных для PHP SOAP-клиентов, мы сделали отдельный WSDL для работы с .NET SOAP-клиентами.
Входные параметры для всех методов в этой версии — массивы, аналогичные описываемым в этой документации, только запакованные в JSON (строка). Возвращются данные так же в формате JSON.
Метод SearchGetParts соответствует описанию метода SearchGetParts2.
Ниже приведен пример метода SearchStart.
using System;
using System.Collections.Generic;
using System.Diagnostics;
namespace ConsoleApp
{
class Program
{
//ТОЧКА ВХОДА
static void Main(string[] args)
{
AvtotoParts av = new AvtotoParts();
//параметры запроса для метода SearchStart
string code = "C110";
string brand = "DOLZ";
//параметры запроса для метода SearchGetParts
Dictionary search_params = new Dictionary();
//Запускаем SearchStart, получаем process_id
search_params = av.SearchStart(code, brand);
Console.WriteLine("Запускаем поиск для получения process_id: av.SearchStart");
Console.WriteLine("process_id - " + search_params["process_id"]);
Console.WriteLine("Начинаем запросы к серверу: av.SearchGetParts");
//используя результат с process_id, начинаем посылать запросы на сервер для проверки результатов
av.SearchGetParts(search_params);
Console.WriteLine("end");
Console.ReadLine();
}
}
class AvtotoParts
{
private int[] response_wait_first_periods = { 1500, 1500 }; //первые 2 запроса по 1,5 сек
private int response_wait_period = 1000; //оставльные запросы по 1 сек
private int search_extension_time_limit = 10000; //максимальное время запросов 10 сек
public AvtotoParts()
{
Console.WriteLine("Первые запросы: по " + String.Join(", ", response_wait_first_periods) + " миллисекунд");
Console.WriteLine("Остальные запросы: по " + response_wait_period.ToString() + " миллисекунд");
Console.WriteLine("Общее время выполнения " + search_extension_time_limit.ToString() + " миллисекунд");
}
///
/// Метод, который послыает запросы на сервер и получает список запчастей
///
///
public void SearchGetParts(Dictionary search_params)
{
//класс, который позволяет измерить точное количество времени
Stopwatch elapsed = new Stopwatch();
try
{
//запускаем измерение пройденного времени
elapsed.Start();
//количество запросов, которое уже было осуществлено
int query_count = 0;
while (elapsed.ElapsedMilliseconds < this.search_extension_time_limit)
{
int sleep_time = this.response_wait_period;
if (this.response_wait_first_periods.Length > query_count)
{
sleep_time = this.response_wait_first_periods[query_count];
}
//останавливаем поток на N миллисекунд
System.Threading.Thread.Sleep(sleep_time);
query_count++;
//ЗАПРОС ЗАПЧАСТЕЙ
bool good_result = false;
this.SearchPartsFromServer(search_params, elapsed.ElapsedMilliseconds, query_count, ref good_result);
/*if (good_result == true) { //ПОИСК вернул результат
break;
}*/
}
}
catch (Exception ex)
{
throw new Exception("err", ex);
}
finally
{
elapsed.Stop();
}
}
///
/// ПОИСК ЗАПЧАСТЕЙ (ЗАПРОС К SearchGetParts2)
///
///
///
///
///
private void SearchPartsFromServer(Dictionary search_params, long ElapsedMilliseconds, int count, ref bool good_result)
{
//TODO Тут реализован метод запроса к нашему серверу к методу SearchGetParts2
Console.WriteLine(String.Format("Запрос №{1}. Прошло {0} миллисекунд", ElapsedMilliseconds, count)); //сколько прошло миллисекунд
/*
* СТАРЫЙ МЕТОД ИЗ СПРАВКИ
[WebMethod]
[System.Web.Script.Services.ScriptMethod]
public static string SearchStart(string code, int ch) {
/// ***-Ваши данные
string user_id = "";
string user_login = "";
string user_password = "";
/// ***-Ваши данные
string ret="-1";
try
{
Regex rgxCode = new Regex("[^0-9a-zа-я]");
code = rgxCode.Replace(code.ToLower(), "");
var ws = new avtoto.AvtoTOService();
string isAnalog = (ch == 1 ? "on" : "'off'");
string retJson = ws.SearchStart(
@"{""user_id"":""" + user_id + @""",""user_login"":"""
+ user_login + @""",""user_password"":""" + user_password
+ @""",""search_code"":""" + code + @""",""search_cross"":""" + isAnalog + @"""}"
);
var json = new JavaScriptSerializer().DeserializeObject(retJson) as Dictionary;
if (json == null) throw new NullReferenceException();
ret = (string)json["ProcessSearchId"];
}
catch (Exception ex)
{
Common.logsData(ex.ToString());
return null;
}
return ret;
}
*/
}
///
/// Первый запрос поиска, который возвращает process_id
///
///
///
///
public Dictionary SearchStart(string code, string brand)
{
Dictionary return_params = new Dictionary();
//TODO Тут реализован метод запроса к нашему серверу к методу SearchStart
return_params.Add("process_id", Guid.NewGuid().ToString());
return return_params;
}
}
}
Дополнение для версии на cURL
Из-за проблем совместимости существуюших WSDL, пригодных для PHP SOAP-клиентов, мы сделали отдельный API для работы с форматом JSON через HTTP запросы.
Входные параметры для всех методов в этой версии аналогичны описываемым в этой документации, только запакованные в JSON (строка). Возвращются данные так же в формате JSON.
Ниже приведен пример метода SearchStart.
//подготавливаем данные для запроса (исходя из документации)
$data = array(
'search_code' => 'C110',
'search_cross' => 'off',
'user_id' => 1000000,
'user_login' => 'login',
'user_password' => 'pass',
);
//конвертируем подготовленные данные в JSON строку
$data_string = json_encode($data);
/**
* создаем массив, который будет передан с помощью cURL
* первое поле массива data - это НАЗВАНИЕ МЕТОДА (исходя из документации)
* второе поле массива data - это ДАННЫЕ В JSON
* это необходимо для того, что например при добавлении в корзину в используем
* вложенные массивы. SOAP умеет вложенные массивы, а POST нет.
*/
$request = array(
'action' => 'SearchStart',
'data' => $data_string,
);
//делаем запрос к серверу
$result = curl_start($request);
function curl_start($request) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.avtoto.ru/?soap_server=json_mode" );
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
$result = curl_exec($ch);
//конвертируем вернувшеюся JSON строку в массив и возвращаем
return json_decode($result, true);
}
Ниже приведен пример массива $data для метода GetOrdersStatus.
//подготавливаем данные для запроса (исходя из документации)
$data = array(
'user' => array(
'user_id' => 1000000,
'user_login' => 'login',
'user_password' => 'pass',
),
'parts' => array(
array('InnerID' => 700001, 'RemoteID' => 800001),
array('InnerID' => 700002, 'RemoteID' => 800002),
array('InnerID' => 700003, 'RemoteID' => 800003),
array('InnerID' => 700004, 'RemoteID' => 800004),
),
);
//конвертируем подготовленные данные в JSON строку
$data_string = json_encode($data);
/**
* создаем массив, который будет передан с помощью cURL
* первое поле массива item - это НАЗВАНИЕ МЕТОДА (исходя из документации)
* второе поле массива data - это ДАННЫЕ В JSON
* это необходимо для того, что например при добавлении в корзину в используем
* вложенные массивы. SOAP умеет вложенные массивы, а POST нет.
*/
$request = array(
'action' => 'GetOrdersStatus',
'data' => $data_string,
);
//делаем запрос к серверу
$result = curl_start($request);
function curl_start($request) {
...
}