Как отправить 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?
Вам надо (как я указал выше), написать код, который на выходе будет генерировать HTTP-запрос, который будет идентичен тому, что на картинке выше — в процессе написания кода и посылки тестовых запросов используйте программу трассировки сети (Wireshark / Fiddler), чтобы сравнивать ваш сгенерированный запрос на соответствие с примером.
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ
- 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 минут в день буду эффективнее )))