Всем привет!
Т.к. во многих интернет-магазинах стараются интегрироваться со службами доставки, приходится писать различные интеграции с этими службами. Далеко не всегда, эти компании предоставляют примеры кода для интеграции с 1С (в моей практике, когда занимался этим много - таких ситуаций практически не встречалось).
Сейчас пришлось опять взяться за интеграцию, на этот раз с Озон. Для экономии времени других разработчиков, привожу вариант получения списка пунктов выдачи заказов (ПВЗ).
Первый момент, с которым столкнется любой разработчик интеграции с Озон - это получение токена:
Функция ПолучитьТокенОзон() Экспорт
//описание https://docs.ozon.ru/api/rocket/#tag/Token
Токен = Неопределено;
УрлСервиса = "https://xapi.ozon.ru/principal-auth-api/connect/token";
client_id = "Principal_ххххххххххх_хххххххх-хххх-хххх-хххх-хххххххххххх"; //здесь у нас ID, полученный в ЛК Озон
client_secret = "ххххххххххххххххх";//а здесь пароль, полученный там же
Сообщение = "grant_type=client_credentials&client_id="+client_id+"&client_secret="+client_secret;
WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Open("POST", УрлСервиса,0);
WinHttp.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded");
WinHttp.SetRequestHeader("Content-Length", XMLСтрока(СтрДлина(Сообщение)));
WinHttp.SetRequestHeader("Host", "xapi.ozon.ru");
WinHttp.Send(Сообщение);
Если WinHttp.Status<>200 Тогда //ошибка
Возврат(Токен);
КонецЕсли;
ТекстОтвета = WinHttp.ResponseText();
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ТекстОтвета);
Ответ = ПрочитатьJSON(ЧтениеJSON, Ложь);
ЧтениеJSON.Закрыть();
Токен = Ответ.access_token;
Возврат(Токен);
КонецФункции
А теперь, собственно, получение самих ПВЗ:
Функция ПолучитьСписокПВЗ_Озон() Экспорт
СписПВЗ = Новый Массив;
Токен = ПолучитьТокенОзон();
УрлСервиса = "https://xapi.ozon.ru/principal-integration-api/v1/delivery/variants";
WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Open("GET", УрлСервиса,0);
WinHttp.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded");
WinHttp.SetRequestHeader("Content-Length", "0");
WinHttp.SetRequestHeader("Host", "xapi.ozon.ru");
WinHttp.SetRequestHeader("authorization", "Bearer "+Токен);
WinHttp.Send();
Если WinHttp.Status<>200 Тогда //ошибка
Возврат(СписПВЗ);
КонецЕсли;
ТекстОтвета = WinHttp.ResponseText();
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ТекстОтвета);
Ответ = ПрочитатьJSON(ЧтениеJSON, Ложь);
ЧтениеJSON.Закрыть();
Для Каждого ТекАдреса Из Ответ.Data Цикл
Пвз = Новый Структура("КодПункта, Адрес, Город, ГородФильтр, Координаты, Телефон, ОписаниеПроезда, ТипПВЗ");
Пвз.КодПункта = ТекАдреса.id;
Пвз.Адрес = ТекАдреса.address;
Пвз.Город = ТекАдреса.settlement;
Пвз.ГородФильтр = ТекАдреса.settlement;
Пвз.Координаты = "Ш."+ТекАдреса.lat+" Д."+ТекАдреса.long;
Пвз.Телефон = ТекАдреса.phone;
Пвз.ОписаниеПроезда = ТекАдреса.howToGet;
Пвз.ТипПВЗ = ТекАдреса.ObjectTypeName;
СписПВЗ.Добавить(Пвз);
КонецЦикла;
Возврат(СписПВЗ);
КонецФункции
Приводить дальнейший код записи в базу и использования ПВЗ бессмысленно, т.к. в разных конфигурациях будет разная структура хранения данных - у кого-то самописные, у кого-то древние переписанные, а кто-то на типовых.