Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> POST запрос API из 1с77 , POST запрос API из 1с77, конфигурация не важна          
whtblck Подменю пользователя
сообщение 17.11.16, 16:40
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 21
Спасибо сказали: 20 раз
Рейтинг: 0

Добрый день.
Мало что понимаю в 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/1.1 500 Internal Server Error
в файле-ответе:
{"Message":"An error has occurred."}

 ! 

Правила: 5,9
 

что я делаю не так?

Сообщение отредактировал logist - 17.11.16, 16:44

Мичман Харитонов Подменю пользователя
сообщение 17.11.16, 18:06
Сообщение #2

Завсегдатай
****
Группа: Пользователи
Сообщений: 164
Из: м. Кам'янське
Спасибо сказали: 26 раз
Рейтинг: 0

А протокол используется http или https?
Если второе, то у v7plus.dll с ним возможны проблемы...

logist Подменю пользователя
сообщение 17.11.16, 19:20
Сообщение #3

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(whtblck @ 17.11.16, 17:40) *
HTTP/1.1 500 Internal Server Error
в файле-ответе:
{"Message":"An error has occurred."}

Это говорит о том, что ошибка выполнения произошла на самом сервере, вероятно вы передаете ему что-то чего он не ждет, не тот формат данных, или не те данные.


Signature
Личные бесплатные консультации не даю, для этого есть форум!

whtblck Подменю пользователя
сообщение 18.11.16, 0:06
Сообщение #4

Общительный
**
Группа: Пользователи
Сообщений: 21
Спасибо сказали: 20 раз
Рейтинг: 0

Мичман Харитонов @ Вчера, 18:06 * ,
http

logist @ Вчера, 19:20 * ,
я уже знаю, что такое 500-я ошибка.
но онлайн отладчиком POST-запросов этот же запрос отрабатывает

nik389 Подменю пользователя
сообщение 18.11.16, 16:12
Сообщение #5

Завсегдатай
****
Группа: Пользователи
Сообщений: 153
Из: Украина
Спасибо сказали: 37 раз
Рейтинг: 34

попробуйте curl, для ваших целей самое то..

Sharzem Подменю пользователя
сообщение 18.11.16, 20:34
Сообщение #6

Оратор
Иконка группы
Группа: Местный
Сообщений: 298
Спасибо сказали: 98 раз
Рейтинг: 99.1

Цитата(Мичман Харитонов @ 17.11.16, 18:06) *
А протокол используется http или https?
Если второе, то у v7plus.dll с ним возможны проблемы...

Согласен на все 100 %, но проблемы будут во всех случаях. Не буду останавливаться конкретно на проблемах при работе с этой "штучкой", но основная это обрезка данных (на просторах валом инфы о проблемах).
Могу предложить такой вариант:
Функция ОтправитьЗапросПост(СекретныйКлюч,прИмяФайла)//Имя файла - "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;
    КонецПопытки;
КонецФункции // ОтправитьЗапросПост



Цитата(nik389 @ 18.11.16, 16:12) *
попробуйте curl, для ваших целей самое то..

Поделитесь пожалуйста опытом его использования, для меня как-то сложно...). Я видимо чего-то не понял из описаний 19000000.gif
Как можно с помощью курл реализовать - приведите пример, конкретно к задаче этой темы ?


Signature
То, что для одного человека константа, для другого - переменная. (Алан.Дж.Перлис)

Спасибо сказали: ysobol,

whtblck Подменю пользователя
сообщение 20.11.16, 0:13
Сообщение #7

Общительный
**
Группа: Пользователи
Сообщений: 21
Спасибо сказали: 20 раз
Рейтинг: 0

Sharzem @ 18.11.16, 20:34 * ,
попробую, с понедельника.
Выяснилась еще проблема на стороне сервера, жду ответа от них

nik389 Подменю пользователя
сообщение 20.11.16, 22:00
Сообщение #8

Завсегдатай
****
Группа: Пользователи
Сообщений: 153
Из: Украина
Спасибо сказали: 37 раз
Рейтинг: 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

Спасибо сказали: Sharzem,

Sharzem Подменю пользователя
сообщение 21.11.16, 0:54
Сообщение #9

Оратор
Иконка группы
Группа: Местный
Сообщений: 298
Спасибо сказали: 98 раз
Рейтинг: 99.1

nik389 @ Сегодня, 22:00 * ,
Прикольно, спасибо.

Для такого обмена с помощью json в UTF-8, файлик скорее всего нужно будет писать без BOM.

В моем примере входной файл уже без BOM.
Я сначала формирую файл с помощью FSO в 1251, а потом во время конвертации задаю ему параметр: oADOStream.Position=3; просто в примере этот момент упущен.
ЗЫ: UTF-8 без BOM это кодировка CESU-8. О, так вернее 31000000.gif


Signature
То, что для одного человека константа, для другого - переменная. (Алан.Дж.Перлис)

whtblck Подменю пользователя
сообщение 25.11.16, 15:53
Сообщение #10

Общительный
**
Группа: Пользователи
Сообщений: 21
Спасибо сказали: 20 раз
Рейтинг: 0

Господа, всем спасибо, заработало

Vofka Подменю пользователя
сообщение 25.11.16, 16:16
Сообщение #11

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

whtblck, а с чем была связана проблема (почему не работало)?

whtblck Подменю пользователя
сообщение 28.11.16, 22:52
Сообщение #12

Общительный
**
Группа: Пользователи
Сообщений: 21
Спасибо сказали: 20 раз
Рейтинг: 0

whtblck @ 25.11.16, 15:53 * ,
Проблема была связана с непониманием "физики процесса". Я в самом начале сказал "Мало что понимаю в API, и с ним связанном".
И не говорил, что оно не работает smile.gif
Помогла вот эта ветка:
[необходимо зарегистрироваться для просмотра ссылки]

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 23:22
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!