Необходимо из 1С обращаться к стороннему HTTP-сервису (в данном примере, написанным на PHP). Обмен с сайтом было решено сделать путем передачи строки в JSON формате.
На сайте разместили PHP скрипт, который принимает данные, обрабатывает их и возвращает результат.
Вариант 1. Передача с заголовком Content-type: application/x-www-form-urlencoded.
СтрокаJSON = КодироватьСтроку(СтрокаJSON, СпособКодированияСтроки.КодировкаURL);
HTTPСоединение = Новый HTTPСоединение("localhost");
HTTPЗапрос = Новый HTTPЗапрос("/from1c.php");
HTTPЗапрос.Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded");
HTTPЗапрос.УстановитьТелоИзСтроки("param=" + СтрокаJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
Сообщить("Код результата: " + Ответ.КодСостояния);
Сообщить("Ответ: " + Ответ.ПолучитьТелоКакСтроку("UTF-8"));
Тут делаем POST запрос к скрипту from1c.php и передаем туда параметр «param» в котором содержится наши данные в формате JSON.
В скрипте, чтобы получить эти данные достаточно написать echo($_POST['param']).
Если вы передаете данные в формате JSON, то их можно сразу автоматически десериализовать и получить номальную структуру. Десериализовать можно через функцию json_decode(($_POST['param'])
Обратите внимание, что необходимо указывать «ИспользованиеByteOrderMark.НеИспользовать» иначе возникнут проблемы на стороне сайта с расшифровкой JSON строки.
Этот вариант хорош, но тут возникает потребность предварительно кодировать строку JSON, так как в ней могут быть специальные символы (,&= и т.д.). Собственно можно кодировать всю строку, как в примере выше КодироватьСтроку(СтрокаJSON, СпособКодированияСтроки.КодировкаURL), а можно кодировать только определенные параметры (только те, где может быть эти символы).
Вариант 2. Передача с заголовком Content-type: application/json.
HTTPСоединение = Новый HTTPСоединение("localhost");
HTTPЗапрос = Новый HTTPЗапрос("/from1c.php");
HTTPЗапрос.Заголовки.Вставить("Content-type", "application/json");
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
Сообщить("Код результата: " + Ответ.КодСостояния);
Сообщить("Ответ: " + Ответ.ПолучитьТелоКакСтроку("UTF-8"));
В данном варианте предварительно кодировать строку не нужно.
Получать данные на стороне сайта, просто через echo($_POST['order']) не получиться. Необходимо использовать echo file_get_contents('php://input')
Вот собственно и все.
Для примера прикрепил обработку, в которой сериализую структуру в JSON и передают на сервер двумя этими вариантами.