Веб-форма авторизации/регистрации/восстановления пароля для веб-клиента 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
43 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Началось все с вопроса "А можно ли сделать так чтобы любой желающий мог получить доступ к нашему веб-клиенту, и для этого не нужно было бы всех заводить руками?". А дальше начались поиски решения) Задача стояла весьма увлекательная. Я, как человек мельком знакомый с веб-разработкой, и по основному профилю специализирующийся на разработке в 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С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

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

57600 руб.

26.11.2024    5946    4    3    

7

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    3319    17    2    

19

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

В расширении реализован механизм интеграции между системой поставщика и Личным кабинетом СДТ. Реализован обмен заказами и реализациями (накладными), предусмотрено отслеживание статусов документов. Расширение предназначено для 1С:УТ 11.4.

35856 руб.

27.11.2024    1780    1    0    

1

Обмен с ГосИС 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

5196 руб.

28.04.2016    97281    109    218    

359

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

Универсальное расширение конфигурации для автоматической загрузки и заполнения реквизитов контрагентов (партнеров) из ОГРН для 1С:ERP Управление предприятием 2 (1С:ERP Управление предприятием 2, редакция 2.4), 1С:ERP Управление предприятием 2 (1С:ERP Управление предприятием 2, редакция 2.2), 1С:Управление торговлей 8 (Управление торговлей, редакция 11.5), 1С:Управление торговлей 8 (Управление торговлей, редакция 11.4), 1С:Управление торговлей 8 (Управление торговлей, редакция 11.3), 1С:Управление торговлей 8 (Управление торговлей, редакция 11.2), 1С:Комплексная автоматизация 8 (1С:Комплексная автоматизация, редакция 2.4), 1С:Комплексная автоматизация 8 (1С:Комплексная автоматизация, редакция 2.2), 1С:Комплексная автоматизация 8 (1С:Комплексная автоматизация, редакция 2.0) и 1С:Бухгалтерия 8 (Бухгалтерия предприятия, редакция 3.0).

5000 руб.

08.11.2017    69366    415    298    

84

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

Внешняя обработка разработана для автоматизации передачи данных между сервисом Vetmanager с 1С: Бухгалтерия 3.0. Решение позволяет загружать документы и справочники из Ветменеджер в 1С:Бухгалтерию, сокращая время на ручной ввод данных и минимизируя ошибки.

12000 руб.

02.02.2021    20193    58    52    

36
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. oyti 65 08.11.18 12:25 Сейчас в теме
Не совсем понятно, для чего здесь PHP
2. Бэнни 216 08.11.18 12:35 Сейчас в теме
(1)Разверните свою мысль более подробно
3. oyti 65 08.11.18 12:39 Сейчас в теме
(2) клиентскую часть можно целиком реализовать на HTML+JS+CSS. Серверная - HTTP-сервисы. Для чего нужна дополнительная прослойка на PHP?
DrAku1a; ltfriend; andy23; +3 Ответить
4. Бэнни 216 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. Бэнни 216 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. Бэнни 216 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. Бэнни 216 16.11.18 10:49 Сейчас в теме
(11) Пожалуйста, Александр)
13. anvolkov1cbit 50 14.01.19 16:19 Сейчас в теме
14. Бэнни 216 17.01.19 15:42 Сейчас в теме
(13) В чем это выражается? Только что скачал, проверил. Все так как должно быть.
15. anvolkov1cbit 50 18.01.19 09:39 Сейчас в теме
(14) В этом
Прикрепленные файлы:
16. Al-77 74 23.03.20 15:57 Сейчас в теме
Архив скачал а он битый. можете прислать?
17. Dex041 19.06.20 00:33 Сейчас в теме
Получается эта форма регистрации откроется только, если обращаться к домену напрямую? Если обратиться к конкретной БД, то форма авторизации будет 1Сная?
18. Бэнни 216 19.06.20 10:11 Сейчас в теме
(17) В текущей реализации - да. Для того чтобы совсем закрыть стандартную форму авторизации нужно настраивать редиректы на сервере
19. andy_zhav 199 19.08.20 10:57 Сейчас в теме
А какие права будут у пользователя? мне кажется без установки прав затея не имеет смысла
20. andy_zhav 199 19.08.20 11:03 Сейчас в теме
Я делал аналогичную задачу. У нас есть http сервис регистрации нового пользователя. Используем post запрос. При этом при создании нового пользователя автоматически назначается группа пользователя с заполненными правами. Все привязано в физлицу. После регистрации пользователь сразу может входить в 1С

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

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