Как отправить xml запрос
Перейти к содержимому

Как отправить xml запрос

  • автор:

Как отправить xml запрос

Есть некий ресурс к которому надо обратиться для получения и формирования данных из 1С. Перед работой необходимо пройти авторизацию. Из описания присланного тех. поддержкой: для авторизации необходимо отправить POSTом XML запрос такой структуры:

И получить в ответном сообщении ID сессии, необходимой для дальнейшей работы.

Здесь код отправки:

Логин = «МойЛогин»;
Пароль = «МойПароль»;

ОбъектЗапись = Новый ЗаписьXML;
ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML(«utf-8», ,Истина,Истина);
ОбъектЗапись.ОткрытьФайл(ИмяФайлаЗапроса, ПараметрыЗаписиXML);
ОбъектЗапись.ЗаписатьОбъявлениеXML();

// выводим корневой элемент Request
ОбъектЗапись.ЗаписатьНачалоЭлемента(«Request»);

// выводим элемент Логин
ОбъектЗапись.ЗаписатьНачалоЭлемента(«login»);
ОбъектЗапись.ЗаписатьТекст(Логин);
ОбъектЗапись.ЗаписатьКонецЭлемента();

// выводим элемент пароль
ОбъектЗапись.ЗаписатьНачалоЭлемента(«password»);
ОбъектЗапись.ЗаписатьТекст(Пароль);
ОбъектЗапись.ЗаписатьКонецЭлемента();

// записываем конец для корневого элемента
ОбъектЗапись.ЗаписатьКонецЭлемента();
ОбъектЗапись.Закрыть();

HTTPСоединение = новый HTTPСоединение(«ххххх-ххх.ххх.ru», 80);

ФайлЗапроса = «d:\Request.xml»;
ФайлОтвета = «d:\Response.xml»;

Заголовки = новый Соответствие;
Заголовки.Вставить(«Content-Type», «multipart/form-data; boundary=JUSTSOMESCRAPSTRING»);

ФайлОтправки = новый ЗаписьТекста;
ФайлОтправки.Открыть(ФайлЗапроса, КодировкаТекста.ANSI);

ФайлОтправки.ЗаписатьСтроку(«—JUSTSOMESCRAPSTRING»);
ФайлОтправки.ЗаписатьСтроку(«Content-Disposition: form-data; name=»»xml»»; xml=»»» + ИмяФайлаЗапроса + «»»»);
ФайлОтправки.ЗаписатьСтроку(«Content-Type: text/plain» + Символы.ВК + Символы.ПС);
ФайлОтправки.ЗаписатьСтроку(ОбъектЗапись);
ФайлОтправки.ЗаписатьСтроку(«—JUSTSOMESCRAPSTRING»);

// Отправим запрос на сервер, и получим ответ
Попытка

HTTPСоединение.ОтправитьДляОбработки(ФайлЗапроса, «/api/yyyyyyyy», ФайлОтвета, Заголовки);

Файл = новый ЧтениеТекста();
Файл.Открыть(ФайлОтвета, КодировкаТекста.UTF8);
Ответ = Файл.Прочитать();

Исключение
Ответ = ОписаниеОшибки();
КонецПопытки;

Если кто-то сталкивался с подобной проблемой, можете помочь?

forum.clarionlife.net

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников.

morkovin Ветеран Сообщения: 899 Зарегистрирован: 20 Июль 2005, 14:53 Откуда: Volgograd, Russia Благодарил (а): 1 раз Контактная информация:

Отправить XML-файл через POST с параметрами

Сообщение morkovin » 21 Ноябрь 2019, 17:52

Это пример кода из 1С — отправка XML- на тестовый сервер ФИС ГИА (товарищ прислал). Образец файла у меня есть. Доступ к защищенной сети (VIp-net) — будет

WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1"); WinHttp.Option(2,"utf-8"); WinHttp.Open("POST","http://10.0.3.1:8080/XML/UploadXML/",0); WinHttp.SetRequestHeader("Accept-Language", "ru"); WinHttp.SetRequestHeader("Accept-Charset","utf-8"); WinHttp.setRequestHeader("Content-Language", "ru"); WinHttp.setRequestHeader("Content-Charset", "utf-8"); WinHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8"); ТекстовыйФайл = Новый ТекстовыйДокумент; ТекстовыйФайл.Прочитать(ПутьКПапке+"send.xml"); //Тут лежит на диске xml файл. такой файл у меня есть, но 1с нету стр=ТекстовыйФайл.ПолучитьТекст(); ПараметрыПОСТ = "inputXML=" + СокрЛП(стр); WinHttp.Send(ПараметрыПОСТ); ТекстОтвета = WinHttp.ResponseText(); Т=Новый ТекстовыйДокумент; Т.ДобавитьСтроку(ТекстОтвета); Т.Записать(ПутьКПапке+Метод+".xml");//Тут ответ сервиса будет лежать 

Как такое можно сделать через libcurl for Clarion или с помощью cURL для командной строки (может это проще?).
Куда копать? Может есть простая библиотечка типа WinHttp как у 1С?

WBR, morkovin

morkovin

Дед Пахом Старичок Сообщения: 3115 Зарегистрирован: 07 Июль 2005, 16:51 Откуда: Москва, Россия Благодарил (а): 8 раз Поблагодарили: 22 раза Контактная информация:

Отправить XML-файл через POST с параметрами

Сообщение Дед Пахом » 21 Ноябрь 2019, 18:05

Такое можно сделать через libcurl for Clarion, такое можно сделать с помощью cURL, Вы не поверите, но такое можно сделать даже с помощью NetTalk. Копайте примеры.

С уважением, ДП

Дед Пахом

Игорь Столяров Ветеран движения Сообщения: 7122 Зарегистрирован: 07 Июль 2005, 10:19 Откуда: г. Ростов-на-ДоМу Благодарил (а): 8 раз Поблагодарили: 40 раз

Отправить XML-файл через POST с параметрами

Сообщение Игорь Столяров » 21 Ноябрь 2019, 20:56

Действительно, в примерах LibCurl всё есть и даже возможны варианты реализации,
для StartUp можно начать вот с такого:

MyCurl TCurlHTTPClassEx ! xURL_ - строка подключения к сервису ! xRequest_ - IDynStr или строка с XML документом запроса к сервису ! Loc:Answer - IDynStr или строка с ответом сервиса на запрос Code MyCurl.Init() MyCurl.FreeHttpHeaders() MyCurl.AddHttpHeader('Content-Type: text/xml') MyCurl.AddHttpHeader('Content-Charset: utf-8') ! и т.д. указываем параметры шапки запроса MyCurl.SetHttpHeaders() ! --- Поддержка HTTPS (если нужно) If Sub(Lower(Clip(Left(xURL_))),1,5) = 'https' MyCurl.SetSSLVersion(CURL_SSLVERSION_DEFAULT) MyCurl.SetSSLVerifyHost(False) MyCurl.SetSSLVerifyPeer(False) !MyCurl.SetOpt(CURLSSH_AUTH_AGENT,Loc:UserAgent) end Loc:Res = MyCurl.SetCustomRequest('POST') MyCurl.SetOpt(CURLOPT_CONNECTTIMEOUT,20) Loc:Res = MyCurl.SetUserAgent('Mozilla/1.22 (compatible; MSIE 10.0; Windows 3.1)') ! --- Пользователь и пароль If (Clip(Left(xUser_)) <> '') Or (Clip(Left(xPass_)) <> '') then MyCurl.SetUserPwd(Clip(Left(xUser_)),Clip(Left(xPass_))). ! --- Собственно сам запрос If MyCurl.SetPostFields(xRequest_) = CURLE_OK ! Установить параметры запроса Loc:Res = MyCurl.SendRequest(Clip(xURL_),Loc:Answer) If Loc:Res = CURLE_OK xRCode_ = MyCurl.GetResponseCode() ! Получить код ответа сервиса на запрос If xRCode_ <> 200 then можно показать ошибки elsIf Loc:Res = -1 ! 'Неизвестная ошибка запроса: ' & Loc:Res else ! 'Ошибка запроса: ' & Loc:Res & '| ' & MyCurl.StrError(Loc:Res) end else ! 'Не удалось установить параметры запроса !' end MyCurl.CleanUp() 

С командной строкой и файлами на диске в 2019 г. работать уже совсем не комильфо.
Да и антивирусы лишний раз раздражать запуском внешней программы ни к чему.

За теми кто отстал — не возвращаться. (С) Кодекс

Игорь Столяров

Дед Пахом Старичок Сообщения: 3115 Зарегистрирован: 07 Июль 2005, 16:51 Откуда: Москва, Россия Благодарил (а): 8 раз Поблагодарили: 22 раза Контактная информация:

Отправить XML-файл через POST с параметрами

Сообщение Дед Пахом » 21 Ноябрь 2019, 21:12

Кстати, насчёт HTTPS есть новая запись в Q&A: https://clarionhub.com/t/libcurl-faq-ht . rl/1965/11
С уважением, ДП

Дед Пахом

Игорь Столяров Ветеран движения Сообщения: 7122 Зарегистрирован: 07 Июль 2005, 10:19 Откуда: г. Ростов-на-ДоМу Благодарил (а): 8 раз Поблагодарили: 40 раз

Отправить XML-файл через POST с параметрами

Сообщение Игорь Столяров » 21 Ноябрь 2019, 21:21

Так вроде в исходном «кирпиче» от 1С сертификат не юзают …
За теми кто отстал — не возвращаться. (С) Кодекс

Игорь Столяров

Дед Пахом Старичок Сообщения: 3115 Зарегистрирован: 07 Июль 2005, 16:51 Откуда: Москва, Россия Благодарил (а): 8 раз Поблагодарили: 22 раза Контактная информация:

Отправить XML-файл через POST с параметрами

Сообщение Дед Пахом » 21 Ноябрь 2019, 21:32

ну сегодня на тестовый сервер шлют, завтра на нормальный захотят.
С уважением, ДП

Дед Пахом

porutchik Активист Сообщения: 145 Зарегистрирован: 01 Февраль 2009, 5:35

Отправить XML-файл через POST с параметрами

Сообщение porutchik » 21 Ноябрь 2019, 22:19

morkovin писал(а): ↑ 21 Ноябрь 2019, 17:52 Как такое можно сделать через libcurl for Clarion или с помощью cURL для командной строки (может это проще?).
Куда копать? Может есть простая библиотечка типа WinHttp как у 1С?

а чем хуже INCLUDE(‘ClaRunExt.CLW’)?

porutchik

Игорь Столяров Ветеран движения Сообщения: 7122 Зарегистрирован: 07 Июль 2005, 10:19 Откуда: г. Ростов-на-ДоМу Благодарил (а): 8 раз Поблагодарили: 40 раз

Отправить XML-файл через POST с параметрами

Сообщение Игорь Столяров » 21 Ноябрь 2019, 23:48

porutchik писал(а): ↑ 21 Ноябрь 2019, 22:19 а чем хуже INCLUDE(‘ClaRunExt.CLW’)?
Кто работал с методами из ClaRunExt.CLW, тот в цирке не смеётся …
За теми кто отстал — не возвращаться. (С) Кодекс

Игорь Столяров

morkovin Ветеран Сообщения: 899 Зарегистрирован: 20 Июль 2005, 14:53 Откуда: Volgograd, Russia Благодарил (а): 1 раз Контактная информация:

Отправить XML-файл через POST с параметрами

Сообщение morkovin » 22 Ноябрь 2019, 5:20

Игорь Столяров писал(а): ↑ 21 Ноябрь 2019, 21:21 Так вроде в исходном «кирпиче» от 1С сертификат не юзают …

1. Думаю, сертификаты и не нужны ибо:

Для согласования подключения образовательная организация обязана:

подать уведомление в Роскомнадзор о внесении в реестр операторов персональных данных
разработать и принять пакет организационно-распорядительной документации, по защите персональных данных (перечень)
выделить или приобрести автоматизированное рабочее место (АРМ)
оснастить АРМ сертифицированными средствами технической и криптографической защиты информации, тем самым, превратив его в защищённое АРМ (ЗАРМ)
выделить помещение для установки ЗАРМ, удовлетворяющее требования по безопасности персональных данных
разработать для работы на ЗАРМ сопроводительную документацию
аттестовать ЗАРМ по требованиям безопасности информации в организации имеющей лицензию ФСТЭК
направить в ФЦТ, ЦИТиС или НИРО весь разработанный пакет документов и запрос на выпуск парольно-ключевой информации, и получить её
настроить средства защиты ЗАРМ для работы с сетями ФЦТ и ЦИТиС (НИРО)
И только после этого приступить к внесению данных в ФИС ЕГЭ, ФИС ГИА, ФИС ФРДО и АИС «Контингент».

Многое из перечисленного, возможно сделать самостоятельно, а вот для аттестации рабочего места без подрядчика с лицензией не обойтись (конечно, если Вы сами не обладатель лицензии ФСТЭК на техническую защиту конфиденциальной информации).
.

СПЕЦИАЛИСТЫ НАШЕЙ ЛАБОРАТОРИИ С РАДОСТЬЮ ОКАЖУТ ВАШЕМУ УЧЕБНОМУ ЗАВЕДЕНИЮ УСЛУГИ ПО АТТЕСТАЦИИ ЗАРМ. ИЛИ ВЕСЬ КОМПЛЕКС УСЛУГ, НЕОБХОДИМЫХ ДЛЯ ПОДКЛЮЧЕНИЯ К ФЕДЕРАЛЬНЫМ ИНФОРМАЦИОННЫМ СИСТЕМАМ ЕГЭ, ГИА, ФРДО И АИС «КОНТИНГЕНТ».
Для бюджетных организаций действует специальное предложение.
Цена организации защищённого рабочего места, с последующей аттестацией и подключением к ФИС ФРДО, ФИС ГИА и приёма и АИС «Контингент» составляет 59 870 рублей.

2. Весь сыр-бор из-за того, что разработчики предлагают веб-прогу без функций пакетного ввода. Ограничились возможностью пакетной передачи файлов (XML) через соответствующий реальныйсервер (или тестовый сервер для отладки). И теперь каждая организация должна решать вопрос сопряженения самостоятельно. Или вносить всё вручную с одного АРМ !
3. Убивает то, что всё это разработано на бюджетные деньги, внедряется в ВУЗы и ССУЗы в приказном порядке и с нас (бюджетников) ещё деньги стригут

Отправка XML запроса методом POST?

5c1c9a88670f9802078283.png

Вам надо (как я указал выше), написать код, который на выходе будет генерировать HTTP-запрос, который будет идентичен тому, что на картинке выше — в процессе написания кода и посылки тестовых запросов используйте программу трассировки сети (Wireshark / Fiddler), чтобы сравнивать ваш сгенерированный запрос на соответствие с примером.

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

xml

  • XML
  • +1 ещё

Откуда взять guid для rss фида?

  • 2 подписчика
  • 19 окт.
  • 70 просмотров

Отправка XML запроса методом POST (интеграция API)

Я вообще в ступоре. Не знаю что делать, в интернете решение найти не могу.

Мне необходимо получить статус заказа через API СДЭКа(служба доставки). Не знаю как правильно отправить этот самый запрос, в начале я думал, что ошибка в самом запросе, после чего обратился в службу поддержки. Они через программу Postman (приложил скриншот) отправили этот запрос и ответ получило, не могу понять как в 1с все это прописать, куда вставлять параметры?

Если в параметре KEY убрать xml_request, то уже будет в качестве ответа приходить ответ с ошибкой. Думаю все дело в этом параметре, запрос обязательно отправлять через метод POST

Прикрепленные файлы:
По теме из базы знаний

  • Демонстрационная конфигурация работы с API ВКонтакте
  • Интеграция Zimbra и 1С
  • Интеграция с Трелло. Готовый код
  • Обзор полезных методов БСП 3.1.4
  • SynchroSber — модуль API интеграции с маркетплейсом Мегамаркет (СберМегаМаркет) для 1С УТ 11.X, КА 2.X, ERP 2.X, УНФ 1.6, 3.0 (новые режимы — без публикации web сервисов + работа по FBO, покупка за руб/SM)
  • Дата
  • Дата
  • Рейтинг всех уровней
  • Рейтинг 1-го уровня
  • Древо развёрнутое
  • Древо свернутое

Свернуть все
2. user1302499 25.03.20 10:19 Сейчас в теме

HttpЗапрос = Новый HTTPЗапрос("POST"); HttpЗапрос.УстановитьТелоИзСтроки(СтрXML); HttpЗапрос.Заголовки.Вставить("Content-Type", "application/xml_request"); Соединение = Новый HTTPСоединение("integration.cdek.ru/status_report_h.php",,Логин, Пароль. Защита,Ложь); HTTPОтвет = Соединение.Записать(HttpЗапрос);

Если через отладку смотреть, то в HttpЗапрос нет установленного текста запроса (текст запроса храниться в СтрXML, почему его там нет?

3. koln 25.03.20 11:53 Сейчас в теме
(2)Попробуйте следующий код:

СтрокаURI = "https://integration.cdek.ru/status_report_h.php"; СтруктураURI = СтруктураURI(СтрокаURI); Пользователь = "Пользователь"; Пароль = "Пароль"; HTTPСоединение = Новый HTTPСоединение(СтруктураURI.Хост, СтруктураURI.Порт,Пользователь,Пароль. Новый ЗащищенноеСоединениеOpenSSL()); Заголовки = Новый Соответствие(); Заголовки.Вставить("Content-Type","application/xml_request"); ТелоЗапроса = . //Тут написать алгоритм сбора тела запроса HTTPЗапрос = Новый HTTPЗапрос(СтруктураURI.ПутьНаСервере, Заголовки); HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса); РезультатЗапроса = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); ТекстОтвета = Результат.ПолучитьТелоКакСтроку();
Функция СтруктураURI(Знач СтрокаURI) Экспорт СтрокаURI = СокрЛП(СтрокаURI); // схема Схема = ""; Позиция = Найти(СтрокаURI, "://"); Если Позиция > 0 Тогда Схема = НРег(Лев(СтрокаURI, Позиция - 1)); СтрокаURI = Сред(СтрокаURI, Позиция + 3); КонецЕсли; // строка соединения и путь на сервере СтрокаСоединения = СтрокаURI; ПутьНаСервере = ""; Позиция = Найти(СтрокаСоединения, "/"); Если Позиция > 0 Тогда ПутьНаСервере = Сред(СтрокаСоединения, Позиция + 1); СтрокаСоединения = Лев(СтрокаСоединения, Позиция - 1); КонецЕсли; // информация пользователя и имя сервера СтрокаАвторизации = ""; ИмяСервера = СтрокаСоединения; Позиция = Найти(СтрокаСоединения, "@"); Если Позиция > 0 Тогда СтрокаАвторизации = Лев(СтрокаСоединения, Позиция - 1); ИмяСервера = Сред(СтрокаСоединения, Позиция + 1); КонецЕсли; // логин и пароль Логин = СтрокаАвторизации; Пароль = ""; Позиция = Найти(СтрокаАвторизации, ":"); Если Позиция > 0 Тогда Логин = Лев(СтрокаАвторизации, Позиция - 1); Пароль = Сред(СтрокаАвторизации, Позиция + 1); КонецЕсли; // хост и порт Хост = ИмяСервера; Порт = ""; Позиция = Найти(ИмяСервера, ":"); Если Позиция > 0 Тогда Хост = Лев(ИмяСервера, Позиция - 1); Порт = Сред(ИмяСервера, Позиция + 1); КонецЕсли; Результат = Новый Структура; Результат.Вставить("Схема", Схема); Результат.Вставить("Логин", Логин); Результат.Вставить("Пароль", Пароль); Результат.Вставить("ИмяСервера", ИмяСервера); Результат.Вставить("Хост", Хост); Результат.Вставить("Порт", ?(Порт <> "", Число(Порт), Неопределено)); Результат.Вставить("ПутьНаСервере", ПутьНаСервере); Возврат Результат; КонецФункции

4. user1302499 25.03.20 16:59 Сейчас в теме
(3) тело запроса это xml строка?
5. koln 25.03.20 17:46 Сейчас в теме
(4)Посмотрите в API, полагаю, что да.
6. user1302499 27.03.20 09:58 Сейчас в теме
(5) Я не понимаю, для чего функция нужна?
7. koln 27.03.20 10:09 Сейчас в теме
(6) Если речь о

Функция СтруктураURI

то это универсальное решение. В эту функцию передается строка соединения полностью, а возвращается структура с необходимыми данными, которые и подставляются в HTTPСоединение и HTTPЗапрос.
Или речь о другой функции?

8. user1302499 27.03.20 10:20 Сейчас в теме

(7) об этой, т.е. она мне не нужна, если я буду отправлять свой запрос на другой API и оттуда мне придет структура уже

9. tvm 27.03.20 10:32 Сейчас в теме
10. user1302499 27.03.20 10:34 Сейчас в теме
(9) Эта функция формирует мой текст запроса?
11. koln 27.03.20 10:41 Сейчас в теме
(10)Эта функция разбирает строку соединения
на нужные части.
Вот Ваш код

Соединение = Новый HTTPСоединение("integration.cdek.ru/status_report_h.php",,Логин, Пароль. Защита,Ложь);

однако первым параметром нужно передавать не всю строку, а только адрес, а именно «integration.cdek.ru».
В конструкцию Новый HTTPЗапрос нужно первым параметром передавать путь на сервере, т.е. «/status_report_h.php».
Так вот данная функция сама разбирает полную строку на нужные части и подставляет нужные параметры в нужные места. Т.е. если Вам понадобится обратиться к другому ресурсу, Вы просто замените строку

СтрокаURI = "https://integration.cdek.ru/status_report_h.php";

12. user1302499 27.03.20 10:45 Сейчас в теме
(11) ааа, понял, спасибо, буду пробовать
13. user1302499 27.03.20 11:22 Сейчас в теме

(11)Все равно та же ошибка

Если посмотреть через отладку HTTPЗапрос, в нем должен быть текст?

14. koln 27.03.20 11:27 Сейчас в теме

(13) Ну так Вам нужно собрать тело запроса по тем параметрам, которые требуются для передачи (должно быть в описании сервиса).

15. user1302499 27.03.20 13:03 Сейчас в теме
(14) я собрал, могу всю процедуру кинуть
16. koln 27.03.20 13:06 Сейчас в теме
(15)Ну результат достигнут или есть проблемы?
17. user1302499 27.03.20 13:09 Сейчас в теме
(16) Ошибка точно та же что и с моим кодом
18. koln 27.03.20 13:18 Сейчас в теме
(17)Выложите весь код, попробую посмотреть.
19. user1302499 27.03.20 13:24 Сейчас в теме

&НаСервере Процедура ИЛ_СтатусЗаказаСДЭКПослеНаСервере()//Статус заказа СДЭК Попытка Защита = Новый ЗащищенноеСоединениеOpenSSL(); Соединение = Новый HTTPСоединение("https://integration.cdek.ru/status_report_h.php". Защита); Исключение Сообщить("Не удалось установить соединение с сервером онлайн-проверки:" + Символы.ПС + ИнформацияОбОшибке().Описание, СтатусСообщения.Важное); Возврат; КонецПопытки; НастройкиСДЭК = Справочники.МТД_Константы.НайтиПоРеквизиту("Ключ","СДЭК"); Если не ЗначениеЗаполнено(НастройкиСДЭК) Тогда Сообщить("Для данного вида отправления не заполнены логин и/или пароль"); Возврат; КонецЕсли; АккаунтСДЭК = НастройкиСДЭК.Значение; Логин = АккаунтСДЭК.Логин; Пароль = АккаунтСДЭК.Пароль; Если не ЗначениеЗаполнено(Логин) или не ЗначениеЗаполнено(Пароль) Тогда Сообщить("Для данного вида отправления не заполнены логин и/или пароль"); Возврат; КонецЕсли; Индекс = Лев(СокрЛП(Объект.АдресДоставки),6); Попытка Индекс = Число(Индекс); Индекс = Формат(Число(Индекс),"ЧГ=0"); НеопределенИндекс = Ложь; Исключение НеопределенИндекс = Истина; Сообщить("Не заполнен индекс получателя"); Возврат ; КонецПопытки; ТекДата = ТекущаяДата(); АдресЗначение = Объект["АдресДоставки" + "Значение"]; XDTOКонтактная = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(АдресЗначение, Перечисления.ТипыКонтактнойИнформации.Адрес); ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку(); Date = XMLСтрока(Формат(ТекДата, "ДФ=""гггг-ММ-дд'T'ЧЧ:мм:сс""")); //Date time/date //string(30) Account = XMLСтрока(Логин);//"7JM7K5twfzEV1ssCRklthcIPbbVZrZrZ"); //string(255) Secure = XMLСтрока(Пароль);//"t8XBoL1rUofIK9dKoXVB3Tji2F2hPHSk"); ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку("UTF-8"); ЗаписьXML.ЗаписатьОбъявлениеXML(); ЗаписьXML.ЗаписатьНачалоЭлемента("StatusReport"); //ЗаписьXML.ЗаписатьАтрибут("number", Number); ЗаписьXML.ЗаписатьАтрибут("account", Логин); ЗаписьXML.ЗаписатьАтрибут("date", Date); ЗаписьXML.ЗаписатьАтрибут("secure", Пароль); ЗаписьXML.ЗаписатьНачалоЭлемента("order"); ЗаписьXML.ЗаписатьАтрибут("DispatchNumber", Объект.ТрекНомер); ЗаписьXML.ЗаписатьКонецЭлемента();//order ЗаписьXML.ЗаписатьКонецЭлемента();//StatusReport СтрXML = ЗаписьXML.Закрыть(); Сообщить(СтрXML); ЗначениеВФайл("C:\Users\Server1C\Desktop\СтрокаXML.txt", СтрXML); //URL = "integration.edu.cdek.ru"; //Тестовый //URL = "integration.cdek.ru"; //Рабочий integration.cdek.ru // //Попытка // ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL; // Соединение = Новый HTTPСоединение(URL. ЗащищенноеСоединение); // //ЗаголовокHTTP = Новый Соответствие(); // //ЗаголовокHTTP.Вставить("Content-Type", "text/xml"); // //запросPOST = Новый HTTPЗапрос("POST"); // //запросPOST.Заголовки.Вставить("Content-Type", "application/xml"); // //Запрос = Новый HTTPЗапрос("/status_report_h.php", ЗаголовокHTTP); // // // //запросPOST.УстановитьТелоИзСтроки("mData="+СтрXML,КодировкаТекста.UTF8,ИспользованиеByteOrderMark.НеИспользовать); // //Запрос = "/1.0/user/backlog"; // HttpЗапрос = Новый HTTPЗапрос(URL); // HttpЗапрос.УстановитьТелоИзСтроки(СтрXML, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать); // //HttpЗапрос.Заголовки.Вставить("Content-Type", "application/xml"); // //HttpЗапрос.Заголовки.Вставить("xml_request", "xml_request"); // // Соединение = Новый HTTPСоединение("integration.cdek.ru/status_report_h.php",,Логин, Пароль. Защита,Ложь); // HTTPОтвет = Соединение.ОтправитьДляОбработки(HttpЗапрос); // Если HTTPОтвет.КодСостояния = 200 Тогда // // Иначе // Сообщить("Код состояния : " + HTTPОтвет.КодСостояния); // КонецЕсли; // ОтветИД = HTTPОтвет.ПолучитьТелоКакСтроку("utf-8"); СтрокаURI = "https://integration.cdek.ru/status_report_h.php"; СтруктураURI = СтруктураURI(СтрокаURI); Пользователь = Логин; Пароль = Пароль; HTTPСоединение = Новый HTTPСоединение(СтруктураURI.Хост, СтруктураURI.Порт,Пользователь,Пароль. Новый ЗащищенноеСоединениеOpenSSL()); Заголовки = Новый Соответствие(); Заголовки.Вставить("Content-Type","application/xml_request"); ТелоЗапроса = СтрXML; HTTPЗапрос = Новый HTTPЗапрос(СтруктураURI.ПутьНаСервере, Заголовки); HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса); РезультатЗапроса = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); ТекстОтвета = РезультатЗапроса.ПолучитьТелоКакСтроку(); //Запрос.УстановитьТелоИзСтроки(СтрXML, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать); //Ответ = Соединение.ОтправитьДляОбработки(Запрос); //ОтветВВидеСтроки = Ответ.ПолучитьТелоКакСтроку("UTF-8"); Попытка Чтение = Новый ЧтениеXML; Чтение.УстановитьСтроку(ТекстОтвета); Пока Чтение.Прочитать() Цикл Если Чтение.Имя="Order" Тогда Пока Чтение.ПрочитатьАтрибут() Цикл Если Чтение.Имя="DispatchNumber" Тогда DispatchNumber = Чтение.Значение; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; Сообщить(ТекстОтвета); Объект.СтатусЗаказаДоставки = DispatchNumber; Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецПроцедуры

20. koln 27.03.20 15:10 Сейчас в теме
(19) Попробуйте строку

HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса);

заменить на

Ну и ИкЭмЭль, который нужно воткнуть.

И что это люди так все усложняють.

ЗЫ: загуглено за 10 минут. Интересно, какими аргументами пользуются работодатели, которые берут на работу народ, который за в два раза меньшие деньги разрабатывает ПО в 100 раз дольше? Возьмите меня на удаленку — я даже работая 10 минут в день буду эффективнее )))

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *