Описание веб-сервиса PARTSIB. RU
Веб сервис представляет собой сервер, принимающий HTTP запросы (POST или GET) и отдающий данные в JSON формате.
С Вашего сайта можно организовать запросы на лету, например с помощью библиотеки CURL.
Точкой входа является URL http://partsib. ru/service. php, далее задаются параметры вызова:
p - имя функции, остальные параметры зависят от функции и описаны ниже.
Для отдаваемых данных используется кодировка UTF-8.
Перечень и описание функций сервиса.
Авторизация
Авторизация происходит при каждом вызове метода за счет добавления дополнительных параметров.
Параметры:
string username - имя пользователя, зарегистрированного в системе,
string password - пароль
Пример использования:
http://partsib. ru/service. php? p=<функция>&username=ivan&password=12345
Результат запроса:
{"success":true,"rows":[],"total": "13","r":"","timespent":"0.031051",uacc:10115}
Стандартные поля результата:
success boolean – успех/неудача
rows array – массив табличных данных в ответе запроса
total int – кол-во строк в массиве rows
r string – сообщение /отчет об ошибке
timespent float — затраченное время
uacc int — номер пользовательского профиля для которого был выполен вызов
Получение списка брендов
getBrands — выдает полный список брендов, использующийся в системе, которые могут использоваться для уточнения бренда в вызове searchByArticle()
Параметры: нет
Проценка артикула
searchByArticle - поиск запчасти по заданному артикулу. Дефисы и пробелы не имеют значения и игнорируются. Если артикул подходит нескольким брендам, предварительно выдается список брендов для уточнения искомой позиции.
Параметры:
string article — артикул запчасти по каталогам производителя,
string brand (необяз.) — бренд запчасти из списка getBrands(),
int nomenclature_id (необяз.) - внутренний номер номенклатуры, однозначно определяет пару бренд-артикул.
int alt - искать аналоги/замены. Принимает значения 0 или 1 (по умолчанию 1)
Пример использования:
http://partsib. ru/service. php? p=searchByArticle&article=2438079912&alt=1&username=ivan&password=12345
Результатом запроса может стать 2 варианта ответа:
1)
{"success":true,"rows":[{"id":"1304_5","brand":"BANDO","nomenclature_id":11630244,"title":"Ремень клиновый"},{"id":"816_2","brand":"BILSTEIN","nomenclature_id":"14437905","title":null},{"id":"913_4","brand":"BIRTH","nomenclature_id":3438096,"title":null},{"id":"1258_4","brand":"FENNO","nomenclature_id":13162603,"title":null},{"id":"39_3","brand":"FRI. TECH.","nomenclature_id":14290656,"title":null},{"id":"954_54","brand":"LEMFORDER","nomenclature_id":13661450,"title":null},{"id":"944_34","brand":"ORIGINAL IMPERIUM","nomenclature_id":3686112,"title":null},{"id":"914_22","brand":"REMKAFLEX","nomenclature_id":3447415,"title":"Ремень клиновый"},{"id":"1025_1","brand":"SEBRO","nomenclature_id":11940193,"title":null},{"id":"1130_144","brand":"TEHO","nomenclature_id":12355867,"title":null},{"id":"784_23","brand":"TRUSTING","nomenclature_id":14290655,"title":null},{"id":"971_12","brand":"WALKER","nomenclature_id":11971749,"title":null},{"id":"1061_16","brand":"ZARA","nomenclature_id":14597681,"title":null}],"total": "13","r":"B","timespent":"0.031051"}
В данном варианте обнаружено несколько артикулов разных производителей и нужен повторный запрос для уточнения номенклатуры, который будет выглядеть например так:
http://partsib. ru/service. php? p=searchByArticle&nomenclature_id=11630244&username=ivan&password=12345
т. е. в данном случае нас интересовал ремень фирмы BANDO и мы указали его номенклатурный номер. Дальнейший ответ сервера совпадет со случаем 2.
Также можно указать в уточняющем запросе параметр brand вместо nomenclature_id:
http://partsib. ru/service. php? p=searchByArticle&brand=BANDO&username=ivan&password=12345
2)
{"success":true,"rows":[{"id":"310115","sublist":"23","nomenclature_id":"194303","price":1065,"delivery":"15","title":"\u0420\u0435\u043c\u0435\u043d\u044c \u043f\u0440\u0438\u0432\u043e\u0434\u043d\u043e\u0439 \u043a\u043b\u0438\u043d\u043e\u0432\u044b\u0439","article":"1172003J00","brand":"NISSAN","quantity":"\u0415\u0441\u0442\u044c","mark":"","used":"0","supplier_id":"766","weight":null,"alt":true,"transit":0,"workout":70,"wherestore":"\u041e\u0410\u042d"},{"id":"142396","sublist":"8","nomenclature_id":"194303","price":794,"delivery":"15","title":"\u0420\u0435\u043c\u0435\u043d\u044c \u043f\u0440\u0438\u0432\u043e\u0434\u043d\u043e\u0439 \u043a\u043b\u0438\u043d\u043e\u0432\u044b\u0439","article":"1172003J00","brand":"NISSAN","quantity":"\u0415\u0441\u0442\u044c","mark":"","used":"0","supplier_id":"751","weight":null,"alt":true,"transit":0,"workout":55,"wherestore":"\u041e\u0410\u042d"},{"id":"11630244_0","sublist":0,"nomenclature_id":11630244,"price":0,"delivery":"?","title":"","article":"2450","brand":"BANDO","quantity":null,"mark":"","used":"0","weight":null,"wherestore":"?","supplier_id":765,"transit":"0","alt":false}],"total": "2","r":"","timespent":"0.548536", "brandsOnly":true,"uacc":10115 }
в данном случае мы получили результат проценки в виде 2х позиций, одна из которых является аналогом к запрошенной. Если просмотреть выдачу, то можно увидеть что у последней позиции цена равно нулю и срок равен «?».
Это означает что данной позиции нет в наличии.
Описание полей массива rows:
id — string идентификатор позиции для дальнейших операций
sublist int - внутр. код в прайслисте
nomenclature_id int - внутренний идентификатор номенклатуры
price int - цена в рублях
article string — артикул, искомый или аналог
delivery string - срок поставки
title string - название позиции (UTF-8)
quantity string - кол-во
mark string - пометка аналогичная сайту (например *)
used - бу/новое
lot_base int – размер лота
lot_type int – тип лота (0 = минимальное количество заказа, 1= кратность партии)
wherestore string - расположение склада (город)
supplier_id int - внутренний номер поставщика
transit boolean - транзит поставщика (позиции в пути)
alt boolean - аналог/замена относительно запрошенного артикула
price_date string — дата обновления прайслиста
workout int — округленный процент исполнения
ordp string – комментарий по выгрузке заказов
Если при первичном вызове searchByArticle указан бренд, то выдача ценовых предложений будет происходить в один этап.
Работа с корзиной
addToCart — Положить позицию в корзину, аналогично тому как это происходит на сайте. Позиции сохраняются между сессиями, за исключением случаев когда корзины необходимо очистить по техническим причинам, например обновление.
Обратите внимание, что id позиции из проценки действителен непродолжительное время (до обновления прайс-листа), поэтому если между проценкой и отправкой в корзину происходит длительный перерыв, то рекомендуется повторно проценить запчасть перед отправкой в корзину!
Параметры:
string id — идентификатор позиции id взятый из проценки
int quantity — кол-во позиций
Пример использования:
http://partsib. ru/service. php? p=addToCart&id=310115&quantity=2&username=ivan&password=12345 — мы положили в корзину 2 ремня NISSAN по 1065 руб. Id позиции получен из предыдущего вызова.
Пример результата запроса:
{"success":true,"rows":{"balance":22280,"totalOrders":"-","debt":-22280,"totalItems":1,"totalCost":1588,"inOrders":0,"unread":"0","discount":"0"},"total": "1","r":"","timespent":"0.013835", "brandsOnly":true,"uacc":10115}
показывается текущее состояние корзины, баланса, прочитанных сообщений во внутренней почте.
getCart — Получает содержимое корзины. Без параметров.
Пример использования:
http://partsib. ru/service. php? p=getCart&username=ivan&password=12345
Пример результата запроса:
{"success":true,"rows":[{"id":"142396","sublist":"8","nomenclature_id":"194303","price":794,"delivery":"15","title":"\u0420\u0435\u043c\u0435\u043d\u044c \u043f\u0440\u0438\u0432\u043e\u0434\u043d\u043e\u0439 \u043a\u043b\u0438\u043d\u043e\u0432\u044b\u0439","article":"1172003J00","brand":"NISSAN","quantity":2,"mark":"","used":"0","supplier_id":"751","weight":null,"alt":true,"transit":0,"workout":55,"wherestore":"\u041e\u0410\u042d","spec":""}],"total": "1","r":"","timespent":"0.011953", "brandsOnly":true,"uacc":10115}
clearCart — Очищает содержимое корзины. Возвращает тоже что и addToCart. Без параметров.
Пример использования:
http://partsib. ru/service. php? p=clearCart&username=ivan&password=12345
removeCartItem — Убирает из корзины указанную позицию. Возвращает тоже что и addToCart
Параметры:
string id — идентификатор позиции id взятый из проценки
Пример использования:
http://partsib. ru/service. php? p=removeCartItem&id=180320&username=ivan&password=12345
submitCart — Перемещает содержимое корзины в заказ/предзаказ и очищает ее.
Возвращает тоже что и addToCart
Параметры:
string сomment — комментарий для обработки заказа менеджером
string ucomment — комментарий к заказу для себя
boolean preorder — предзаказ или нет (1 или 0)
string ids — идентификаторы позиций через запятую которые отправлять.
(Для простоты если нужно отправить корзину целиком в ids можно указать ids=all)
Пример использования:
http://partsib. ru/service. php? p=clearCart&preorder=0&ucomment=Для Васи&comment=Пропустите в работу&username=ivan&password=12345
Возвращает тоже что и addToCart
Работа с заказами
getOrders — Получает список активных заказов
Пример использования:
http://partsib. ru/service. php? p=getOrders&username=ivan&password=12345
Пример результата запроса:
{"success":true,"rows":[{"order_group":"11383","oid":"2335","title":"\u0412\u0442\u0443\u043b\u043a\u0430 \u0440\u0435\u0437\u0438\u043d\u043e\u0432\u0430\u044f","brand":"HONDA","article":"51306S0A005","weight":"0.04","used":"0","price":"200","quantity":"2","ordered_time":"2010-08-11 09:29:43","delivery":"3\u0434\u043d.","statusTitle":"\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d","status":"5","statusColor":"CDCDCD","transit":"0","orderSum":"2228","head":2228}],"total": "15","r":null,"timespent":"?", "brandsOnly":true,"uacc":10115}
Поля аналогичны описанию при проценке, за исключением добавившихся:
int id – идентификатор позиции
int oid — номер заказа
string ordered_time — дата создания заказа
string statusTitle — название статуса
int status — код статуса
string statusColor — цвет статуса (используется веб-интерфейсом сайта)
int orderSum — общая сумма заказа
string head — для внутр. Использования
cancelOrderItem — Убирает позицию из заказа/предзаказа (присваивает статус «снят»). Снять можно заказы только до поступления заказа «в работу», т. е. при статусах «не оплачен», «предзаказ», «в очереди»
Параметры:
int orderItem — id позиции в заказе (позиция в заказе, можно получить из getOrders)
Пример использования:
http://partsib. ru/service. php? p=cancelOrderItem&orderItem=11383&username=ivan&password=12345
Возвращает тоже что и addToCart.
Пример клиентского приложения на PHP.
<?php
function callPartsib($funcName, $paramsHash){
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
$paramsString = "";
foreach($paramsHash as $key=>$val)
$paramsString.= "&".$key."=".$val;
curl_setopt($ch, CURLOPT_URL,
'http://partsib. ru/service. php? p='.$funcName.$paramsString);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_USERAGENT, 'Internet Shop X');
$data = curl_exec($ch);
curl_close($ch);
return json_decode($data);
}
//пример запроса в 2 этапа
$articleToSearch = "84630D4011";
$items = callPartsib("searchByArticle",
array("username"=>"ivan", "password"=>"12345", "article"=>$articleToSearch));
if($items-> brandsOnly == true){
foreach($items->rows as $item){
if($item->brand == "TOYOTA"){
$items = callPartsib("searchByArticle",
array("username"=>"ivan", "password"=>"12345", "nomenclature_id"=>
$item->nomenclature_id));
break;
}
}
}
foreach($items->rows as $item){
echo $item->article." ".$item->brand." ".$item->price."<br/>";
}
?>


