API сайта

По ссылке ниже доступна документация к API http://www.l-auto.by/core/docs/index.html
Логин и пароль для авторизации к API такой же, как и для работы на сайте. 

Общий алгоритм работы с API при оформлении заказа:

  • для авторизации используется Basic Auth (это для программистов, которые будут делать интеграцию), для пользовательской проверки есть окно авторизации, где вводится логин и пароль как на сайте
  • получаем идентификатор основного договора ("/core/api/SalesConditions")
  • получаем идентификатор строки товара offerKey ("/core/api/Offers/ProductKey")
  • добавляем товар с offerKey в корзину ("/core/api/Cart/Row")
  • получаем идентификатор корзины и список идентификаторов товаров в ней ("/core/api/Cart")
  • получаем условия доставки и оплаты deliveryAndPaymentId ("/core/api/Delivery"), его достаточно получить один раз для своей торговой точки
  • отправляем заказ ("/core/api/Cart/Order")
  • Альтернативный вариант оформления заказа: процениваем товары через API и отправляем заказ по эл. почте с вложением файла Excel со списком позиций (артикул, бренд, количество).

    Пример проценки (код из 1С Предприятие 8.3) ... -->
    АдресСервера = "www.l-auto.by";//обязательно www
    логин = "";//вставить реальные данные для доступа к сайту
    пароль = "";//вставить реальные данные для доступа к сайту
    JSON_строка = "[{vendorCode: '07857', vendorName: 'febi'}, {vendorCode: 'oc976', vendorName: 'mahle'} ]";
    хСоединение = Новый HTTPСоединение(АдресСервера,80,логин,пароль,,,);
    		
    ЗаголовокHTTP = Новый Соответствие();
    ЗаголовокHTTP.Вставить("Content-Type","application/json");
    ЗаголовокHTTP.Вставить("Content-Length",СтрДлина(JSON_строка));
    хЗапрос = Новый HTTPЗапрос;
    хЗапрос.АдресРесурса = "/core/api/Offers/ProductKey";
    		
    хЗапрос.Заголовки = ЗаголовокHTTP;
    хЗапрос.УстановитьТелоИзСтроки(JSON_строка, "windows-1251");
    Ответ = хСоединение.ВызватьHTTPМетод("POST", хЗапрос);
    ОтветВВидеСтроки = Ответ.ПолучитьТелоКакСтроку("utf-8");
    Сообщить(ОтветВВидеСтроки);
    

    Пример ответа в строке сообщений 1С:

    [{
            "offerKey": "CfDJ8Bcl6iHbtvFKv4b82e_ZTIM8a9NBblMRnn72Z_tJDswOEzW5t6lnPua2JWpTddBaHqtDi0t1rIps1c5NdnLwVQTuK2EziRokS4FRrgVorPk75DdqgqXV-2sGaoWVCDZxp1Jhd4b_ylf0uTfmxDhcvt4_Xwf2tSUgOVS5PJJ22oeG5zcM812zB9ZI8ydp0yBDsHLjipJwGmVtFI7_927-Lycuf4QyyLGrvq-6aW2CHXm_fpP7dXI04yx9nDYZndJBB3as9ohMwhwge43jgUJuM10",
            "product": {
                "id": "0e387b0d-b0e8-11e6-87b6-0cc47a7a2ec8",
                "vendorCode": "07857",
                "vendorName": "FEBI BILSTEIN",
                "vendorPurifiedCode": "07857",
                "name": "Сайлентблок",
                "url": "sailentblok-febi-bilstein-07857",
                "vatRate": "НДС20",
                "service": false,
                "restProductUnit": {
                    "id": "ada860bd-e6c3-11e1-a4bf-6cf0491a8a6b",
                    "name": "шт",
                    "coefficient": 1.000
                },
                "orderProductUnit": null,
                "defaultImage": {
                    "name": "FEBI BILSTEIN 07857 Сайлентблок",
                    "description": null,
                    "id": "62333a81-54ac-11ea-afc3-7085c2c91be5",
                    "format": "unknown",
                    "url": "/i/febi-bilstein-07857-sailentblok.unknown"
                }
            },
            "productDescription": null,
            "repositoryDeliveryTime": {
                "sourceStockDeliveryTime": {
                    "pointId": "413f2cf4-05a4-11e0-8c9e-6cf0491a89ac",
                    "deliveryTime": 0,
                    "availableAt": "23:59:59",
                    "departureDisabled": false
                },
                "departureStockDeliveryTime": null,
                "regionDeliveryTime": null
            },
            "repositoryDescription": {
                "id": "413f2cf4-05a4-11e0-8c9e-6cf0491a89ac",
                "type": "Склады",
                "name": null,
                "abbreviation": "ОСН",
                "webColor": "#BAEF88",
                "description": "Доставка/самовывоз по адресу г. Минск, ул. Шаранговича, 7 (пн-пт с 9:00 до 19:00, субб с 9:00 до 18:00)",
                "departureDisabled": false,
                "readOnly": false,
                "rank": 10,
                "regionId": null
            },
            "quantity": "12.000",
            "quantityMultiplicity": 1.0,
            "price": 2.16,
            "oldPrice": null
        }, {
            "offerKey": "CfDJ8Bcl6iHbtvFKv4b82e_ZTIPCBSIHc8-ixomnTrH7AHmAcfll3Cxc9FJWtDA6jfVWnWgDN5UPKCQdJ3x0fUlqn-LsBPNlhTnl-w4jbk31cH30m_4i0G67lvFRyquKg623MvE4PFInzYPpZBBPNaoG33dFPI1Rlw9eNOWe8z7avYdmwgCFoCpasOaZ9wJTwZUKS5_RKjUPLaZVXLvRMVS5Zip3fTH7ZxJeINqk3QtPU_vzg6zXOsHvWjzi5nOzfFXDL6qJz0aeawAAicbYEideX64",
            "product": {
                "id": "08c51671-0567-11e0-8c9e-6cf0491a89ac",
                "vendorCode": "OC976",
                "vendorName": "MAHLE ORIGINAL",
                "vendorPurifiedCode": "OC976",
                "name": "фильтр масляный (заменяет OC310, OC100, OC99, OC99 OF)",
                "url": "filtr-maslyanyi-mahle-original-oc976",
                "vatRate": "НДС20",
                "service": false,
                "restProductUnit": {
                    "id": "08c51672-0567-11e0-8c9e-6cf0491a89ac",
                    "name": "шт",
                    "coefficient": 1.000
                },
                "orderProductUnit": null,
                "defaultImage": null
            },
            "productDescription": null,
            "repositoryDeliveryTime": {
                "sourceStockDeliveryTime": {
                    "pointId": "413f2cf4-05a4-11e0-8c9e-6cf0491a89ac",
                    "deliveryTime": 0,
                    "availableAt": "23:59:59",
                    "departureDisabled": false
                },
                "departureStockDeliveryTime": null,
                "regionDeliveryTime": null
            },
            "repositoryDescription": {
                "id": "413f2cf4-05a4-11e0-8c9e-6cf0491a89ac",
                "type": "Склады",
                "name": null,
                "abbreviation": "ОСН",
                "webColor": "#BAEF88",
                "description": "Доставка/самовывоз по адресу г. Минск, ул. Шаранговича, 7 (пн-пт с 9:00 до 19:00, субб с 9:00 до 18:00)",
                "departureDisabled": false,
                "readOnly": false,
                "rank": 10,
                "regionId": null
            },
            "quantity": "25.000",
            "quantityMultiplicity": 1.0,
            "price": 5.59,
            "oldPrice": null
        }
    ]
    
    
    Пример оформления заказа (код из 1С Предприятие 8.3) ... -->
    АдресСервера = "www.l-auto.by"; //обязательно www
    логин = ""; //вставить реальные данные для доступа к сайту
    пароль = ""; //вставить реальные данные для доступа к сайту
    ОсновнойСкладID = "413f2cf4-05a4-11e0-8c9e-6cf0491a89ac";
    customerDepartureStockId = ОсновнойСкладID;
    
    хСоединение = Новый HTTPСоединение(АдресСервера, 80, логин, пароль,,,);
    
    //получаем идентификатор основного договора
    ОсновнойДоговорID = "";
    ЗаголовокHTTP = Новый Соответствие();
    ЗаголовокHTTP.Вставить("accept" , "text/plain");
    
    хЗапрос = Новый HTTPЗапрос;
    хЗапрос.АдресРесурса = "/core/api/SalesConditions?activeCustomerContracts=true";
    хЗапрос.Заголовки = ЗаголовокHTTP;
    Ответ = хСоединение.ВызватьHTTPМетод("GET", хЗапрос); 
    ЧтениеJSON = Новый ЧтениеJSON(); //читаем ответ
    ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку("utf-8"));
    СтруктураОтвета = ПрочитатьJSON(ЧтениеJSON, Истина);
    ЧтениеJSON.Закрыть();
    
    Для каждого стр из СтруктураОтвета Цикл
    	Покупатели = стр["customers"]; 
    	Договоры = Покупатели[0]["customerContracts"];
    	Для каждого Договор из Договоры Цикл
    		Если Договор["default"] Тогда
    			ОсновнойДоговорID = Договор["customerContract"]["id"];
    		КонецЕсли;	
    	КонецЦикла;	
    КонецЦикла;	
    
    
    //получаем идентификатор строки товара offerKey
    offerKey = "";
    JSON_строка = "[{vendorCode: '017-06015', vendorName: 'rts'} ]"; //по артикулу и бренду
    ЗаголовокHTTP = Новый Соответствие();
    ЗаголовокHTTP.Вставить("Content-Type" , "application/json");
    ЗаголовокHTTP.Вставить("Content-Length" , СтрДлина(JSON_строка) );
    
    хЗапрос = Новый HTTPЗапрос;
    хЗапрос.АдресРесурса = "/core/api/Offers/ProductKey";
    хЗапрос.Заголовки = ЗаголовокHTTP;
    хЗапрос.УстановитьТелоИзСтроки(JSON_строка, "windows-1251");
    
    Ответ = хСоединение.ВызватьHTTPМетод("POST", хЗапрос);
    ЧтениеJSON = Новый ЧтениеJSON(); //читаем ответ
    ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку("utf-8"));
    СтруктураОтвета = ПрочитатьJSON(ЧтениеJSON, Истина);
    ЧтениеJSON.Закрыть();
    
    Для каждого Оффер из СтруктураОтвета Цикл
    	//перебираем результат по условию, что товар есть на Основном складе (customerDepartureStockId = ОсновнойСкладID)
    	Если ЗначениеЗаполнено(Оффер["offerKey"]) Тогда
    		offerKey = Оффер["offerKey"];
    	КонецЕсли;	
    КонецЦикла;	
    
    
    //добавляем товар с offerKey в корзину
    СтруктураПараметров = Новый Структура;
    СтруктураПараметров.Вставить("offerKey", offerKey);
    СтруктураПараметров.Вставить("quantity", 1); //количество для заказа
    
    ЗаписьJSON = Новый ЗаписьJSON;
    тПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, " ", Истина);  
    ЗаписьJSON.УстановитьСтроку(тПараметрыJSON); 
    ЗаписатьJSON(ЗаписьJSON, СтруктураПараметров); 
    JSON_строка = ЗаписьJSON.Закрыть();
    
    ЗаголовокHTTP = Новый Соответствие();
    ЗаголовокHTTP.Вставить("Content-Type" 			, "application/json");
    ЗаголовокHTTP.Вставить("X-Customer-Contract-ID" , ОсновнойДоговорID ); //для каждого договора своя корзина
    
    хЗапрос = Новый HTTPЗапрос;
    хЗапрос.АдресРесурса = "/core/api/Cart/Row?customerDepartureStockId=" + ОсновнойСкладID;
    хЗапрос.Заголовки = ЗаголовокHTTP;
    хЗапрос.УстановитьТелоИзСтроки(JSON_строка, "windows-1251");
    
    Ответ = хСоединение.ВызватьHTTPМетод("POST", хЗапрос);
    Если Ответ.КодСостояния > 200 Тогда
    	Сообщить("Ошибка при добавлении строки товара в корзину; " + Ответ.ПолучитьТелоКакСтроку("utf-8"));
    Иначе	
    	
    	
    	//получаем идентификатор корзины и идентификаторы товаров в ней
    	ЗаголовокHTTP = Новый Соответствие();
    	ЗаголовокHTTP.Вставить("accept" 				, "text/plain");
    	ЗаголовокHTTP.Вставить("X-Customer-Contract-ID" , ОсновнойДоговорID ); 
    	
    	хЗапрос = Новый HTTPЗапрос;
    	хЗапрос.АдресРесурса = "/core/api/Cart";
    	хЗапрос.Заголовки = ЗаголовокHTTP;
    	Ответ = хСоединение.ВызватьHTTPМетод("GET", хЗапрос); 
    	Если Ответ.КодСостояния = 200 Тогда
    		
    		ЧтениеJSON = Новый ЧтениеJSON(); //читаем ответ
    		ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку("utf-8"));
    		СтруктураОтвета = ПрочитатьJSON(ЧтениеJSON, Истина);
    		ЧтениеJSON.Закрыть();
    		
    		Cart_ID = СтруктураОтвета["header"]["id"];
    		rowIdList = Новый Массив;
    		Для каждого стр из СтруктураОтвета["products"] Цикл
    			rowIdList.Добавить(стр["id"]);	
    		КонецЦикла;	
    		
    		
    		//на странице https://www.l-auto.by/core/docs/index.html вручную получим идентификатор доставки методом "/core/api/Delivery" 
    		//он свой для каждой точки доставки клиента
    		//нужно выбрать то значение, где есть оба ID для "Доставка транспортом Л-авто" и "Вид оплаты - основной"
    		//входящие параметры для запроса: customerDepartureStockId = ОсновнойСкладID; X-Customer-Contract-ID = ОсновнойДоговорID
    		deliveryAndPaymentId = "ewAiAEQAZQBsAGkAdgBlAHIAeQBUAHkAcABlAEkAZAAiADoAIgBlADYAYQAwADcANgAyAGEALQA3ADUANgA4AC0ANAAyADYAMgAtADgAYgAyADMALQBiADIAMABjAGMANgBmADYANwBjADEAZgAiACwAIgBQAGEAeQBtAGUAbgB0AFQAeQBwAGUASQBkACIAOgAiADQAYgA4ADEAOABkADQANQAtADcAYQA5ADMALQA0ADYAOABjAC0AOQAyADgANwAtADAAMgAwADYANQBlADYAZgBkADgAMgA3ACIALAAiAFcAZQBiAFIAbwBsAEkAZAAiADoAIgAzADgAYQA2ADkAZQBkADEALQBkAGMAYwAxAC0ANABlADQAYgAtAGEAZQBiADgALQBjADIAOQA3ADQAYwAyADgANQA2ADUANgAiACwAIgBTAGgAaQBwAHAAaQBuAGcAQQBkAGQAcgBlAHMAcwAiADoAIgAyADIANAAwADIANgAsACAAMwQuACAAEQRABDUEQQRCBCwAIABDBDsELgAgABMEQAQ+BDQEPQQ1BD0EQQQ6BDAETwQsACAANAQuACAAMwA3ABEEIgB9AA==";
    		
    		//теперь отправляем заказ
    		СтруктураПараметров = Новый Структура;
    		СтруктураПараметров.Вставить("id"					, Cart_ID);
    		СтруктураПараметров.Вставить("deliveryAndPaymentId"	, deliveryAndPaymentId); 
    		СтруктураПараметров.Вставить("comment"				, "Тестовый заказ для проверки API");
    		СтруктураПараметров.Вставить("rowIdList"			, rowIdList);
    		
    		ЗаписьJSON = Новый ЗаписьJSON;
    		тПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, " ", Истина);  
    		ЗаписьJSON.УстановитьСтроку(тПараметрыJSON); 
    		ЗаписатьJSON(ЗаписьJSON, СтруктураПараметров); 
    		JSON_строка = ЗаписьJSON.Закрыть();
    		
    		ЗаголовокHTTP = Новый Соответствие();
    		ЗаголовокHTTP.Вставить("accept"					, "text/plain");
    		ЗаголовокHTTP.Вставить("Content-Type" 			, "application/json-patch+json");
    		ЗаголовокHTTP.Вставить("X-Customer-Contract-ID" , ОсновнойДоговорID );
    		
    		хЗапрос = Новый HTTPЗапрос;
    		хЗапрос.АдресРесурса = "/core/api/Cart/Order?customerDepartureStockId=" + ОсновнойСкладID;
    		хЗапрос.Заголовки = ЗаголовокHTTP;
    		хЗапрос.УстановитьТелоИзСтроки(JSON_строка, "utf-8", ИспользованиеByteOrderMark.НеИспользовать );
    		Ответ = хСоединение.ВызватьHTTPМетод("POST", хЗапрос);
    		Если Ответ.КодСостояния = 200 Тогда
    			Сообщить("Идентификатор заказа; " + Ответ.ПолучитьТелоКакСтроку("utf-8"));
    		Иначе	
    			Сообщить("Ошибка метода /core/api/Cart/Order: код ответа = " + Ответ.КодСостояния + "; ответ строкой = " + Ответ.ПолучитьТелоКакСтроку("utf-8"));
    		КонецЕсли;	
    		
    	КонецЕсли;	
    	
    КонецЕсли;	
    
    
    Пример получения deliveryAndPaymentId (код из 1С Предприятие 8.3) ... -->
    АдресСервера = "www.l-auto.by"; //обязательно www
    логин = ""; //вставить реальные данные для доступа к сайту
    пароль = ""; //вставить реальные данные для доступа к сайту
    
    ЗаголовокHTTP = Новый Соответствие();
    ЗаголовокHTTP.Вставить("accept" , "text/plain");
    
    хЗапрос = Новый HTTPЗапрос;
    хЗапрос.АдресРесурса = "/core/api/Delivery";
    хЗапрос.Заголовки = ЗаголовокHTTP;
    
    хСоединение = Новый HTTPСоединение(АдресСервера, 80, логин, пароль,,,);
    Ответ = хСоединение.ВызватьHTTPМетод("GET", хЗапрос); 
    
    ЧтениеJSON = Новый ЧтениеJSON(); //читаем ответ
    ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку("utf-8"));
    СтруктураОтвета = ПрочитатьJSON(ЧтениеJSON, Истина);
    ЧтениеJSON.Закрыть();
    
    Для каждого эл Из СтруктураОтвета["include"]["deliveryTypes"] Цикл
    	Если Найти(эл["name"], "Доставка") > 0 Тогда
    		deliveryTypeId = эл["id"];
    	КонецЕсли;	
    КонецЦикла;	
    	
    Для каждого эл Из СтруктураОтвета["include"]["paymentTypes"] Цикл
    	Если Найти(эл["name"], "основной") > 0 Тогда
    		paymentTypeId = эл["id"];
    	КонецЕсли;	
    КонецЦикла;
    
    мсвОтвет = Новый Массив;
    Для каждого эл из СтруктураОтвета["data"] Цикл
    	Если НЕ эл["deliveryTypeId"] = deliveryTypeId Тогда
    		Продолжить;
    	КонецЕсли;
    	Если НЕ эл["paymentTypeId"] = paymentTypeId Тогда
    		Продолжить;
    	КонецЕсли;
    	
    	Для Каждого point Из СтруктураОтвета["include"]["points"] Цикл
    		Если point["id"] = эл["deliveryPointId"] Тогда
    		 	стр = Новый Структура("id, address", эл["id"], point["address"]);
    			мсвОтвет.Добавить(стр);
    			Сообщить(point["address"] + " " + эл["id"]);
    		КонецЕсли;
    	КонецЦикла;	
    КонецЦикла;	
    
    
    
    

    Алгоритм при оформлении возврата:

  • получаем условия доставки ("/core/api/Delivery"), чтобы получить адреса торговых точек
  • выполняем POST запрос ("https://sp.l-auto.by/ut/hs/la/OrderCancellationRequests") на создание возврата. В заголовке передаем параметр "Authorization" со значением base64(Логин:Пароль).
  • Тело запроса в формате json ... -->
    { "address" : "", 										
        "items" : [{
    		"article" : "OX401DA", 							
    		"brand" : "MAHLE", 								
    		"quantity" : 1, 								
    		"brak" : "Ошибка при подборе", 					 
    		"brakcomment" : "Ошибка покупателя", 					 
    		"comment" : ""																							
    	}]
    }
    где
    address - строка(250)	Адрес торговой точки, который можно получить из метода /core/api/Delivery
    items - массив со списком товаров
    article - строка(50) 	Артикул
    brand - строка(150) 	Бренд
    quantity - число(10,0) 	Количество
    brak - строка(20) 	Причина возврата товара. Возможные значения "Ошибка при подборе" / "Брак".
    brakcomment - строка(20) Дополнительная причина. Если brak="Ошибка при подборе" тогда "Ошибка покупателя"/"Ошибка продавца". Если brak="Брак" тогда "Производственный брак"/"Повреждена упаковка"
    comment - строка(250) Комментарий клиента
    
  • После успешного оформления возврата его можно будет увидеть в журнале возвратов на сайте. Также можно будет скачать сопутствующие печатные формы.
  • Пример оформления возврата (код из 1С Предприятие 8.3) ... -->
    АдресСервера = "sp.l-auto.by";
    логин 	= ""; //вставить реальные данные для доступа к сайту
    пароль 	= ""; //вставить реальные данные для доступа к сайту
    хСоединение = Новый HTTPСоединение(АдресСервера,,,,,,Новый ЗащищенноеСоединениеOpenSSL(
            Новый СертификатКлиентаWindows(),
            Новый СертификатыУдостоверяющихЦентровWindows()));
    
    ЗаголовокHTTP = Новый Соответствие();
    ЗаголовокHTTP.Вставить("accept" 		, "text/plain");
    ЗаголовокHTTP.Вставить("Content-Type" 	, "application/json");
    ЗаголовокHTTP.Вставить("Authorization"	, ПолучитьBase64СтрокуИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзСтроки(логин + ":" + Пароль, КодировкаТекста.UTF8, Ложь)));
    
    хЗапрос = Новый HTTPЗапрос;
    хЗапрос.АдресРесурса = "/ut/hs/la/OrderCancellationRequests";
    хЗапрос.Заголовки = ЗаголовокHTTP;
    
    items = Новый Массив;
    
    item = Новый Структура;
    item.Вставить("article"		, "OX401DA"); 
    item.Вставить("brand"		, "MAHLE");
    item.Вставить("quantity"	, 1);
    item.Вставить("brak"		, "Ошибка при подборе");
    item.Вставить("brakcomment"	, "Ошибка покупателя");
    item.Вставить("comment"		, "");
    items.Добавить(item);
    
    СтруктураПараметров = Новый Структура;
    СтруктураПараметров.Вставить("address", "г. Минск, ул. Притыцкого, д. 62, корп. 3, каб. 61");
    СтруктураПараметров.Вставить("items", items);
    
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, " ", Истина)); 
    ЗаписатьJSON(ЗаписьJSON, СтруктураПараметров); 
    JSON_строка = ЗаписьJSON.Закрыть();
    хЗапрос.УстановитьТелоИзСтроки(JSON_строка, "utf-8");
    
    Ответ = хСоединение.ВызватьHTTPМетод("POST", хЗапрос);
    ОтветСтрокой = Ответ.ПолучитьТелоКакСтроку("utf-8");