Продолжая первую и вторую статью про HTTP-сервисы 1С, сегодня рассмотрим более детально передачу JSON данных из веб-страницы на языке PHP в HTTP-сервис 1С по протоколу POST.
Содержание:
1. Вспоминаем прошлые статьи по HTTP-сервису
Содержание:
1. Вспоминаем прошлые статьи по HTTP-сервису
2. Создаем новый шаблон и метод
3. Обработчик 1С получения JSON данных с сайта
4. Код веб-страницы на PHP для отправки JSON данных
5. Проверка работоспособности
1. Вспоминаем прошлые статьи по HTTP-сервису
Осуществим повторную публикацию нашего сервиса выполнив пункты меню Администрирование / Публикация WEB-сервера...
3. Обработчик 1С получения JSON данных с сайта
4. Код веб-страницы на PHP для отправки JSON данных
5. Проверка работоспособности
1. Вспоминаем прошлые статьи по HTTP-сервису
В первой статье мы создали чистую конфигурацию test. В нее добавили один справочник Оборудование, заполнили его тремя записями. Добавили HTTP-сервис СписокОборудования с Корневым URL - ob. Опубликовали конфигурацию под именем test. Во второй статье используя методы GET и POST попытались организовать получение параметров с сайта. Но полноценно рассматривать получение данных JSON методом POST не стали, это рассмотрим в данной статье.
2. Создаем новый шаблон и метод
В HTTP-сервисе СписокОборудования добавляем новый шаблон URL ИнформацияПоОборудованию в свойстве Шаблон указываем /poastjson
В созданном шаблоне URL создаем новый метод POSTJSON, в нем создаем обработчик.
В созданном шаблоне URL создаем новый метод POSTJSON, в нем создаем обработчик.
3. Обработчик 1С получения JSON данных с сайта
Функция ИнформацияПоОборудованиюPOSTJSON(Запрос)
//получаем тело запроса
Сообщение = Запрос.ПолучитьТелоКакСтроку("UTF-8");
//десериализуем данные о клиенте из JSON
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Сообщение);
ОборудованиеJSON = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
//обрабатываем JSON данные
ДанныеОборудования = Новый Структура; //Создаем структуру для хранения ответа
КодОборудования = "";
НаименованиеОборудования = "";
Если ОборудованиеJSON.Свойство("code", КодОборудования) Тогда
//Если есть свойство Код, то ищем по коду элемент в справочнике
Оборудование = Справочники.Оборудование.НайтиПоКоду(КодОборудования);
Если ЗначениеЗаполнено(Оборудование) Тогда
//Если найден такой элемент, то добавляем данные элемента в структуру
ДанныеОборудования.Вставить("code", Оборудование.Код);
ДанныеОборудования.Вставить("naim", Оборудование.Наименование);
КонецЕсли;
ИначеЕсли ОборудованиеJSON.Свойство("naim", НаименованиеОборудования) Тогда
//Если есть свойство Наименование, то ищим по наименованию элемент в справочнике
Оборудование = Справочники.Оборудование.НайтиПоНаименованию(НаименованиеОборудования);
Если ЗначениеЗаполнено(Оборудование) Тогда
//Если найден такой элемент, то добавляем данные элемента в структуру
ДанныеОборудования.Вставить("code", Оборудование.Код);
ДанныеОборудования.Вставить("naim", Оборудование.Наименование);
КонецЕсли;
Иначе //Если нет свойства Код и Наисенования, то что-то передали не то
Ответ = Новый HTTPСервисОтвет(402);
Возврат Ответ;
КонецЕсли;
//Если не были найдены элементы и по коду ни по наименованию
//формируем пустую структуру
Если Не ЗначениеЗаполнено(ДанныеОборудования) Тогда
ДанныеОборудования.Вставить("code", null);
ДанныеОборудования.Вставить("naim", null);
КонецЕсли;
//Сериализуем данные в JSON
ЗаписьJOIN = Новый ЗаписьJSON;
ЗаписьJOIN.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJOIN,ДанныеОборудования);
СтрокаДляОтвета = ЗаписьJOIN.Закрыть();
//Формируем ответ клиенту
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Content-type","application/JOIN; charset=utf-8");
Ответ.УстановитьТелоИзСтроки(СтрокаДляОтвета,КодировкаТекста.UTF8,ИспользованиеByteOrderMark.НеИспользовать);
Возврат Ответ;
КонецФункции
Осуществим повторную публикацию нашего сервиса выполнив пункты меню Администрирование / Публикация WEB-сервера...
4. Код веб-страницы на PHP для отправки JSON данных
<?php
//Авторизация
$username = "Администратор";
$password = "1";
$host_api = "http://1с/test";
$host_post = "http://1с/test/hs/ob/postjson";
$data = array
(
//"code" => "000000004", //поиск по коду
"naim" => "Монитор" //поиск по наименованию
);
$json_data = json_encode($data);
$ch = curl_init($host_api);
// Заполняем параметры CURL для получения данных по запросу POST
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($ch, CURLOPT_URL, $host_post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
//Если передавать ничего не надо, то вместо $json_data нужно передать NULL, иначе запрос не выполнится curl_setopt($ch, CURLOPT_POSTFIELDS, NULL);
// Выполнение запроса и получение ответа
$output = curl_exec($ch);
// Проверка наличия ошибок
if ($output === FALSE) {
echo "cURL Error: " . curl_error($ch);
}
//Выводим сервисную информацию по выполнению запроса
$info = curl_getinfo($ch);
echo 'Took ' . $info['total_time'] . ' seconds for url ' . $info['url'];
// Очистка ресурсов
curl_close($ch);
echo "<br>";
echo "<br>";
$obj = json_decode($output,true);
echo "Выводит все содержимое JSON";
echo "<br>";
var_dump($obj); // Выводит все содержимое JSON в браузер
?>
5. Проверка работоспособности
<?php
//Авторизация
$username = "Администратор";
$password = "1";
$host_api = "http://1с/test";
$host_post = "http://1с/test/hs/ob/postjson";
$data = array
(
//"code" => "000000004", //поиск по коду
"naim" => "Монитор" //поиск по наименованию
);
$json_data = json_encode($data);
$ch = curl_init($host_api);
// Заполняем параметры CURL для получения данных по запросу POST
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($ch, CURLOPT_URL, $host_post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
//Если передавать ничего не надо, то вместо $json_data нужно передать NULL, иначе запрос не выполнится curl_setopt($ch, CURLOPT_POSTFIELDS, NULL);
// Выполнение запроса и получение ответа
$output = curl_exec($ch);
// Проверка наличия ошибок
if ($output === FALSE) {
echo "cURL Error: " . curl_error($ch);
}
//Выводим сервисную информацию по выполнению запроса
$info = curl_getinfo($ch);
echo 'Took ' . $info['total_time'] . ' seconds for url ' . $info['url'];
// Очистка ресурсов
curl_close($ch);
echo "<br>";
echo "<br>";
$obj = json_decode($output,true);
echo "Выводит все содержимое JSON";
echo "<br>";
var_dump($obj); // Выводит все содержимое JSON в браузер
?>
5. Проверка работоспособности
Спасибо большое! Кучу времени потратил, пока не нашел эту статью!
ОтветитьУдалитьПожалуйста, рад что кому-то помог!
УдалитьПривет, почему во всех примерах ЗаписьJOIN?
ОтветитьУдалитьВо всех примера работаю по одной записи, для реализации не сложных и не объемных модулей этого достаточно.
Удалить