Прошу помочь с отправкой файла (jpg) на сервер через POST запрос за вознаграждение (в рублях на карту)
в описании API такой хелпhttps://yadi.sk/i/moOyJ18I3Rx6tH
дополнительно POST должен быть зашифрован
простой тест отправляю нормально (аргумент msg)
картинку никак отправить не могу
в описании API такой хелп
дополнительно POST должен быть зашифрован
простой тест отправляю нормально (аргумент msg)
картинку никак отправить не могу
Адрес = "api/contact_message_post/16235613/";
POST = "msg=text";
Message = Nonce + Аккаунт.Key + "/" + Адрес + POST;
Signature = ВРег(ЗашифроватьSHA256(Message, Аккаунт.Secret));
HTTPЗапрос = Новый HTTPЗапрос;
HTTPЗапрос.АдресРесурса = Адрес;
HTTPЗапрос.Заголовки.Вставить("Accept-Language", "ru-RU");
HTTPЗапрос.Заголовки.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393");
HTTPЗапрос.Заголовки.Вставить("Accept", "text/html, application/xhtml+xml, image/jxr, */*");
HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
HTTPЗапрос.Заголовки.Вставить("Apiauth-Key", Аккаунт.Key);
HTTPЗапрос.Заголовки.Вставить("Apiauth-Nonce", Nonce);
HTTPЗапрос.Заголовки.Вставить("Apiauth-Signature", Signature);
HTTPЗапрос.УстановитьТелоИзСтроки(POST);
Соединение = Новый HTTPСоединение(Хост, 443,,, Прокси, 11, ssl);
ОтветHTTP = Соединение.ОтправитьДляОбработки(HTTPЗапрос);
ПоказатьПо теме из базы знаний
- Как создать в 7.7 XML, проверить по схемам (XSD, XML) от заказчика и отправить на вебсервер методом Post
- Пайплайны Jenkins - программирование и настройка. Загружаемые модули. Цикл "Многопоточный CI для 1С", часть 5
- Тестирование API 1C Postman
- Приемы быстрой работы в EDT/Git
- Настройка взаимодействия телеграм бота с 1С через Webhook
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
пробовал так (2 варианта) не работает :(
POST = "document=chek.jpg";// + Base64Строка(ПолучитьИзВременногоХранилища(АдресХран));
Message = Nonce + Аккаунт.Key + "/" + Адрес + POST;
Signature = ВРег(МодульСервер.ЗашифроватьSHA256(Message, Аккаунт.Secret));
Boundary = "----" + СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
ФайлОтправки = ПолучитьИмяВременногоФайла("txt");
ЗаписьТекста = Новый ЗаписьТекста(ФайлОтправки);
ЗаписьТекста.ЗаписатьСтроку(Boundary);
ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""document""; filename=chek.jpg");
ЗаписьТекста.ЗаписатьСтроку("Content-Type: image/jpeg");
ЗаписьТекста.ЗаписатьСтроку("");
ЗаписьТекста.Записать(Base64Строка(ПолучитьИзВременногоХранилища(АдресХран)));
ЗаписьТекста.ЗаписатьСтроку("");
ЗаписьТекста.ЗаписатьСтроку(Boundary);
ЗаписьТекста.Закрыть();
HTTPЗапрос = Новый HTTPЗапрос;
HTTPЗапрос.АдресРесурса = Адрес;
HTTPЗапрос.Заголовки.Вставить("Accept-Language", "ru-RU");
HTTPЗапрос.Заголовки.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393");
HTTPЗапрос.Заголовки.Вставить("Accept", "text/html, application/xhtml+xml, image/jxr, */*");
HTTPЗапрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + boundary + "");
HTTPЗапрос.Заголовки.Вставить("Apiauth-Key", Аккаунт.Key);
HTTPЗапрос.Заголовки.Вставить("Apiauth-Nonce", Nonce);
HTTPЗапрос.Заголовки.Вставить("Apiauth-Signature", Signature);
//HTTPЗапрос.УстановитьТелоИзСтроки(POST);
HTTPЗапрос.УстановитьИмяФайлаТела(ФайлОтправки);
ssl = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows(), Новый СертификатыУдостоверяющихЦентровWindows());
Соединение = Новый HTTPСоединение(Хост, 443,,,, 15, ssl);
Показать
Вам нужно сделать multipart сообщение.
Вот тут детально описано:
https://wonderland.v8.1c.ru/blog/novye-instrumenty-dlya-raboty-s-dvoichnymi-dannymi-obespechivayut-kak-posledovatelnyy-dostup-k-danny/
Вот тут детально описано:
сделал так, приходит ответ что не верная подпись. подозреваю что переменную POST передаю на подпись не ту
POST = "document=chek.jpg";
Message = Nonce + Аккаунт.Key + "/" + Адрес + POST;
Signature = ВРег(МодульСервер.ЗашифроватьSHA256(Message, Аккаунт.Secret));
Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
ПотокТело = Новый ПотокВПамяти();
ЗаписьДанных = Новый ЗаписьДанных(ПотокТело);
ЗаписьДанных.ЗаписатьСтроку("==" + Boundary);
ЗаписьДанных.Записать(СоздатьСообщение_Изображение("document", "chek.jpg", ПолучитьИзВременногоХранилища(АдресХран)));
ЗаписьДанных.ЗаписатьСтроку("==" + Boundary + "==");
ЗаписьДанных.Закрыть();
ДвоичныеДанныеТело = ПотокТело.ЗакрытьИПолучитьДвоичныеДанные();
HTTPЗапрос = Новый HTTPЗапрос;
HTTPЗапрос.АдресРесурса = Адрес;
HTTPЗапрос.Заголовки.Вставить("Accept-Language", "ru-RU");
HTTPЗапрос.Заголовки.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393");
HTTPЗапрос.Заголовки.Вставить("Accept", "text/html, application/xhtml+xml, image/jxr, */*");
HTTPЗапрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + boundary + "");
HTTPЗапрос.Заголовки.Вставить("Apiauth-Key", Аккаунт.Key);
HTTPЗапрос.Заголовки.Вставить("Apiauth-Nonce", Nonce);
HTTPЗапрос.Заголовки.Вставить("Apiauth-Signature", Signature);
HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(ДвоичныеДанныеТело);
Соединение = Новый HTTPСоединение(Хост, 443,,,, 15, Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows(), Новый СертификатыУдостоверяющихЦентровWindows()));
ОтветHTTP = Соединение.ОтправитьДляОбработки(HTTPЗапрос);
Ответ = ОтветHTTP.ПолучитьТелоКакСтроку();
Функция СоздатьСообщение_Изображение(ИмяСообщения, ИмяФайла, ДвоичныеДанные)
Поток = Новый ПотокВПамяти();
ЗаписьДанных = Новый ЗаписьДанных(Поток);
ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=" + ИмяСообщения + "; filename=" + ИмяФайла);
ЗаписьДанных.ЗаписатьСтроку("Content-Type: image/jpeg");
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.Записать(ДвоичныеДанные);
ЗаписьДанных.Закрыть();
Возврат Поток.ЗакрытьИПолучитьДвоичныеДанные();
КонецФункции
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот