Добрый день.
Мало что понимаю в API, и с ним связанном.
Нужно из 1с77 отправить запрос по API методом POST.
Отправить нужно запрос в формате json сюда:
lc.epicentrk.com.ua/api/292/{секретный_ключ}/INVOICE_DATA
делаю:
Если ЗагрузитьВнешнююКомпоненту("v7plus.dll") = 0 Тогда
Сообщить("не удалось найти компоненту v7plus.dll", "!!!");
Возврат;
КонецЕсли;
Попытка
Соединение = СоздатьОбъект("Addin.V7HttpReader");
Исключение
Сообщить("Ошибка подключения! (" + ОписаниеОшибки() + ")", "!!!");
КонецПопытки;
Попытка
СтрокаСоединения = "lc.epicentrk.com.ua/api/292/"+СекретныйКлюч+"/INVOICE_DATA";
ФайлJSON = "d:\1cv77bd\Temp\test.json";
ФайлОтвет = "d:\1cv77bd\Temp\test_err.json";
Соединение.УстановитьЗаголовокЗапроса("type", "POST");
Соединение.УстановитьЗаголовокЗапроса("data", "objects");
Соединение.УстановитьЗаголовокЗапроса("contentType", "application/json; charset=utf-8");
Соединение.УстановитьЗаголовокЗапроса("dataType", "json");
Соединение.ОтправитьДляОбработки(СокрЛП(СтрокаСоединения), ФайлJSON ,1,ФайлОтвет,1);
Исключение
Сообщить("Ошибка: " + Соединение.СтрокаСостоянияОтвета);
КонецПопытки
! | http://pro1c.org.ua/index.php?act=announce&id=2: 5,9 |
А протокол используется http или https?
Если второе, то у v7plus.dll с ним возможны проблемы...
Мичман Харитонов @ Вчера, 18:06
,
http
logist @ Вчера, 19:20
,
я уже знаю, что такое 500-я ошибка.
но онлайн отладчиком POST-запросов этот же запрос отрабатывает
попробуйте curl, для ваших целей самое то..
Функция ОтправитьЗапросПост(СекретныйКлюч,прИмяФайла)//Имя файла - "d:\1cv77bd\Temp\test.json"
лпСайт="https://lc.epicentrk.com.ua/api/292/"+СекретныйКлюч+"/INVOICE_DATA";//"https" должно быть, я так считаю
oADOStream = СоздатьОбъект("ADODB.Stream");
oADOStream.Type = 1; //Binary
oADOStream.Open();
oADOStream.LoadFromFile(прИмяФайла);
WinHttp = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Option(2,"utf-8");
//Отключаем проверку сертификата
Скрипт= СоздатьОбъект("MSScriptControl.ScriptControl");
Скрипт.language="javascript";
Скрипт.AddObject("WinHttp",WinHttp);
Скрипт.Eval("WinHttp.Option(4)=13056");//intSslErrorIgnoreFlags
Скрипт.Eval("WinHttp.Option(6)=true");//blnEnableRedirects
Скрипт.Eval("WinHttp.Option(12)=true");//blnEnableHttpsToHttpRedirects
//Сам запрос
WinHttp.Open("POST", лпСайт, 0);
WinHttp.SetRequestHeader("Accept-Language", "ru");// думаю что "ru"...
WinHttp.SetRequestHeader("Accept-Charset", "utf-8");
WinHttp.SetRequestHeader("Content-Language", "ru");
WinHttp.SetRequestHeader("Content-Charset", "utf-8");
WinHttp.SetRequestHeader("Content-type", "application/octet-stream; charset=utf-8;");//Другая сторона должна понять входные данные см.oADOStream, а вот если вдруг не поймет (в чем у меня есть сомнения...), тогда придется указать явное без указания параметров выше:
//WinHttp.setRequestHeader("Accept", "text/json");
//WinHttp.setRequestHeader("Content-type", "text/json");
//при явном строка ниже не нужна:
WinHttp.SetRequestHeader("Content-length", "" + oADOStream.Size);
Попытка
WinHttp.Send(oADOStream);
//При явном - строку запроса нужно получить из файла, тогда получится:
// WinHttp.Send(строка запроса из файла);
лпОтвет = WinHttp.ResponseText();
Сообщить(лпОтвет)
Возврат 1;
Исключение
Сообщить("Ошибка: "+ОписаниеОшибки(),"!");
Возврат 0;
КонецПопытки;
КонецФункции // ОтправитьЗапросПост
Sharzem @ 18.11.16, 20:34
,
попробую, с понедельника.
Выяснилась еще проблема на стороне сервера, жду ответа от них
Sharzem @ 18.11.16, 20:34
,
в качестве примера (когда-то делал отправку смс):
отправка файла методом POST через curl:
для удобства создаем файл с параметрами param.ini:
url = "sms-fly.com/api/api.php"
user = "380672223344:password"
header = "Content-Type: text/xml", "Accept: text/xml""
-d @send.xml //файл для отправки
-o Log\log.txt //сюда пишем ответ сервера
стартуем:
curl.exe -K param.ini
nik389 @ Сегодня, 22:00
,
Прикольно, спасибо.
Для такого обмена с помощью json в UTF-8, файлик скорее всего нужно будет писать без BOM.
В моем примере входной файл уже без BOM.
Я сначала формирую файл с помощью FSO в 1251, а потом во время конвертации задаю ему параметр: oADOStream.Position=3; просто в примере этот момент упущен.
ЗЫ: UTF-8 без BOM это кодировка CESU-8. О, так вернее
Господа, всем спасибо, заработало
whtblck, а с чем была связана проблема (почему не работало)?
whtblck @ 25.11.16, 15:53
,
Проблема была связана с непониманием "физики процесса". Я в самом начале сказал "Мало что понимаю в API, и с ним связанном".
И не говорил, что оно не работает
Помогла вот эта ветка:
http://pro1c.org.ua/redirect.php?http://forum.infostart.ru/forum9/topic161772/
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua