Имя: Пароль:
1C
1С v8
post запрос в формате json из 1С
0 MenOne777
 
25.05.17
10:02
Есть задача, отправить запрос методом POST на сервер СМС рассылки. Разработчики отправили инструкцию к подключению. Не могу в ней разобраться. Вот инструкция:

POST должен включать в себя обязательные данные:             'login' => Имя пользователя в системе, формат строка              'password' => пароль пользователя в системе, формат строка              'message' => Текст сообщения для отправки, формат строка              'numbers' => Номера телефонов для отправки в массиве, формат JSON.

Пример для PHP:  
'login' => '[email protected]',            
'password' => 'password',            
'message' => 'Test Api в русском',            
'numbers' =>json_encode(array(                
'77071166477',                
'77057683576',                
'77714099932',            
)),

Готовое решение на PHP

class SendSMS{    
  public function run() {        
   $url = 'http://smsclick.kz/site/api';        
     $fields = array(          
      'login' => urlencode('[email protected]'),            
      'password' => urlencode('password'),            
      'message' => urlencode('Test Api в русском'),            
      'numbers' =>json_encode(array(                
      '77071234567',                
      '77051234567',              
      '7771234567',            
     )),        
    );        
$tocks=$this->gtp($url,$fields);    
}
protected function gtp($url,$fields){        
extract($_POST);        
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }        
rtrim($fields_string, '&');
$ch = curl_init();        
curl_setopt($ch,CURLOPT_URL, $url);        
curl_setopt($ch,CURLOPT_POST, count($fields));        
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);        
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);        
$res= curl_exec($ch);        
curl_close($ch);        
return $res;    
}
}

С чего мне начать?
1 cw014
 
25.05.17
10:05
С изучения ЗаписьJSON и HTTPСоединение
2 MenOne777
 
25.05.17
11:57
Спасибо. Т.е. в 1С это реализуемо?
3 Юрий Лазаренко
 
25.05.17
12:03
(2) Да. С помощью ЗаписьJSON формируется необходимый к отправке текст, этот текст помещается в объект HttpЗапрос его методом "УстановитьТелоИзСтроки" и потом HttpЗапрос выполняется с помощью метода объекта HttpСоединение.ОтправитьДляОбработки().
4 Юрий Лазаренко
 
25.05.17
12:05
Вот пример из СП, там все уже написано, только для xml, а не для json

// инициализируем объект для записи XML

ИмяФайлаЗапроса = ПолучитьИмяВременногоФайла();
ОбъектЗапись = Новый ЗаписьXML;
ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("windows-1251", , Ложь);
ОбъектЗапись.ОткрытьФайл(ИмяФайлаЗапроса, ПараметрыЗаписиXML);
ОбъектЗапись.ЗаписатьОбъявлениеXML();

// выводим корневой элемент Request

ОбъектЗапись.ЗаписатьНачалоЭлемента("Request");

// выводим элемент ClientInfo

ОбъектЗапись.ЗаписатьНачалоЭлемента("ClientInfo");
ОбъектЗапись.ЗаписатьАтрибут("email", АдресОтправителя);
ОбъектЗапись.ЗаписатьКонецЭлемента();

Если ИмяФайлаСертификата <> Неопределено Тогда

    // кодируем в Base64 сертификат

    ДвДанные.Прочитать(ИмяФайлаСертификата);
    ФайлСертификатаBase64 = ДвДанные.ПолучитьСтрокуBase64();
    
    // выводим элемент Certificate

    ОбъектЗапись.ЗаписатьНачалоЭлемента("Certificate");
    ОбъектЗапись.ЗаписатьТекст(ФайлСертификатаBase64);
    ОбъектЗапись.ЗаписатьКонецЭлемента();
    
КонецЕсли;

Если ИмяФайлаЗашифрованногоКонтейнера <> Неопределено Тогда

    // кодируем в Base64 зашифрованный контейнер

    ДвДанные.Прочитать(ИмяФайлаЗашифрованногоКонтейнера);
    ФайлЗашифрованногоКонтейнераBase64 = ДвДанные.ПолучитьСтрокуBase64();
    
    // выводим элемент Data

    ОбъектЗапись.ЗаписатьНачалоЭлемента("Data");
    ОбъектЗапись.ЗаписатьТекст(ФайлЗашифрованногоКонтейнераBase64);
    ОбъектЗапись.ЗаписатьКонецЭлемента();
    
КонецЕсли;

// записываем конец для корневого элемента

ОбъектЗапись.ЗаписатьКонецЭлемента();

ОбъектЗапись.Закрыть();

АдресСервераОнлайнПроверки = "onlinefc.taxcom.ru";
РесурсНаСервере = "/online_fc/online_fc.dll" + ?(ПолучитьСертификат, "?IncludeCertificate", "");

// устанавливаем соединение с сервером

Попытка
    Соединение = Новый HTTPСоединение(АдресСервераОнлайнПроверки, , , , Прокси);
Исключение
    Сообщить("Не удалось установить соединение с сервером онлайн-проверки:"
        + Символы.ПС + ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
    Возврат;
КонецПопытки;

// посылаем запрос

Попытка
    HTTPЗапрос = Новый HTTPЗапрос(РесурсНаСервере);
    HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаЗапроса);
    Результат  = Соединение.ОтправитьДляОбработки(HTTPЗапрос);
    Соединение = Неопределено;
    Если Результат.КодСостояния > 299 Тогда
       Сообщить("Код состояния " + Результат.КодСостояния + ". Проверка не выполнена");
    КонецЕсли;
Исключение
    Сообщить(ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
КонецПопытки;
5 xaozai
 
25.05.17
12:05
Вот в этой конфигурации всё реализовано запросами с использованием JSON. Своя специфика, правда, есть. Но суть должна быть понятна. Рекомендую.
http://catalog.mista.ru/public/299512/