Отправка СМС через ПщШЗ 4 POST запросом из 1С
Добрый день!
Возникла задача рассылать СМС через voip шлюз GoIP 4.
Можно послать СМС, сделав GET или POST запрос к веб-сервису, который крутится на GoIP 4,
как написано вот в этой статьеhttps://habr.com/ru/company/arttel/blog/395947/
С GET запроса получается. т.к. там несложно. СМС уходят.
Наподобие:
"http://192.168.1.190/default/en_US/send.html?u=admin&p=admin&l=1&n=89991234567&m=test"
В 1С примерно так:
СерверЗапроса = "192.168.1.190";
АдресРесурса = "default/en_US/send.html";
ПараметрыЗапроса = "?u=admin&p=admin&l=1&n=89991234567&m=test";
ТекстЗапроса = АдресРесурса + ПараметрыЗапроса;
СоединениеССервером = Новый HTTPСоединение(СерверЗапроса,,,,,);
ИмяВыходногоФайла = ПолучитьИмяВременногоФайла();
СоединениеССервером.Получить(ТекстЗапроса, ИмяВыходногоФайла);
Но вот как выполнить из 1С POST запрос?
Я просто в Веб-программировании вообще не спец.
В той статье приведен пример на языке Perl
use utf8;
use Mojo::UserAgent;
my $ua = Mojo::UserAgent->new;
$ua->post('http://admin:admin@192.168.1.190/default/en_US/sms_info.html?type=sms'
=> {Accept => '*/*'}
=> form => {
line => '1',
smskey => '57867a25',
action => 'SMS',
telnum => '89991234567',
smscontent => 'Привет!',
send => 'Send'
});
Как этот запрос реализовать в 1С?
Причем у нас версия еще 8.1, то есть доступен только объект HTTPСоединение и его метод ОтправитьДляОбработки().
Собрав разные примеры из Инета, пока дошел до следующего этапа (внизу).
Там вопросы и уточнения я попутно в комментариях написал.
Я чувствую, что запрос этот в принципе несложный, но не разбираюсь в этом вопросе вообще.
В каком формате формировать текст запроса?
Подскажите, пожалуйста. Если возможно, лучше код, как формируется этот запрос.
СерверЗапроса = "192.168.1.190";
АдресРесурса = "default/en_US/sms_info.html";
ПрефиксРесурса = "http://admin:admin@";
ПостфиксРесурса = "?type=sms";
СоединениеССервером = Новый HTTPСоединение(СерверЗапроса,,,,,);
ФайлЗапроса = ПолучитьИмяВременногоФайла();
ТекстовыйФайл = Новый ТекстовыйДокумент;
// Формирование текстового файла с POST-запросом.
// В каком виде/формате его формировать?
// Просто несколько строк или как?
// "http://admin:admin@192.168.1.190 default/en_US/sms_info.html?type=sms"
// Это нужная строка в самом запросе или это просто передается в адрес ресурса в методе ОтправитьДляОбработки()?
// Адрес ресурса включает в себя "?type=sms" или нет?
ТекстовыйФайл.УстановитьТекст(ПрефиксРесурса + СерверЗапроса + "/" + АдресРесурса + ПостфиксРесурса);
// => {Accept => '*/*'} ???????? Что это? Часть Заголовка?
ТекстовыйФайл.УстановитьТекст("&line=" + "1");
ТекстовыйФайл.УстановитьТекст("&smskey=" + "57867a25");
ТекстовыйФайл.УстановитьТекст("&action=" + "SMS");
ТекстовыйФайл.УстановитьТекст("&telnum=" + "89991234567");
ТекстовыйФайл.УстановитьТекст("&smscontent=" + "TEST");
ТекстовыйФайл.УстановитьТекст("&send=" + "Send");
ТекстовыйФайл.Записать(ФайлЗапроса, КодировкаТекста.UTF8);
ФайлРезультата = ПолучитьИмяВременногоФайла();
СтруктФормы = Новый Структура;
ЗаголовокHTTP = Новый Соответствие();
// => {Accept => '*/*'} - Вроде это из заголовка, что допустимы любые типы?
ЗаголовокHTTP.Вставить("Accept", "*/*");
СоединениеССервером.ОтправитьДляОбработки(ФайлЗапроса, АдресРесурса, ФайлРезультата, ЗаголовокHTTP);
Возникла задача рассылать СМС через voip шлюз GoIP 4.
Можно послать СМС, сделав GET или POST запрос к веб-сервису, который крутится на GoIP 4,
как написано вот в этой статье
С GET запроса получается. т.к. там несложно. СМС уходят.
Наподобие:
"http://192.168.1.190/default/en_US/send.html?u=admin&p=admin&l=1&n=89991234567&m=test"
В 1С примерно так:
СерверЗапроса = "192.168.1.190";
АдресРесурса = "default/en_US/send.html";
ПараметрыЗапроса = "?u=admin&p=admin&l=1&n=89991234567&m=test";
ТекстЗапроса = АдресРесурса + ПараметрыЗапроса;
СоединениеССервером = Новый HTTPСоединение(СерверЗапроса,,,,,);
ИмяВыходногоФайла = ПолучитьИмяВременногоФайла();
СоединениеССервером.Получить(ТекстЗапроса, ИмяВыходногоФайла);
Но вот как выполнить из 1С POST запрос?
Я просто в Веб-программировании вообще не спец.
В той статье приведен пример на языке Perl
use utf8;
use Mojo::UserAgent;
my $ua = Mojo::UserAgent->new;
$ua->post('http://admin:admin@192.168.1.190/default/en_US/sms_info.html?type=sms'
=> {Accept => '*/*'}
=> form => {
line => '1',
smskey => '57867a25',
action => 'SMS',
telnum => '89991234567',
smscontent => 'Привет!',
send => 'Send'
});
Как этот запрос реализовать в 1С?
Причем у нас версия еще 8.1, то есть доступен только объект HTTPСоединение и его метод ОтправитьДляОбработки().
Собрав разные примеры из Инета, пока дошел до следующего этапа (внизу).
Там вопросы и уточнения я попутно в комментариях написал.
Я чувствую, что запрос этот в принципе несложный, но не разбираюсь в этом вопросе вообще.
В каком формате формировать текст запроса?
Подскажите, пожалуйста. Если возможно, лучше код, как формируется этот запрос.
СерверЗапроса = "192.168.1.190";
АдресРесурса = "default/en_US/sms_info.html";
ПрефиксРесурса = "http://admin:admin@";
ПостфиксРесурса = "?type=sms";
СоединениеССервером = Новый HTTPСоединение(СерверЗапроса,,,,,);
ФайлЗапроса = ПолучитьИмяВременногоФайла();
ТекстовыйФайл = Новый ТекстовыйДокумент;
// Формирование текстового файла с POST-запросом.
// В каком виде/формате его формировать?
// Просто несколько строк или как?
// "http://admin:admin@192.168.1.190 default/en_US/sms_info.html?type=sms"
// Это нужная строка в самом запросе или это просто передается в адрес ресурса в методе ОтправитьДляОбработки()?
// Адрес ресурса включает в себя "?type=sms" или нет?
ТекстовыйФайл.УстановитьТекст(ПрефиксРесурса + СерверЗапроса + "/" + АдресРесурса + ПостфиксРесурса);
// => {Accept => '*/*'} ???????? Что это? Часть Заголовка?
ТекстовыйФайл.УстановитьТекст("&line=" + "1");
ТекстовыйФайл.УстановитьТекст("&smskey=" + "57867a25");
ТекстовыйФайл.УстановитьТекст("&action=" + "SMS");
ТекстовыйФайл.УстановитьТекст("&telnum=" + "89991234567");
ТекстовыйФайл.УстановитьТекст("&smscontent=" + "TEST");
ТекстовыйФайл.УстановитьТекст("&send=" + "Send");
ТекстовыйФайл.Записать(ФайлЗапроса, КодировкаТекста.UTF8);
ФайлРезультата = ПолучитьИмяВременногоФайла();
СтруктФормы = Новый Структура;
ЗаголовокHTTP = Новый Соответствие();
// => {Accept => '*/*'} - Вроде это из заголовка, что допустимы любые типы?
ЗаголовокHTTP.Вставить("Accept", "*/*");
СоединениеССервером.ОтправитьДляОбработки(ФайлЗапроса, АдресРесурса, ФайлРезультата, ЗаголовокHTTP);
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
post в вашем случае есть смысл использовать, если хотите запулить прям сразу одним пакетом пачку сообщений. Могу скинуть чуть позже пример post-запроса. Но у меня нет уверенности, что он подойдёт к 8.1, так как там работа с объектом ЗаписьJSON
Несколько сообщений и предполагается оправлять сразу.
ЗаписьJSON в 8.1 нет к сожалению.
Мне бы вообще понять - в каком формате создавать этот запрос.
В статье на основе которой хочу сделать отправку, приведен пример на Перле - если взять прямо в таком виде - оно сработает?
например записать в текстовый файл строки
http://admin:admin@192.168.1.190/default/en_US/sms_info.html?type=sms '
=> {Accept => '*/*'}
=> form => {
line => '1',
smskey => '57867a25',
action => 'SMS',
telnum => '89991234567',
smscontent => 'Привет!',
send => 'Send'
}
Думаю что тут запрос адаптирован именно под Перл.
ЗаписьJSON в 8.1 нет к сожалению.
Мне бы вообще понять - в каком формате создавать этот запрос.
В статье на основе которой хочу сделать отправку, приведен пример на Перле - если взять прямо в таком виде - оно сработает?
например записать в текстовый файл строки
=> {Accept => '*/*'}
=> form => {
line => '1',
smskey => '57867a25',
action => 'SMS',
telnum => '89991234567',
smscontent => 'Привет!',
send => 'Send'
}
Думаю что тут запрос адаптирован именно под Перл.
Несколько сообщений и предполагается отправлять. Потом узнавать статус отправки и отправлять повторно в случае неудачи.
В версии 8.1 нет объекта ЗаписьJSON, только HTTPСоединение и его метод ОтправитьДляОбработки.
Но мне бы просто правильный формат данного запроса узнать.
Где там заголовки, где сам запрос, как описывать заполнение формы и ее поля. Там реально просто форма программно заполняется на страничке вроде как.
В текстовый файл корректный запрос запишу и отправлю через ОтправитьДляОбработки .
Если сформирую построчно как в примере на Перле приводится, он же не будет корректным, скорее всего?
Это же именно синтаксис Перла, а не вообще POST запросов, насколько я понял?
В версии 8.1 нет объекта ЗаписьJSON, только HTTPСоединение и его метод ОтправитьДляОбработки.
Но мне бы просто правильный формат данного запроса узнать.
Где там заголовки, где сам запрос, как описывать заполнение формы и ее поля. Там реально просто форма программно заполняется на страничке вроде как.
В текстовый файл корректный запрос запишу и отправлю через ОтправитьДляОбработки .
Если сформирую построчно как в примере на Перле приводится, он же не будет корректным, скорее всего?
Это же именно синтаксис Перла, а не вообще POST запросов, насколько я понял?
Процедура Отправить(СтруктураПараметров) Экспорт
HTTPСоединение = Новый HTTPСоединение("192.168.1.190");
HTTPЗапрос = Новый HTTPЗапрос("/default/en_US/sms_info.html?type=sms");
HTTPЗапрос.Заголовки.Вставить("Accept", "*/*");
ТелоЗапроса = "";
ТелоЗапроса = СформироватьТелоЗапроса(СтруктураПараметров);
HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();
КонецПроцедуры
Функция СформироватьТелоЗапроса(СтруктураПараметров)
ЗаписьJSON = Новый ЗаписьJSON;
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(, Символы.Таб);
ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON);
ЗаписьJSON.ЗаписатьНачалоОбъекта();
ЗаписьJSON.ЗаписатьИмяСвойства("form")
ЗаписьJSON.ЗаписатьНачалоМассива();
ЗаписьJSON.ЗаписатьНачалоОбъекта();
//либо так (подробно)
ЗаписьJSON.ЗаписатьИмяСвойства("line");
ЗаписьJSON.ЗаписатьЗначение(СтруктураПараметров.line);
ЗаписьJSON.ЗаписатьИмяСвойства("smskey");
ЗаписьJSON.ЗаписатьЗначение(СтруктураПараметров.smskey);
ЗаписьJSON.ЗаписатьИмяСвойства("action");
ЗаписьJSON.ЗаписатьЗначение(СтруктураПараметров.action);
ЗаписьJSON.ЗаписатьИмяСвойства("telnum");
ЗаписьJSON.ЗаписатьЗначение(СтруктураПараметров.telnum);
ЗаписьJSON.ЗаписатьИмяСвойства("smscontent");
ЗаписьJSON.ЗаписатьЗначение(СтруктураПараметров.smscontent);
ЗаписьJSON.ЗаписатьИмяСвойства("line");
ЗаписьJSON.ЗаписатьЗначение(СтруктураПараметров.send);
//либо так :)
//Для Каждого ЭлементСтруктуры Из СтруктураПараметров Цикл
// ЗаписьJSON.ЗаписатьИмяСвойства(ЭлементСтруктуры.Ключ);
// ЗаписьJSON.ЗаписатьЗначение(ЭлементСтруктуры.Значение);
//КонецЦикла;
ЗаписьJSON.ЗаписатьКонецОбъекта();
ЗаписьJSON.ЗаписатьКонецМассива();
ЗаписьJSON.ЗаписатьКонецОбъекта();
Возврат ЗаписьJSON.Закрыть();
Показать
Авторизацию (логин, пароль) в параметрах Новый HTTPСоединение("192.168.1.190") нужно указать?
у них там она прямо в запросе
http://admin:admin@192.168.1.190/default/en_US/sms_info.html?type=sms
А Form - это специальный тэг для описания полей формы? И он в теле запроса должен присутствовать, как и поля?
А то мне тут подсказывают другие люди, что это вроде как тоже заголовок, и поля далее (line, smskey,...) - тоже заголовки.
Наподобие Accept => '*/*'
у них там она прямо в запросе
А Form - это специальный тэг для описания полей формы? И он в теле запроса должен присутствовать, как и поля?
А то мне тут подсказывают другие люди, что это вроде как тоже заголовок, и поля далее (line, smskey,...) - тоже заголовки.
Наподобие Accept => '*/*'
Пробую через версию 1С 8.3, чтоб хотя бы найти правильный запрос для отправки на сервер.
Процедура КнопкаВыполнитьНажатие(Кнопка)
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("line", "1");
СтруктураПараметров.Вставить("smskey", "57867");
СтруктураПараметров.Вставить("action", "SMS");
СтруктураПараметров.Вставить("telnum", "89991234567");
СтруктураПараметров.Вставить("smscontent", "TEST");
СтруктураПараметров.Вставить("send", "Send");
Отправить(СтруктураПараметров);
КонецПроцедуры
Функция СформироватьТелоЗапроса(СтруктураПараметров)
ЗаписьJSON = Новый ЗаписьJSON;
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(, Символы.Таб);
ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON);
ЗаписьJSON.ЗаписатьНачалоОбъекта();
ЗаписьJSON.ЗаписатьИмяСвойства("form");
ЗаписьJSON.ЗаписатьНачалоМассива();
ЗаписьJSON.ЗаписатьНачалоОбъекта();
//либо так (подробно)
ЗаписьJSON.ЗаписатьИмяСвойства("line");
ЗаписьJSON.ЗаписатьЗначение(СтруктураПараметров.line);
ЗаписьJSON.ЗаписатьИмяСвойства("smskey");
ЗаписьJSON.ЗаписатьЗначение(СтруктураПараметров.smskey);
ЗаписьJSON.ЗаписатьИмяСвойства("action");
ЗаписьJSON.ЗаписатьЗначение(СтруктураПараметров.action);
ЗаписьJSON.ЗаписатьИмяСвойства("telnum");
ЗаписьJSON.ЗаписатьЗначение(СтруктураПараметров.telnum);
ЗаписьJSON.ЗаписатьИмяСвойства("smscontent");
ЗаписьJSON.ЗаписатьЗначение(СтруктураПараметров.smscontent);
ЗаписьJSON.ЗаписатьИмяСвойства("send");
ЗаписьJSON.ЗаписатьЗначение(СтруктураПараметров.send);
ЗаписьJSON.ЗаписатьКонецОбъекта();
ЗаписьJSON.ЗаписатьКонецМассива();
ЗаписьJSON.ЗаписатьКонецОбъекта();
Возврат ЗаписьJSON.Закрыть();
КонецФункции
Процедура Отправить(СтруктураПараметров) Экспорт
HTTPСоединение = Новый HTTPСоединение("192.168.1.190",, "admin", "admin");
HTTPЗапрос = Новый HTTPЗапрос("default/en_US/sms_info.html?type=sms");
HTTPЗапрос.Заголовки.Вставить("Accept", "*/*");
ТелоЗапроса = "";
ТелоЗапроса = СформироватьТелоЗапроса(СтруктураПараметров);
HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();
КонецПроцедуры
На строке Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); возникает ошибка выполнения
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(67)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки)
Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
по причине:
Ошибка работы с Интернет: Failure when receiving data from the peer
Что-то не так отправляется видимо.
Авторизация проходит норм.
Куда можно копать для поиска?
Переменная ТелоЗапроса такая
{
"form": [
{
"line": 3,
"smskey": 57867,
"action": "SMS",
"telnum": 89991234567,
"smscontent": "TEST",
"send": "Send"
}
]
}
Процедура КнопкаВыполнитьНажатие(Кнопка)
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("line", "1");
СтруктураПараметров.Вставить("smskey", "57867");
СтруктураПараметров.Вставить("action", "SMS");
СтруктураПараметров.Вставить("telnum", "89991234567");
СтруктураПараметров.Вставить("smscontent", "TEST");
СтруктураПараметров.Вставить("send", "Send");
Отправить(СтруктураПараметров);
КонецПроцедуры
Функция СформироватьТелоЗапроса(СтруктураПараметров)
ЗаписьJSON = Новый ЗаписьJSON;
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(, Символы.Таб);
ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON);
ЗаписьJSON.ЗаписатьНачалоОбъекта();
ЗаписьJSON.ЗаписатьИмяСвойства("form");
ЗаписьJSON.ЗаписатьНачалоМассива();
ЗаписьJSON.ЗаписатьНачалоОбъекта();
//либо так (подробно)
ЗаписьJSON.ЗаписатьИмяСвойства("line");
ЗаписьJSON.ЗаписатьЗначение(СтруктураПараметров.line);
ЗаписьJSON.ЗаписатьИмяСвойства("smskey");
ЗаписьJSON.ЗаписатьЗначение(СтруктураПараметров.smskey);
ЗаписьJSON.ЗаписатьИмяСвойства("action");
ЗаписьJSON.ЗаписатьЗначение(СтруктураПараметров.action);
ЗаписьJSON.ЗаписатьИмяСвойства("telnum");
ЗаписьJSON.ЗаписатьЗначение(СтруктураПараметров.telnum);
ЗаписьJSON.ЗаписатьИмяСвойства("smscontent");
ЗаписьJSON.ЗаписатьЗначение(СтруктураПараметров.smscontent);
ЗаписьJSON.ЗаписатьИмяСвойства("send");
ЗаписьJSON.ЗаписатьЗначение(СтруктураПараметров.send);
ЗаписьJSON.ЗаписатьКонецОбъекта();
ЗаписьJSON.ЗаписатьКонецМассива();
ЗаписьJSON.ЗаписатьКонецОбъекта();
Возврат ЗаписьJSON.Закрыть();
КонецФункции
Процедура Отправить(СтруктураПараметров) Экспорт
HTTPСоединение = Новый HTTPСоединение("192.168.1.190",, "admin", "admin");
HTTPЗапрос = Новый HTTPЗапрос("default/en_US/sms_info.html?type=sms");
HTTPЗапрос.Заголовки.Вставить("Accept", "*/*");
ТелоЗапроса = "";
ТелоЗапроса = СформироватьТелоЗапроса(СтруктураПараметров);
HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();
КонецПроцедуры
На строке Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); возникает ошибка выполнения
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(67)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки)
Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
по причине:
Ошибка работы с Интернет: Failure when receiving data from the peer
Что-то не так отправляется видимо.
Авторизация проходит норм.
Куда можно копать для поиска?
Переменная ТелоЗапроса такая
{
"form": [
{
"line": 3,
"smskey": 57867,
"action": "SMS",
"telnum": 89991234567,
"smscontent": "TEST",
"send": "Send"
}
]
}
Немного поменял ваш пример
Сейчас формирую так (это из 8.3)
Функция СформироватьТелоЗапроса(СтруктураПараметров)
ЗаписьJSON = Новый ЗаписьJSON;
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(, Символы.Таб);
ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON);
ЗаписьJSON.ЗаписатьНачалоОбъекта();
ЗаписьJSON.ЗаписатьИмяСвойства("form")
//ЗаписьJSON.ЗаписатьНачалоМассива(); // Это убрал
ЗаписьJSON.ЗаписатьНачалоОбъекта();
ЗаписьJSON.ЗаписатьИмяСвойства("line");
ЗаписьJSON.ЗаписатьЗначение(СтруктураПараметров.line);
ЗаписьJSON.ЗаписатьИмяСвойства("smskey");
ЗаписьJSON.ЗаписатьЗначение(СтруктураПараметров.smskey);
ЗаписьJSON.ЗаписатьИмяСвойства("action");
ЗаписьJSON.ЗаписатьЗначение(СтруктураПараметров.action);
ЗаписьJSON.ЗаписатьИмяСвойства("telnum");
ЗаписьJSON.ЗаписатьЗначение(СтруктураПараметров.telnum);
ЗаписьJSON.ЗаписатьИмяСвойства("smscontent");
ЗаписьJSON.ЗаписатьЗначение(СтруктураПараметров.smscontent);
ЗаписьJSON.ЗаписатьИмяСвойства("send");
ЗаписьJSON.ЗаписатьЗначение(СтруктураПараметров.send);
ЗаписьJSON.ЗаписатьКонецОбъекта();
//ЗаписьJSON.ЗаписатьКонецМассива(); // Это убрал
ЗаписьJSON.ЗаписатьКонецОбъекта();
файл выглядит примерно так
{
"form": {
"line": "1",
"smskey": "57867a25",
"action": "SMS",
"telnum": "89991234567",
"smscontent": "Привет",
"send": "Send"
}
В 1С ошибки теперь не возникает, отправка проходит молча,
Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
Ответ возвращает Код ошибки HTTP 200, то есть все ОК
Но СМС к сожалению не приходит ))
Что-то видимо еще ему надо.
Сейчас формирую так (это из 8.3)
Функция СформироватьТелоЗапроса(СтруктураПараметров)
ЗаписьJSON = Новый ЗаписьJSON;
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(, Символы.Таб);
ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON);
ЗаписьJSON.ЗаписатьНачалоОбъекта();
ЗаписьJSON.ЗаписатьИмяСвойства("form")
//ЗаписьJSON.ЗаписатьНачалоМассива(); // Это убрал
ЗаписьJSON.ЗаписатьНачалоОбъекта();
ЗаписьJSON.ЗаписатьИмяСвойства("line");
ЗаписьJSON.ЗаписатьЗначение(СтруктураПараметров.line);
ЗаписьJSON.ЗаписатьИмяСвойства("smskey");
ЗаписьJSON.ЗаписатьЗначение(СтруктураПараметров.smskey);
ЗаписьJSON.ЗаписатьИмяСвойства("action");
ЗаписьJSON.ЗаписатьЗначение(СтруктураПараметров.action);
ЗаписьJSON.ЗаписатьИмяСвойства("telnum");
ЗаписьJSON.ЗаписатьЗначение(СтруктураПараметров.telnum);
ЗаписьJSON.ЗаписатьИмяСвойства("smscontent");
ЗаписьJSON.ЗаписатьЗначение(СтруктураПараметров.smscontent);
ЗаписьJSON.ЗаписатьИмяСвойства("send");
ЗаписьJSON.ЗаписатьЗначение(СтруктураПараметров.send);
ЗаписьJSON.ЗаписатьКонецОбъекта();
//ЗаписьJSON.ЗаписатьКонецМассива(); // Это убрал
ЗаписьJSON.ЗаписатьКонецОбъекта();
файл выглядит примерно так
{
"form": {
"line": "1",
"smskey": "57867a25",
"action": "SMS",
"telnum": "89991234567",
"smscontent": "Привет",
"send": "Send"
}
В 1С ошибки теперь не возникает, отправка проходит молча,
Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
Ответ возвращает Код ошибки HTTP 200, то есть все ОК
Но СМС к сожалению не приходит ))
Что-то видимо еще ему надо.
В общем в итоге удалось запустить отправку пока из версий 8.2 и 8.3
Проанализировал какой запрос отправляется, если отправлять смс из Веб-интерфейса GoIP4
и взял в качестве примера отправку смс на Билайн из конфы CRM 2.0.
Там не совсем так, как я пытался выше в данной теме делать, но работает.
Но теперь это все надо будет адаптировать для версии 8.1. Пока даже не знаю с чего там начинать.
Само тело запроса, как оно выходит в Веб-консоли браузера Firefox
Метод
POST
URL
http://192.168.1.190/default/en_US/sms_info.html?type=sms
Строка запроса:
type=sms
Заголовки запроса:
Host: 192.168.1.190
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer:http://192.168.1.190/default/en_US/tools.html?type=sms
Content-Type: application/x-www-form-urlencoded
Content-Length: 79
Authorization: Basic YWRtaW46YWRtaW4=
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Тело запроса:
line1=1&smskey=5c650f9c&action=SMS&telnum=89991234567&smscon tent=test&send=Send
То есть немного по-другому там.
Проанализировал какой запрос отправляется, если отправлять смс из Веб-интерфейса GoIP4
и взял в качестве примера отправку смс на Билайн из конфы CRM 2.0.
Там не совсем так, как я пытался выше в данной теме делать, но работает.
Но теперь это все надо будет адаптировать для версии 8.1. Пока даже не знаю с чего там начинать.
Само тело запроса, как оно выходит в Веб-консоли браузера Firefox
Метод
POST
URL
Строка запроса:
type=sms
Заголовки запроса:
Host: 192.168.1.190
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer:
Content-Type: application/x-www-form-urlencoded
Content-Length: 79
Authorization: Basic YWRtaW46YWRtaW4=
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Тело запроса:
line1=1&smskey=5c650f9c&action=SMS&telnum=89991234567&smscon
То есть немного по-другому там.
Удалось все-таки запустить отправку смс, правда не совсем так, как предполагалось выше в этой теме.
Посмотрел в Веб-консоли браузера FireFox, какой запрос формируется, если делать его из Веб-интерфейса самого GoIP4.
Там было примерно такое:
Метод
POST
URL
http://192.168.1.190/default/en_US/sms_info.html?type=sms
Строка запроса:
type=sms
Заголовки запроса:
Host: 192.168.1.190
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer:http://192.168.1.190/default/en_US/tools.html?type=sms
Content-Type: application/x-www-form-urlencoded
Content-Length: 79
Authorization: Basic YWRtaW46YWRtaW4=
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Тело запроса:
line1=1&smskey=5c650f9c&action=SMS&telnum=89991234567&smscon tent=test&send=Send
Причем первый параметр оказывается можно в запросе писать и как "line" и как "lineНомерЛинии", например "line1"
тогда в первом случае для параметра указывается номер линии от 1 до 4, а во втором случае просто ставится 1 для отправки конкретно через эту линию.
Пока все работает в версиях 1С 8.2 и 8.3, делалось на базе примера отправки смс через Билайн в конфе CRM 2.0.
Надо теперь адаптировать для 8.1. А там нет объекта HTTPЗапрос, например.
Функция URLEncode(Строка) там находится в составе самой конфы CRM 2.0 и она кодирует символы с кодом старше 127 особым образом.
Посмотрел в Веб-консоли браузера FireFox, какой запрос формируется, если делать его из Веб-интерфейса самого GoIP4.
Там было примерно такое:
Метод
POST
URL
Строка запроса:
type=sms
Заголовки запроса:
Host: 192.168.1.190
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer:
Content-Type: application/x-www-form-urlencoded
Content-Length: 79
Authorization: Basic YWRtaW46YWRtaW4=
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Тело запроса:
line1=1&smskey=5c650f9c&action=SMS&telnum=89991234567&smscon
Причем первый параметр оказывается можно в запросе писать и как "line" и как "lineНомерЛинии", например "line1"
тогда в первом случае для параметра указывается номер линии от 1 до 4, а во втором случае просто ставится 1 для отправки конкретно через эту линию.
Пока все работает в версиях 1С 8.2 и 8.3, делалось на базе примера отправки смс через Билайн в конфе CRM 2.0.
Надо теперь адаптировать для 8.1. А там нет объекта HTTPЗапрос, например.
Процедура КнопкаВыполнитьНажатие(Кнопка)
ТекВремя = ТекущаяДата() - Дата('00010101000000');
ГСЧ = Новый ГенераторСлучайныхЧисел(ТекВремя);
КлючСМС = Формат(ГСЧ.СлучайноеЧисло(9999999, 99999999), "ЧГ=0");
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("line", "4");
ПараметрыЗапроса.Вставить("smskey", КлючСМС);
ПараметрыЗапроса.Вставить("action", "SMS");
ПараметрыЗапроса.Вставить("telnum", "89991234567");
ПараметрыЗапроса.Вставить("smscontent", "Здравствуй, Мир!");
ПараметрыЗапроса.Вставить("send", "Send");
ВыполнитьЗапрос(ПараметрыЗапроса);
КонецПроцедуры
Процедура ВыполнитьЗапрос(ПараметрыЗапроса) Экспорт
Результат = "";
ИмяФайлаЗапроса = СформироватьФайлДляPOSTЗапроса(ПараметрыЗапроса);
ИмяФайлаОтвета = ПолучитьИмяВременногоФайла("xml");
// формирование заголовка
ЗаголовокЗапроса = Новый Соответствие;
ЗаголовокЗапроса.Вставить("Accept", "*/*");
ЗаголовокЗапроса.Вставить("Content-Type", "application/x-www-form-urlencoded");
ЗаголовокЗапроса.Вставить("Content-Length", XMLСтрока(РазмерФайла(ИмяФайлаЗапроса)));
// отправка запроса и получение ответа
Попытка
Соединение = Новый HTTPСоединение("192.168.1.190", , "admin", "admin");
ЗапросHTTP = Новый HTTPЗапрос;
ЗапросHTTP.АдресРесурса = "/default/en_US/sms_info.html?type=sms";
ЗапросHTTP.Заголовки = ЗаголовокЗапроса;
ЗапросHTTP.УстановитьТелоИзДвоичныхДанных(Новый ДвоичныеДанные(ИмяФайлаЗапроса));
Соединение.ОтправитьДляОбработки(ЗапросHTTP, ИмяФайлаОтвета);
Результат = ИмяФайлаОтвета;
Исключение
КонецПопытки;
УдалитьФайлы(ИмяФайлаЗапроса);
КонецПроцедуры
Функция СформироватьФайлДляPOSTЗапроса(ПараметрыЗапроса)
СтрокаЗапроса = "";
Для Каждого Параметр Из ПараметрыЗапроса Цикл
Если Не ПустаяСтрока(СтрокаЗапроса) Тогда
СтрокаЗапроса = СтрокаЗапроса + "&";
КонецЕсли;
СтрокаЗапроса = СтрокаЗапроса + Параметр.Ключ + "=" + URLEncode(Параметр.Значение);
КонецЦикла;
ИмяФайлаЗапроса = ПолучитьИмяВременногоФайла("txt");
ФайлЗапроса = Новый ЗаписьТекста(ИмяФайлаЗапроса, КодировкаТекста.ANSI);
ФайлЗапроса.Записать(СтрокаЗапроса);
ФайлЗапроса.Закрыть();
Возврат ИмяФайлаЗапроса;
КонецФункции
ПоказатьФункция URLEncode(Строка) там находится в составе самой конфы CRM 2.0 и она кодирует символы с кодом старше 127 особым образом.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот