Формирование и отправка данных в SPOT 2D для 1С: 7.7
Комментарии
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
если кому интересно то передача post запроса реализовал так.
// XMLstr текст csv файла отправки.
Функция ОтправкаPOSTзапросом(XMLstr="",ИмяФайла)
MSXMLver = "6";
Попытка
Http = CreateObject("MSXML2.ServerXMLHTTP."+MSXMLver+".0");
Исключение
Попытка
MSXMLver = "4";
Http = CreateObject("MSXML2.ServerXMLHTTP."+MSXMLver+".0");
Исключение
Сообщить(ОписаниеОшибки(),"!");
Сообщить("Для работы модуля обмена необходима библиотека MSXML не ниже 4.0","!");
Возврат "Для работы модуля обмена необходима библиотека MSXML не ниже 4.0";
КонецПопытки;
КонецПопытки;
login = "**";
passw = "**";
DistrID = "**";
Если ПустаяСтрока(XMLstr) = 0 Тогда
Boundary = СтрЗаменить(ТекущееВремя(),":","");
//формируем тело запроса
Body = +"--"+Boundary+РазделительСтрок
+"Content-Disposition: form-data; name=""ufile""; filename="""+СтрЗаменить(ИмяФайла,".csv","")+""""+РазделительСтрок
+"Content-Type: text/plain"+РазделительСтрок+РазделительСтрок
+XMLstr+РазделительСтрок+РазделительСтрок
+"--"+Boundary+РазделительСтрок
+"Content-Disposition: form-data; name=""__login"""+РазделительСтрок+РазделительСтрок
+login+РазделительСтрок
+"--"+Boundary+РазделительСтрок
+"Content-Disposition: form-data; name=""__password"""+РазделительСтрок+РазделительСтрок
+passw+РазделительСтрок
+"--"+Boundary+РазделительСтрок
+"Content-Disposition: form-data; name=""__did"""+РазделительСтрок+РазделительСтрок
+DistrID+РазделительСтрок
+"--"+Boundary;
КонецЕсли;
ServiceRequest = "http://aqualife.spot2d.com/dinfo/auto-upload.phtml";
ServiceIP = "aqualife.spot2d.com";
Http.Open ("POST", ServiceRequest, -1); //асинхронный запрос
Http.SetRequestHeader("Content-Type","multipart/form-data; boundary="+Boundary);
//ЗначениеВФайл(КаталогИБ()+ИмяФайла,Body,0);
Http.Send(Body);
Состояние("Ожидание ответа на запрос...");
ВремяОжидания = 0;
Пока Http.ReadyState <> 4 Цикл
Попытка
Если Http.waitForResponse(1) = 0 Тогда //превышено время ожидания ответа =1s
Если ВремяОжидания >= 60 Тогда //60s
Состояние("");
Сообщить("Превышен интервал ожидания запроса сервера "+ServiceIP,"!");
Возврат 0;
КонецЕсли;
ВремяОжидания = ВремяОжидания + 1; //1s
Состояние("Ожидание ответа на запрос... "+Строка(ВремяОжидания)+"s");
КонецЕсли;
Исключение
Сообщить(ОписаниеОшибки(),"!");
Возврат 0;
КонецПопытки;
КонецЦикла;
//Состояние("");
Response = Http.ResponseXML;
Заголовки = Http.getAllResponseHeaders();
Сообщить("Заголовки: "+СпС(Лев(СпС(Заголовки),255)));
ОтветСервера = Http.responseText;
Сообщить("Response: "+СпС(Лев(СпС(Response),255)));
Сообщить("ОтветСервера: "+СпС(Лев(СпС(ОтветСервера),255)));
текст = СоздатьОбъект("Текст");
текст.ДобавитьСтроку(ОтветСервера);
текст.Записать(КаталогВременныхФайлов()+"AquaОтвет.xml");
Если Http.Status = 200 Тогда
Сообщить("HTTP status: "+Http.Status+" "+Http.StatusText+", время ожидания "+?(ВремяОжидания=0,"<1",Строка(ВремяОжидания))+"s");
Возврат "HTTP status: "+Http.Status+" "+Http.StatusText+", "+ОтветСервера+", время ожидания "+?(ВремяОжидания=0,"<1",Строка(ВремяОжидания))+"s";
Иначе
Сообщить("HTTP status: "+Http.Status+" "+Http.StatusText+", ошибка!","!");
Возврат "HTTP status: "+Http.Status+", "+Http.StatusText+", "+ОтветСервера+", ошибка!";
КонецЕсли;
КонецФункции // SendHTTPRequest
Показать
(5) rougudz, Весьма иньтересно, брольшое спасибо, НО: имеются непонятные моменты.
1 - Первое, что бросается в глаза - строка, проверяющая не превышен ли интервал времени ответа:
Если Http.waitForResponse(1) = 0 Тогда //превышено время ожидания ответа =1s
На языке 1С, строка в таком виде вызовет кучу ошибок.
2 - Функция СпС - что именно делает ??
1 - Первое, что бросается в глаза - строка, проверяющая не превышен ли интервал времени ответа:
Если Http.waitForResponse
На языке 1С, строка в таком виде вызовет кучу ошибок.
2 - Функция СпС - что именно делает ??
(6) сорри по спс это я для своего удобства делаю всегда
кнвертит все что угодно в строку и обрезает пробелы, лень писать СокрЛП(строка(чтото))
пишу спс(чтото)
по поводу Если Http.waitForResponse(1) = 0 Тогда
все нормально работает.
Http это не объект 1с, а MSXML2.ServerXMLHTTP.х.0
кнвертит все что угодно в строку и обрезает пробелы, лень писать СокрЛП(строка(чтото))
пишу спс(чтото)
Функция СпС(что) Экспорт
Возврат СокрЛП(Строка(что))
КонецФункции //СпС()
по поводу Если Http.waitForResponse(1) = 0 Тогда
все нормально работает.
Http это не объект 1с, а MSXML2.ServerXMLHTTP.х.0
Передача в SPOT2D идет через post запросы. сдесь сие реализовано? я никак не могу дать с ними толку. ответ от сервера приходит что мол: 200 т.е. все ОК. а они утверждают что ничего к ним не приходило.... не сталкивались?
Нет, я передачу реализовал с помощью внешнего bat-файла, который запускается обработкой по окончания формирования файлов выгрузок:
В процедуре Сформировать: (И еще один момент: Возможно параметр __did оставлен без внимание, аон должен содержать "код дистрибьютора в SPOT 2D")
Все сделано по их инструкции. запустилось с пол-пинка, и сейчас работает в автоматическом режиме.
В процедуре Сформировать: (И еще один момент: Возможно параметр __did оставлен без внимание, аон должен содержать "код дистрибьютора в SPOT 2D")
=== Начало ===
// Процедуры формирования файлов выгрузок
.
.
.
Если ФлагОтладки = 0 Тогда
КомандаСистемы("SendAllWithSSL.bat"); // Команда запуска передачи файлов
КонецЕсли;
=== Конец ===
Содержание файла SendAllWithSSL.bat // изменено слегка
=== Начало ===
@Echo off
FOR %%I IN (Send\*.*) DO call SendFileWithSSL.bat %%~dI %%~pI %%~nI protocol.log
=== Конец ===
Содержание файла SendFileWithSSL.bat // изменено слегка
=== Начало ===
@Echo off
set Path2cvs=%1%2
set FileType=%3
set LogFile=%4
echo Date %date% Time %time% >> protocol.log
echo. Send %Path2cvs%%FileType%.cvs ... >> %LogFile%
curlssl.exe -v -F "ufile=@%Path2cvs%%FileType%.csv;type=text/plain;filename=%FileType%" -F "__login=ْْْْXXXXXXXX" -F "__password=XXXXXXXX" -F "__did=XXXXXXXX" http://XXXXXXXX.spot2d.com/dinfo/auto-upload.phtml >> %LogFile%
=== Конец ===
ПоказатьВсе сделано по их инструкции. запустилось с пол-пинка, и сейчас работает в автоматическом режиме.
Вакансии
Ведущий разработчик 1С / Team lead отдела разработки 1С
Москва
зарплата от 300 000 руб. до 300 000 руб.
Полный день
Москва
зарплата от 300 000 руб. до 300 000 руб.
Полный день