Веб-форма авторизации/регистрации/восстановления пароля для веб-клиента 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
41
41 Скачать (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С:ITIL(ИТИЛ), 1С:ITILIUM, Управление IT-отделом 8 через интернет с любого устройства посредством браузера, увеличивая эффективность работы пользователей и снижая нагрузку на сервер. Быстрая инсталляция портала за пару часов, удобный и интуитивно понятный интерфейс и безопасность данных помогут упростить работу с порталом и ускорить выполнение бизнес-процессов компании.

128000 руб.

19.12.2023    2744    3    0    

10

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

Модуль "Подсистема интеграции AmoCRM с 1С" позволяет обеспечить единое информационное пространство, в котором пользователи могут эффективно управлять клиентской базой, следить за статусами сделок и поддерживать актуальность данных как в AmoCRM, так и в 1С.

60000 руб.

07.05.2019    34838    68    45    

27

Оптовая торговля Розничная торговля WEB-интеграция 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Онлайн-заказ - это решение для автоматизации процесса оформления заказов на сайте в торговых организациях. Продукт обеспечивает легкое взаимодействие между компанией и клиентами через веб-интерфейс, интегрированный с 1С:Предприятие. Система позволяет снизить операционные расходы, повысить лояльность клиентов и оптимизировать работу отдела продаж.

57600 руб.

26.11.2024    2518    2    3    

5

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

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

36000 руб.

03.08.2020    19155    23    22    

20

WEB-интеграция Программист Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    18924    54    50    

31

WEB-интеграция Программист Бизнес-аналитик Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Оптовая торговля, дистрибуция, логистика ИТ-компания Платные (руб)

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

14400 руб.

20.12.2024    938    4    2    

6

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

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

24000 руб.

27.09.2024    4251    3    2    

4

Обмен с ГосИС WEB-интеграция Бухгалтер Пользователь Платформа 1С v8.3 Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Обработка является альтернативой механизму, разработанному фирмой 1С и заполняющему реквизиты контрагента по ИНН или наименованию. Не требуется действующей подписки ИТС. Вызывается как внешняя дополнительная обработка, т.е. используется, непосредственно, из карточки контрагента. Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС (egrul.nalog.ru) для БП 2.0, БП 3.0, БГУ 1.0, БГУ 2.0, УТ 10.3, УТ 11.x, КА 1.1, КА 2.x, УПП 1.x, ERP 2.x, УНФ 1.5, УНФ 1.6, УНФ 3.0, ДО 2.1

2400 руб.

28.04.2016    93264    193    217    

344
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. oyti 59 08.11.18 12:25 Сейчас в теме
Не совсем понятно, для чего здесь PHP
2. Бэнни 211 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. Бэнни 211 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. Бэнни 211 08.11.18 20:41 Сейчас в теме
(5)а можно ссылку на ваше решение? Очень интересно пишете) или может файликами поделитесь в личку? Готов поучиться)
7. СергейКа 670 09.11.18 08:21 Сейчас в теме
(6) Для первого варианта: https://forum.infostart.ru/forum9/topic160958/
Может быть не все, но достаточно что бы разобраться.
Для второго варианта - давно проект прикрыл, сейчас не в работе. Делал его совместно с awa, но к сожалению в прошлом году судьба распорядилась иначе. Уже более года как прикрыто. Но поищу что у меня в архивах осталось. Быстро не обещаю.
Бэнни; +1 Ответить
8. vasvl123 120 10.11.18 04:06 Сейчас в теме
(6) Реализована безопасная авторизация https://github.com/vasvl123/OneScriptDB
DrAku1a; Бэнни; +2 Ответить
9. Бэнни 211 11.11.18 20:09 Сейчас в теме
(8)Это какой-то форк oscript.web или что-то отдельное?
10. vasvl123 120 11.11.18 21:52 Сейчас в теме
(9) это отдельный проект, на других принципах и более низким порогом вхождения.
DrAku1a; Бэнни; +2 Ответить
11. Unknown31 16.11.18 10:07 Сейчас в теме
Интересна статья, спасибо)
Бэнни; +1 Ответить
12. Бэнни 211 16.11.18 10:49 Сейчас в теме
(11) Пожалуйста, Александр)
13. anvolkov1cbit 27 14.01.19 16:19 Сейчас в теме
14. Бэнни 211 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. Бэнни 211 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. Бэнни 211 19.08.20 15:12 Сейчас в теме
(20) Да вопрос прав пользователей я в своей публикации не поднимал, группы доступа БСП-шные, и не всем это может быть полезно, больше сконцентрирован на самой механике. В работе у нас сделано примерно то же самое что предлагаете вы)
22. user757393 23.03.21 13:01 Сейчас в теме
Оставьте свое сообщение