Уважаемые коллеги, помогите разобраться.
Нужно сделать стыковку УТП с Новой почтой, платформа 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);
ответКакСтрока = Результат.ПолучитьТелоКакСтроку();
ОтветСтрока = сокрлп(ТекущаяДата())+Символы.ПС+ответКакСтрока;
КонецПроцедуры
Их демо-пример работает?
http://pro1c.org.ua/redirect.php?https://devcenter.novaposhta.ua/1c
Меня в Гугле еще не забанили - смотрите сами - форматировать неохота
Процедура ОбновитьОтделения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,УровеньЖурналаРегистрации.Ошибка); Возврат Неопределено; КонецЕсли; Возврат исхСтруктура; КонецФункции
Я это видел.
так тоже ошибка
{"success":false,"data":[],"errors":["Data is invalid"],"warnings":[],"info":[],"messageCodes":[],"errorCodes":[],"warningCodes":[],"infoCodes":[]}
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);
тогда надо с НП связываться. Если DAta = invalid - может опять что-то поменяли
Bernet @ Сегодня, 14:18
,
Спасибо, все взлетело!!!!!
ЗапросHTTP.УстановитьТелоИзСтроки(ЗапросСтрока, "UTF-8", ИспользованиеByteOrderMark.НеИспользовать);
Видать пригодилась тема...
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua