Веб-форма авторизации/регистрации/восстановления пароля для веб-клиента 1С с помощью HTML/CSS/PHP/HTTP-сервисов 1С

16.11.18

Интеграция - WEB-интеграция

Пришла в голову идея создать универсальную веб-форму входа в веб-клиент 1С на HTML/CSS/PHP/HTTP-сервисы 1С. Чтобы прямо как на нормальных сайтах. Заодно и для ознакомления с 1С с новой, для себя, стороны. Интересно было попробовать интеграцию PHP - 1С.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Веб-форма и конфигурация для подключения веб-пользователей (1С 8.3)
.rar 14,95Kb
40
40 Скачать (1 SM) Купить за 1 850 руб.

Началось все с вопроса "А можно ли сделать так чтобы любой желающий мог получить доступ к нашему веб-клиенту, и для этого не нужно было бы всех заводить руками?". А дальше начались поиски решения) Задача стояла весьма увлекательная. Я, как человек мельком знакомый с веб-разработкой, и по основному профилю специализирующийся на разработке в 1С, видел свет в конце туннеля, но короткого пути не знал) Для решения моей задачи я обратился в интернет. Результатом поисков, проб и ошибок, стало такое решение.

Тестировалось все на 
1. 1С 8.3.8 и 1С 8.3.13, но думаю будет работать и на других релизах 8.3

2. PHP 5.6

3. Apache 2.4

Функционал

1. Универсальная форма для входа и регистрации в базе 1С. При логине пользователь не видит стандартного окна аутентификации 1С

2. Регистрация (создание пользователя) в 1С из веб формы. 1С создает пользователя и генерирует ему пароль.

3. Восстановление пароля пользователя 1С из веб-формы

4. При регистрации и восстановлении пароля пользователь получает письма с паролями 

 
 Для тех кому интересны мытарства с разворачиванием веб-сервера и публикацией, смотрим под кат

Архитектура решения такова:

1.Index.php - файл с веб-формой. Версткой, незатейливым дизайном и скриптами визуального отображения.
Весь листинг приводить не буду, он здесь не будет смотреться. Но основная идея для подмены формы логина в веб-клиенте 1С описана по ссылке  и реализуется с помощью простой формы с POST запросом.

<FORM action="http://localhost/BaseName/e1cib/start" method="post">
    Пользователь: <INPUT id="usr" name="usr" /><BR />
    Пароль: <INPUT id="pwd" type="password" value="" name="pwd" />
    <INPUT id="authfailhandling" type="hidden" value="error" name="authfailhandling" /> 
    <P><INPUT type="submit" value="ОК" /> </P>
</FORM>

Нам остается только подставить правильный адрес в атрибут action нашей формы. И готово.

С остальными функциями веб-формы логина все не так просто.

2. backend.php - Файл содержащий обработчики формы для регистрации и восстановления пароля и соединяется с 1С по http-сервису. Основная суть вызова http-сервиса 1С из php сводится к коду

//отправляем запрос с параметрами
$auth = base64_encode("$admin_login:$admin_password"); //Создаем строку авторизации 
		                                               //по типу Basic auth, для авторизации 
                                                       //в веб-сервисе
$context = stream_context_create([
	'http' => [
		'method' => "POST",
		'header' => "Authorization: Basic $auth"
	]
]);

$url = $url."?".http_build_query($query_params, null, '&', PHP_QUERY_RFC3986); //создаем строку url
//С помощью метода http_build_query формируем строку параметров из массива параметров. 	
//Не забываем указать способ кодирования PHP_QUERY_RFC3986, чтобы пробелы в тексте не заменялись плюсами	

$WSanswer = file_get_contents($url, false, $context);

Хочется переделать на CURL для расширенной работы с ответом веб-сервиса, и переделать вызовы на AJAX. Но пока так.

3. Следующим по очереди идет файл config.php в папке assets, в нем указаны конфигурационные данные для подключения к нашему веб-сервису. код прост и незатейлив. Но сильно упрощает подключение.

	//адрес публикации
	$BaseURL="http://localhost/BaseName";
	
	//адрес сервиса
	$WSurl = "$BaseURL/hs/Users";
	
	//адрес авторизации
	$StarterURL = "$BaseURL/e1cib/start";
	
	//логин админа
	$admin_login = "Администратор";
	//пароль админа
	$admin_password = "пароль";

из этого файла выбираются параметры для всех операций

4. и style.css, но это не так интересно. Стили здесь не главное.

Дальше переходим к стороне 1С.

Здесь у нас все довольно прозаично. Конфигурация содержит http-сервис "Пользователи" с двумя шаблонами

/register и /resetPassword

 

Оба шаблона содержат POST-методы и устроены однообразно

Листинг функции регистрации в упрощенном виде выглядит так

Функция Зарегистрироваться(Запрос)
	
	Отказ = Ложь;
	Ответ = Новый HTTPСервисОтвет(200);//Формируем успешный ответ сервиса
	
    //Получаем параметры http-запроса, те которые мы добавляем после знака ? в url
	ИмяПользователя = Запрос.ПараметрыЗапроса.Получить("user_name");
	ПолноеИмя =  Запрос.ПараметрыЗапроса.Получить("full_name");
	Почта = Запрос.ПараметрыЗапроса.Получить("email");
	
	Если ПолноеИмя = Неопределено Или ПустаяСтрока(ПолноеИмя) Тогда
		
		ПолноеИмя = ИмяПользователя;	
		
	КонецЕсли;
	
	Ошибки = Новый Массив;
	
	Если ИмяПользователя = Неопределено ИЛИ ПустаяСтрока(ИмяПользователя) Тогда
		
		Отказ = Истина;
		
		Ошибка = "Имя пользователя не заполнено";
		Ошибки.Добавить(Ошибка);
		
	КонецЕсли;
	
	Если Почта = Неопределено ИЛИ ПустаяСтрока(Почта) Тогда
		
		Отказ = Истина;
		
		Ошибка = "Почта пользователя не заполнена";
		Ошибки.Добавить(Ошибка);
		
	КонецЕсли;
		
	Если Не Отказ Тогда
		
		ДанныеПользователя = ВебПользователиОбщегоНазначенияСервер.ДобавитьПользователя(ИмяПользователя, ПолноеИмя, Почта, Ошибки); //ДанныПользователя "ИмяПользователя, ПолноеИмя, Пароль"
		
		Если ДанныеПользователя <> Неопределено Тогда
		
			ВебПользователиОбщегоНазначенияСервер.ОтправитьУведомление(Почта, "Регистрация", ДанныеПользователя, Ошибки);
		
		КонецЕсли;
		
	КонецЕсли;

	
	Если Не Отказ Тогда
		
        //Устанавливаем данные ответа
		Ответ.УстановитьТелоИзСтроки("Пользователь успешно добавлен");
		
	Иначе
		
        //Устанавливаем данные неуспешного ответа
		Ответ = Новый HTTPСервисОтвет(400);
		
        //Сериализуем наш массив ошибок в JSON
		ЗаписьJSON = Новый ЗаписьJSON;
		ЗаписьJSON.УстановитьСтроку();
		
		ЗаписатьJSON(ЗаписьJSON, Ошибки);
		
		СтрокаОшибок = ЗаписьJSON.Закрыть();
		
		Ответ.УстановитьТелоИзСтроки(СтрокаОшибок);
		
	КонецЕсли;
	
	Возврат Ответ;
	
КонецФункции

Листинг функции восстановления пароля устроен подобным образом

Для тех кто станет это скачивать и пробовать. Нужно сделать следующее 

1. .Заполнить параметры подключения к почтовому серверу в процедуре ПочтовыйПрофиль(), тогда почта начнет отправляться.

2. Кладем файлы веб-формы в папку htdocs сервера если у вас Apache.

3. Заполняем файл config.php в папке assets

Вроде бы все. Ожидаю ваши комментарии, исправления и советы.

php HTTP-сервисы интеграция веб-клиент авторизация Windows Apache

См. также

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    17782    19    22    

16

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    19845    13    17    

16

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    14421    42    8    

18

WEB-интеграция Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    1170    1    0    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. oyti 59 08.11.18 12:25 Сейчас в теме
Не совсем понятно, для чего здесь PHP
2. Бэнни 209 08.11.18 12:35 Сейчас в теме
(1)Разверните свою мысль более подробно
3. oyti 59 08.11.18 12:39 Сейчас в теме
(2) клиентскую часть можно целиком реализовать на HTML+JS+CSS. Серверная - HTTP-сервисы. Для чего нужна дополнительная прослойка на PHP?
DrAku1a; ltfriend; andy23; +3 Ответить
4. Бэнни 209 08.11.18 12:44 Сейчас в теме
(3) Во первых, мне так захотелось, just for fun) Это главное) Во вторых, с кроссдоменными запросами в JS у меня всегда было не очень) В третьих, мне не хотелось чтобы код общения с сервером был доступен на клиенте.
TitanLuchs; mifka186; +2 Ответить
5. СергейКа 670 08.11.18 19:34 Сейчас в теме
Пару лет назад делал проще в двух вариантах:
1. Генерируется HTML форма прямо при запуске конфигурации из веб. Там можно регистрироваться, менять пароль, запрашивать и все что положено. Здесь на форуме был пример с моим участием, да и в инете сейчас найти можно.
2. Подключался внешним источником к базе Wordress. Формы настроены им же. При регистрации пользователя - отправлялось подтверждение на почту уже 1С-кой. При запросе изменения пароля - так же. И так далее. Короче весь фронтэенд - Вордпресс. Бэкэнд - 1С.

Так что вариантов решений - море ))
A_Max; Бэнни; +2 Ответить
6. Бэнни 209 08.11.18 20:41 Сейчас в теме
(5)а можно ссылку на ваше решение? Очень интересно пишете) или может файликами поделитесь в личку? Готов поучиться)
7. СергейКа 670 09.11.18 08:21 Сейчас в теме
(6) Для первого варианта: https://forum.infostart.ru/forum9/topic160958/
Может быть не все, но достаточно что бы разобраться.
Для второго варианта - давно проект прикрыл, сейчас не в работе. Делал его совместно с awa, но к сожалению в прошлом году судьба распорядилась иначе. Уже более года как прикрыто. Но поищу что у меня в архивах осталось. Быстро не обещаю.
Бэнни; +1 Ответить
8. vasvl123 119 10.11.18 04:06 Сейчас в теме
(6) Реализована безопасная авторизация https://github.com/vasvl123/OneScriptDB
DrAku1a; Бэнни; +2 Ответить
9. Бэнни 209 11.11.18 20:09 Сейчас в теме
(8)Это какой-то форк oscript.web или что-то отдельное?
10. vasvl123 119 11.11.18 21:52 Сейчас в теме
(9) это отдельный проект, на других принципах и более низким порогом вхождения.
DrAku1a; Бэнни; +2 Ответить
11. Unknown31 16.11.18 10:07 Сейчас в теме
Интересна статья, спасибо)
Бэнни; +1 Ответить
12. Бэнни 209 16.11.18 10:49 Сейчас в теме
(11) Пожалуйста, Александр)
13. anvolkov1cbit 27 14.01.19 16:19 Сейчас в теме
14. Бэнни 209 17.01.19 15:42 Сейчас в теме
(13) В чем это выражается? Только что скачал, проверил. Все так как должно быть.
15. anvolkov1cbit 27 18.01.19 09:39 Сейчас в теме
(14) В этом
Прикрепленные файлы:
16. Al-77 74 23.03.20 15:57 Сейчас в теме
Архив скачал а он битый. можете прислать?
17. Dex041 19.06.20 00:33 Сейчас в теме
Получается эта форма регистрации откроется только, если обращаться к домену напрямую? Если обратиться к конкретной БД, то форма авторизации будет 1Сная?
18. Бэнни 209 19.06.20 10:11 Сейчас в теме
(17) В текущей реализации - да. Для того чтобы совсем закрыть стандартную форму авторизации нужно настраивать редиректы на сервере
19. andy_zhav 197 19.08.20 10:57 Сейчас в теме
А какие права будут у пользователя? мне кажется без установки прав затея не имеет смысла
20. andy_zhav 197 19.08.20 11:03 Сейчас в теме
Я делал аналогичную задачу. У нас есть http сервис регистрации нового пользователя. Используем post запрос. При этом при создании нового пользователя автоматически назначается группа пользователя с заполненными правами. Все привязано в физлицу. После регистрации пользователь сразу может входить в 1С

// 3. Создаем пользователя ИБ, если его еще нет в базе
Запрос.Текст =
"ВЫБРАТЬ Первые 1
|	Пользователи.Ссылка КАК Ссылка
|ИЗ
|	Справочник.Пользователи КАК Пользователи
|ГДЕ
|	Пользователи.ФизическоеЛицо = &ФизическоеЛицо";
Запрос.УстановитьПараметр("ФизическоеЛицо", ФизЛицо);
Выборка = Запрос.Выполнить().Выбрать();
Если Не Выборка.Следующий() Тогда 
	Пользователь = Справочники.Пользователи.СоздатьЭлемент();
	Пользователь.ФизическоеЛицо = ФизЛицо;
Иначе
	Пользователь = Выборка.Ссылка.ПолучитьОбъект();
КонецЕсли;
Пользователь.Наименование = ФИО;
	ОписаниеПользователяИБ            = Пользователи.НовоеОписаниеПользователяИБ();
ПользовательИБСуществует          = Ложь;
ДоступКИнформационнойБазеРазрешен = Ложь;

// Заполнение начальных значений свойств пользователяИБ.
Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда
	ОписаниеПользователяИБ.ПоказыватьВСпискеВыбора = Ложь;
Иначе
	ОписаниеПользователяИБ.ПоказыватьВСпискеВыбора =
		НЕ Константы.ИспользоватьВнешнихПользователей.Получить();
КонецЕсли;
ОписаниеПользователяИБ.АутентификацияСтандартная = Истина;
ОписаниеПользователяИБ.Роли = Новый Массив;
ОписаниеПользователяИБ.АутентификацияOpenID = Ложь;		
ОписаниеПользователяИБ.АутентификацияСтандартная = Истина;
ОписаниеПользователяИБ.ЗапрещеноИзменятьПароль = Истина;
ОписаниеПользователяИБ.ПоказыватьВСпискеВыбора = Ложь;
ОписаниеПользователяИБ.АутентификацияОС = Ложь;
ОписаниеПользователяИБ.Вставить("Действие", "Записать");
ОписаниеПользователяИБ.Вставить("Имя", Логин);
ОписаниеПользователяИБ.Вставить("Пароль", Пароль);
	Пользователь.ДополнительныеСвойства.Вставить(
		"ОписаниеПользователяИБ", ОписаниеПользователяИБ);
			
Пользователь.Записать();
				
ГруппаДоступаЗаказчик = Справочники.ГруппыДоступа.СоздатьЭлемент();
ГруппаДоступаЗаказчик.Родитель = Справочники.ГруппыДоступа.РодительПерсональныхГруппДоступа();
ГруппаДоступаЗаказчик.Наименование = "Заказчик";
ГруппаДоступаЗаказчик.Профиль = Справочники.ПрофилиГруппДоступа.Заказчик;
ГруппаДоступаЗаказчик.Пользователь = Пользователь.Ссылка;
Строка = ГруппаДоступаЗаказчик.Пользователи.Добавить();
Строка.Пользователь = Пользователь.Ссылка;
ГруппаДоступаЗаказчик.Записать();
Показать
Бэнни; +1 Ответить
21. Бэнни 209 19.08.20 15:12 Сейчас в теме
(20) Да вопрос прав пользователей я в своей публикации не поднимал, группы доступа БСП-шные, и не всем это может быть полезно, больше сконцентрирован на самой механике. В работе у нас сделано примерно то же самое что предлагаете вы)
22. user757393 23.03.21 13:01 Сейчас в теме
Оставьте свое сообщение