Версия для печати темы (https://pro1c.org.ua/index.php?s=6a1ec86e64cd0804f02032ca233aff2d&showtopic=53679)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Запрос АПИ к Новой почте

Автор: alex1c 19.08.19, 9:10

Уважаемые коллеги, помогите разобраться.
Нужно сделать стыковку УТП с Новой почтой, платформа 1С:Предприятие 8.3 (8.3.10.2505).
Через xml получилось, но хочется через json, а с ним чего-то не взлетает.

Текст запроса:
{
"apiKey": "хххххххххххххххххххххххххххх",
"modelName": "Address",
"calledMethod": "getAreas",
"methodProperties": {}
}

Код:

Процедура JSONНажатие(Элемент)
    
    Адрес = "api.novaposhta.ua/v2.0/json/";
    СоединениеHTTP = Новый HTTPСоединение(Адрес,,,,,,);
    
    ЗапросHTTP = Новый HTTPЗапрос(Адрес);
    ЗапросHTTP.УстановитьТелоИзСтроки(ТекстЗапроса);
    //ЗапросHTTP.Заголовки.Вставить("Content-Type", "text/json");
    ЗапросHTTP.Заголовки.Вставить("Content-Type","application/json; charset=utf-8");    
    
    //Результат = СоединениеHTTP.ОтправитьДляОбработки(ЗапросHTTP);
    Результат = СоединениеHTTP.ВызватьHTTPМетод("POST", ЗапросHTTP);
    
    ответКакСтрока = Результат.ПолучитьТелоКакСтроку();
    ОтветСтрока = сокрлп(ТекущаяДата())+Символы.ПС+ответКакСтрока;
    
КонецПроцедуры


В ответе приходит:
{"success":false,"data":[],"errors":["Data is invalid"],"warnings":[],"info":[],"messageCodes":[],"errorCodes":[],"warningCodes":[],"infoCodes":[]}

Подскажите что не так?

Автор: Vladal 19.08.19, 10:11

Их демо-пример работает?

http://pro1c.org.ua/redirect.php?https://devcenter.novaposhta.ua/1c

Автор: alex1c 19.08.19, 10:22

Vladal @ Сегодня, 11:11 * ,

Через xml только, а вот json - никак.

Автор: sava1 19.08.19, 11:44

Меня в Гугле еще не забанили - смотрите сами - форматировать неохота

Процедура ОбновитьОтделенияV2() Экспорт 
СтрокаJSON = Новый ЗаписьJSON;
СтрокаJSON.УстановитьСтроку();
СтруктураЗнч = новый Структура;
СтруктураЗнч.Вставить("apiKey","хххххххххххххххххххххххххххх");
СтруктураЗнч.Вставить("modelName","Address");
СтруктураЗнч.Вставить("calledMethod","getWarehouses");
Соот = Новый Соответствие; Соот.Вставить("","");
СтруктураЗнч.Вставить("methodProperties",Соот);
Настройка = Новый НастройкиСериализацииJSON;
ЗаписатьJSON(СтрокаJSON, СтруктураЗнч,);
исхстрокаJSON = СтрокаJSON.Закрыть();
структураОтвета = ЗапросКСерверуНовойПочты(исхстрокаJSON);
Если НЕ структураОтвета=Неопределено тогда
ВремТабл = Новый ТаблицаЗначений;
ТСтруктура = структураОтвета.data[0];
Для Каждого знч из ТСтруктура Цикл
Если ТипЗнч(знч.Значение) = Тип("Структура") тогда продолжить;
КонецЕсли;
ВремТабл.Колонки.Добавить(СокрЛП(знч.Ключ), Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(250)));
КонецЦикла;
Для каждого стрЗнч из структураОтвета.data Цикл
нСтрока= ВремТабл.Добавить(); ЗаполнитьЗначенияСвойств(нСтрока,стрЗнч); КонецЦикла; КонецЕсли; КонецПроцедуры // Функция - Запрос к серверу новой почты // // Параметры: // вхЗначение - только строка от JSON // // Возвращаемое значение: // - // Функция ЗапросКСерверуНовойПочты(Знач вхЗначение) Защищенное = Новый ЗащищенноеСоединениеOpenSSL; СоединениеHTTP = Новый HTTPСоединение("<a href="http://api.novaposhta.ua" target="_blank">api.novaposhta.ua</a>",,,,,,Защищенное); ЗапросHTTP = Новый HTTPЗапрос("/v2.0/json/"); ЗапросHTTP.УстановитьТелоИзСтроки(вхЗначение,КодировкаТекста.UTF8); ЗапросHTTP.Заголовки.Вставить("Host","<a href="http://api.novaposhta.ua" target="_blank">api.novaposhta.ua</a>"); ЗапросHTTP.Заголовки.Вставить("Content-Type","application/json"); Результат = СоединениеHTTP.ВызватьHTTPМетод("POST",ЗапросHTTP); исхJSON = Новый ЧтениеJSON; РезультатJSON = Результат.ПолучитьТелоКакСтроку(); исхJSON.УстановитьСтроку(РезультатJSON); исхСтруктура = ПрочитатьJSON(исхJSON); исхJSON.Закрыть(); Если НЕ ТипЗнч(исхСтруктура)=Тип("Структура") тогда ЗаписатьВЖурналРегистрации("Обновление отделений не понятный возврат, запрос:"+вхЗначение+"; результат:"+РезультатJSON,УровеньЖурналаРегистрации.Ошибка); Возврат Неопределено; ИначеЕсли ТипЗнч(исхСтруктура)=Тип("Структура") и не исхСтруктура.success тогда ЗаписатьВЖурналРегистрации("Обновление отделений не правильный возврат, запрос:"+вхЗначение+"; результат:"+РезультатJSON,УровеньЖурналаРегистрации.Ошибка); Возврат Неопределено; КонецЕсли; Возврат исхСтруктура; КонецФункции

Автор: alex1c 19.08.19, 13:06

Я это видел.
так тоже ошибка
{"success":false,"data":[],"errors":["Data is invalid"],"warnings":[],"info":[],"messageCodes":[],"errorCodes":[],"warningCodes":[],"infoCodes":[]}

Автор: Bernet 19.08.19, 13:18

alex1c @ Сегодня, 10:10 * ,
Ориентируюсь на стыковку которую писал сам через json. У меня работало. Во-первых адрес сервиса неправильно указываете, во-вторых тип соединения:

АдресСервиса = "api.novaposhta.ua";
СоединениеHTTP = Новый HTTPСоединение(АдресСервиса,
        ,
        ,
        ,
        ,
        ,
        Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено));

В третьих, запрос выглядит таким образом:
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(, Символы.Таб);
    
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.ПроверятьСтруктуру = Ложь;
    ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON);
    
    ЗаписьJSON.ЗаписатьНачалоОбъекта();
    
    ЗаписьJSON.ЗаписатьИмяСвойства("apiKey");
    ЗаписьJSON.ЗаписатьЗначение(КлючAPI);    
    
    ЗаписьJSON.ЗаписатьИмяСвойства("modelName");
    ЗаписьJSON.ЗаписатьЗначение("Address");    
    
    ЗаписьJSON.ЗаписатьИмяСвойства("calledMethod");
    ЗаписьJSON.ЗаписатьЗначение("getCities");    
    
    ЗаписьJSON.ЗаписатьКонецОбъекта();
    
    ЗапросСтрока = ЗаписьJSON.Закрыть();

АдресСервиса = "/v2.0/json/";

ЗапросHTTP = Новый HTTPЗапрос(АдресСервиса);
    ЗапросHTTP.Заголовки.Вставить("Content-Type",     "application/json");
    
    ЗапросHTTP.УстановитьТелоИзСтроки(ЗапросСтрока, "UTF-8", ИспользованиеByteOrderMark.НеИспользовать);

        Ответ = СоединениеHTTP.ОтправитьДляОбработки(ЗапросHTTP);

Автор: sava1 19.08.19, 13:22

тогда надо с НП связываться. Если DAta = invalid - может опять что-то поменяли

Автор: alex1c 19.08.19, 13:38

Bernet @ Сегодня, 14:18 * ,
Спасибо, все взлетело!!!!! icon_beer17.gif

ЗапросHTTP.УстановитьТелоИзСтроки(ЗапросСтрока, "UTF-8", ИспользованиеByteOrderMark.НеИспользовать);


Вот в этом месте трабл был.
Всем спасибо, сколько страниц перешарил - вы не представляете...

Автор: alex1c 19.08.19, 15:32

Видать пригодилась тема...

Автор: andr_andrey 19.08.19, 16:39

alex1c @ Сегодня, 16:32 * ,
Это поощрение за обратную связь smile.gif

Автор: alex1c 19.08.19, 19:12

andr_andrey @ Сегодня, 17:39 * ,
Ну ничего, надеюсь пригодится. icon_beer17.gif

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua