Пишу обмен с сайтом на движке OWOX. Столкнулся с переносом/обновлением остатков - очень сложных механизм. Есть кто нибудь кто делал подобное? Может хоть посоветуюсь...
Собственно, мне предоставили пример http запроса, каким он должен быть (это не 1С код, а просто текст);
POST /Goods/ HTTP/1.1\r\n
Connection: Keep-Alive\r\n
Content-Type: multipart/form-data; boundary=onesboundarydelimiter\r\n
Accept: */*\r\n
Authorization: Basic {password_hash}\r\n
User-Agent: 1C+Enterprise/8.2\r\n
Content-Length: {content_length}\r\n
Host: api.somedomain.com\r\n
\r\n
--onesboundarydelimiter\r\n
Content-Disposition: form-data; name="file"; filename="{filename_with_xml}"\r\n
Content-Type: application/octet-stream\r\n
Content-Transfer-Encoding: binary\r\n
\r\n
<?xml version="1.0" encoding="UTF-8"?>\r\n
<Goods>
<records>
<record>
<fields>
<title>New goods</title>
<details>
<record>
<record>
<id>1853</id>
<fields>
<value>3600</value>
</fields>
</record>
</record>
</details>
<attachments>
<images>
<record>
<fields>
<href>{image url}</href>
</fields>
</record>
</images>
</attachments>
<order>12</order>
</fields>
</record>
</records>
</Goods>
--onesboundarydelimiter--
//ЗАДАЕМ НЕОБХОДИМЫЕ ПЕРЕМЕННЫЕ...
//а) Разделитель (Boundary) - может быть любая уникальная строка, будем считать что это GUID константы, она неизменная
Boundary = СтрЗаменить(Константы.ВалютаУправленческогоУчета.Получить().УникальныйИдентификатор(), "-", "");
//б) Размер файла отправки
ФайлОтправки = Новый Файл("C:\1c8\otpravka.xml");
РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
//1. УСТАНАВЛИВАЕМ СОЕДИНЕНИЕ С СЕРВЕРОМ...
Сервер = "api.testm.mysite.ua";
ИмяПользователя = "demo";
Пароль = "mypassword";
Соединение = Новый HTTPСоединение(Сервер,,ИмяПользователя,Пароль);
//2. ФОРМИРУЕМ http-запрос СРЕДСТВАМИ 1С...
//а) заголовки
Заголовки = Новый Соответствие();
Заголовки.Вставить("Content-Type", "multipart/form-data; boundary="+boundary);
Заголовки.Вставить("Content-Lenght", РазмерФайлаОтправки);
//б) сам запрос
Запрос = Новый HTTPЗапрос("/Goods",Заголовки);
Запрос.УстановитьИмяФайлаТела("C:\1c8\otpravka.xml");
//3. ОТПРАВЛЯЕМ ЗАПРОС НА СЕРВЕР МЕТОДОМ POST СРЕДСТВАМИ 1С...
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
ТекстОтвета = Ответ.ПолучитьТелоКакСтроку();
ЭлементыФормы.ПолеHTMLДокумента1.УстановитьТекст(ТекстОтвета);//выведем ответ от сервера в поле формы
--82a55a64fe9111de806e001d7da552f5
Content-Disposition: form-data; name="file"; filename="C:\otpravka.xml"
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
<?xml version="1.0" encoding="UTF-8"?>
<Goods>
<records>
<record>
<fields>
<title>ACCESS, ACCESS TI2 Desktop hardware synthesizer, </title>
<parent>
<id>165360</id>
</parent>
<price>31104</price>
<producer>
<id/>
</producer>
<status>locked</status>
<sell_status>unavailable</sell_status>
<docket>ACCESS TI2 DESKTOP Синтезатор аналогового моделирования, настольно/рековый</docket>
<tags/>
<ext_id>204765</ext_id>
</fields>
</record>
</records>
</Goods>
--82a55a64fe9111de806e001d7da552f5--
<?xml version="1.0" encoding="UTF-8"?>
<Goods>
<records>
<record>
<fields>
<title>ACCESS, ACCESS TI2 Desktop hardware synthesizer, </title>
<parent>
<id>165360</id>
</parent>
<price>31104</price>
<producer>
<id/>
</producer>
<status>locked</status>
<sell_status>unavailable</sell_status>
<docket>ACCESS TI2 DESKTOP Синтезатор аналогового моделирования, настольно/рековый</docket>
<tags/>
<ext_id>204765</ext_id>
</fields>
</record>
</records>
</Goods>
Узнайте у администратора сайта/сервера, почему Internal Server Error ?
Вобщем, проблема была в кириллице.
Не так просто в моем случае оказалось скормить мой xml-файл который вмещает строки на кириллице (сформированный с помощью ЗаписьXML) объекту HTTPЗапрос.
Обошел проблему таким образом:
Сначала читаю файл в текстовыйДокумент, обязательно с виндовс кодировкой!
ФайлДляПередачи = Новый ТекстовыйДокумент;
ФайлДляПередачи.Прочитать(имяФайлаОтправки, КодировкаТекста.ANSI);
HTTPЗапрос.УстановитьТелоИзСтроки(ФайлДляПередачи.ПолучитьТекст());
! | Правила, пункт 1 |
Доброго времени суток!
Так же, пишу обмен 1С с сайтом на базе OWOX
И столкнулся с проблемой корректной отправки HTTPзапросов.
Программисты сайта как-то не охотно идут на контакт.
Хочу спросить, на Ваш взгляд, где у меня ошибка:
Ответ сервера:
Boundary = СтрЗаменить(Константы.ВалютаРегламентированногоУчета.Получить().УникальныйИдентификатор(), "-", "");
//б) Размер файла отправки
РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
//2. ФОРМИРУЕМ http-запрос СРЕДСТВАМИ 1С...
//а) заголовки
Заголовки = Новый Соответствие();
Заголовки.Вставить("POST /GOODS/ HTTP/1.1");
Заголовки.Вставить("Connection","Keep-Alive");
Заголовки.Вставить("Content-Type","multipart/form-data; boundary="+Boundary);
Заголовки.Вставить("Accept", "*/*");
Заголовки.Вставить("Authorization",СокрЛП(НастройкаСсылка.ЗаголовкиAuthorization));
Заголовки.Вставить("User-Agent", СокрЛП(НастройкаСсылка.ЗаголовкиUser));
Заголовки.Вставить("Content-Length", РазмерФайлаОтправки);
Заголовки.Вставить("Host",Соединение.Сервер);
ИмяФайлаЗапросHTTP = ПолучитьИмяВременногоФайла();
ЗапросHTTP = Новый ЗаписьТекста;
ЗапросHTTP.Открыть(ИмяФайлаЗапросHTTP, КодировкаТекста.ANSI);
ЗапросHTTP.ЗаписатьСтроку("--"+Boundary + Символы.ВК);
ЗапросHTTP.ЗаписатьСтроку("Content-Disposition: form-data; name=""file""; filename=" + Символ(34) + ФайлОтправки.Имя + Символ(34) + Символы.ВК);
ЗапросHTTP.ЗаписатьСтроку("Content-Type: application/octet-stream" + Символы.ВК);
ЗапросHTTP.ЗаписатьСтроку("Content-Transfer-Encoding: binary" + Символы.ВК);
ЗапросHTTP.ЗаписатьСтроку(Символы.ВК);
ФайлДляПередачи = Новый ТекстовыйДокумент;
ФайлДляПередачи.Прочитать(ФайлОтправки.ПолноеИмя, КодировкаТекста.ANSI);
ТекстСтрока = ФайлДляПередачи.ПолучитьТекст();
СимволыНачало = Найти(ТекстСтрока, "<?xml version=""1.0"" encoding=""UTF-8""?>");
СимволыНачало = Прав(ТекстСтрока, СтрДлина(ТекстСтрока) - СимволыНачало + 1);
ЗапросHTTP.ЗаписатьСтроку(СимволыНачало);
ЗапросHTTP.ЗаписатьСтроку(Символы.ВК);
ЗапросHTTP.ЗаписатьСтроку("--"+Boundary+"--");
ЗапросHTTP.Закрыть();
ОтветСервера = Неопределено;
ИмяФайлаОтвета = ПолучитьИмяВременногоФайла();
//б) сам запрос
Запрос = Новый HTTPЗапрос("/Goods",Заголовки);
Запрос.УстановитьИмяФайлаТела(ИмяФайлаЗапросHTTP);
Попытка
Соединение.ОтправитьДляОбработки(Запрос, ИмяФайлаОтвета);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
! | Выделяйте код |
Я бы использовал ADO хотяб
http://pro1c.org.ua/index.php?showtopic=2111
Всем спасибо, разобрался анализируя тело HTTP запроса с помощью Wireshark
flint, так и что там было?
Это была реклама Wireshark
500 ошибка это любая внутренняя ошибка сервера.
Судя по выложенному коду оно просто не должно работать.
Соединение = Новый HTTPСоединение("http://adres servera");
Соединение.ОтправитьДляОбработки("Путь к XML файлу", "/Goods/", "Путь к файлу ответа");
Доброго времени суток!
Где можно посмотреть документацию по owox. Есть доступы к документации, там текст
"Взаимодействие с внешними системами (API)
API - то функционал работы с данными модуля через обращение по URL. Нужно для того, чтобы клиент мог интегрировать интернет—магазин в его бизнес. Самый просто пример — актуализировать статус заказа после его обработки в 1С.
OwoxEngine дает возможность взаимодействовать с сиcтемой по двум стандартам XML-RPC и REST.
"
и т.п.
Вот а какие реквизиты брать, к чему обращаться непонятно. По каким мануалам пишите господа, по какому принципу.
Спасибо)
чей то я не вижу у них открытого API.
в связи с этим, нужно OWOX нанять на обслуживание вам. Либо использовать что-то из открытых исходников.
flint, Добрый
Как вы решили задачу?
Мне необходимо обновить цену
Какую структуру должен содержать XML-файл?
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua