emphttpservices/README.md

138 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Расширение HTTPServices для конфигурации ЕМП
Расширение для 1С. Базовая заготовка для реализации HTTP сервисов на базе конфигураций 1С, в частности, данное расширение создано для конфигурации "ЕМП".
В данном расширении помимо конструктива и методов работы HTTP сервиса, реализован HTTP сервис CSM-API, позволяющий при помощи POST запросов реализовывать поставку данных.
В рамках сервиса реализован метод **StatusDoc** для виджета **"Проверка статуса Заказа"** на стороне любого сайта. Важно заметить, что на вход метода подается JSON конструкция, содержащая информацию по контрагенту и интересующих клиента документах. В качестве списка документов можно передавать как номера заказов, так и номера счетов. Ответом со стороны метода и сервиса будет JSON конструкция содержащая информацию по искомым документам.
В работе метод проверяет форму контрагента, юр./физ. лицо. Для юр.лица нужно обязательно указать ИНН.
При поиске документов по номерам, ведется проверка соответствия ИНН и формы контрагента. Чужие документы посмотреть не получится. Для физ.лица нужно четко знать номера документов, для юр.лица нужно помимо точного соответствия номеров, еще и предоставить ИНН контрагента указанного в документах.
## В планах:
- [ ] Доработать метод, до варианта, когда под каждым заказом будет выводиться его содержимое.При условии, что Заказ оплачен и завершен.
- [ ] В каждой строке расшифровке сделать кликабельную ссылку, ведущую на портал Аршин, для просмотра результатов поверки.
- [ ] Реализовать дополнительные методы, по запросу клиентов.
## С чего начать?
1. Клонировать или скачать файлы данного репозитория.
2. Внимательно ознакомиться с данной инструкцией, ПРОЧЕСТЬ ЕЕ.
3. Пошагово выполнить подготовку и внедрение, в соответствии с рекомендациями данной инструкции.
## Содержание и описание файлов
- **README.MD** - Непосредственно этот файл, который является инструкцией и описанием всего проекта и расширения.
- **.\extensions\HTTPServices.cfe** - файл расширения, который нужно добавить в рабочую базу 1С ЕМП.
- **.\HTTPServices\emp\default.vrd** - файл настроек публикации и подключения HTTP сервиса на стороне веб сервера Apache.
- **.\HTTPServices\statusform** - папка с файлами виджета, которую нужно настроить и перенести на сторону каталога сайта.
- **.\HTTPServices\statusform\action.php** - файл обработка, производит непосредственный запрос на сторону нашего веб сервера, для связи с HTTP сервисом. В этом файле нужно указать внешний путь к опубликованному сервису.
- **HTTPServises\apache.conf** - файл-вырезка с блоком настроек на стороне веб сервера Apache, для реализации публикации HTTP сервиса во вне. То, что нужно будет добавить в свой файл конфигурации.
## Источники вдохновения, основа кода расширения, и чтиво для понимания. (ссылки). Практически все было взято с этих двух проектов, в той или иной вариации
- [Учимся создавать http-сервисы ч.1](https://infostart.ru/1c/articles/1293341/)
- [Учимся создавать http сервисы ч.2. Передача параметра в http сервис](https://infostart.ru/1c/articles/1296740/)
- [Учимся создавать http сервис ч.3. Передача нескольких параметров в http сервис](https://infostart.ru/public/1303368/)
- [Учимся создавать http сервис ч.4. Изучение метода POST http запроса (передача текстовых данных)](https://infostart.ru/1c/articles/1307941/)
- [HTTP Сервисы: Путь к своему сервису. ч.1](https://infostart.ru/1c/articles/842751/)
- [HTTP Сервисы: Путь к своему сервису. ч.2](https://infostart.ru/1c/articles/885287/)
- [HTTP Сервисы: Путь к своему сервису. ч.3](https://infostart.ru/public/886103/)
- [HTTP Сервисы: Путь к своему сервису. ч.4](https://infostart.ru/1c/articles/893304/)
## Приступаем к внедрению
Нам понадобятся:
1. Сервер 1С Предприятия с установленными на нем web компонентами.
2. Apache 2.4
3. Сайт на любом движке, главное чтоб понимал и работал с PHP и JS.
### Добавляем расширение в боевую конфигурацию
Расписывать данный шаг не буду, так как считаю, что исчерпывающей информации на просторах рускоязычного интернета, более чем достаточно. Скажу только то, что я предпочитаю это делать через "Конфигуратор", а кто-то это любит делать, через интерфейс конфигурации и функции Администрирования. Выбор за вами. Обозначу только то, что после добавления расширения, нужно корректно выставить галочки допусков его работы. См.скрин ниже.
![pic](./files/httservice-setup.jpg)
После перезахода пользователей в базу, расширение будет готово к работе.
### В базе добавляем отдельного пользователя 1С
Пользователь нужен с полными правами, чтоб от его имени сервис делал запросы и получал данные, которые будет далее перенаправлять на сайт. Ставим этому пользователю ХОРОШИЙ пароль и убираем его из списка авторизации. У меня для этого заведен пользователь **UserWebService** с ОЧЕНЬ длинным и сложным паролем.
### Теперь готовим web сервер.
Чтоб все заработало, нам нужен web сервер готовый к публикации баз и сервисов 1С.
В рекомендациях от 1С, это или IIS, или Apache. В нашем случае используем второй, так как он проще, легче и менее требователен.
Рекомендую отдельную внешнюю установку web сервера в пределах отдельной ноды. Хотя можно установить и непосредственно, на ноду с установленным сервером 1С Предприятия. Это в какой-то мере упростит установку и настройку.
В моем случае, в качестве сервера выступает linux станция. На данном сервере, помимо Apache ставим серверную часть платформы 1С. За деталями и подробностями, в ГуглЯшу, поскольку это выходит за рамки данного проекта. После чего приступаем к редактированию конфигурационного файла Apache: apache.conf . В него нужно внести данные о каталоге, где будет располагаться настроечный файл соединения с базой 1С и прописать модуль-библиотеку, чтоб наш Apache мог общаться с 1С. Часть конфига, который нужно внести в рабочий конфиг Apache, я с комментариями приводу ниже:
```
#То что нужно добавить в ваш конфиг
#Apache чтоб опубликовать базу 1С.
# 1c publication
Alias "/emp" "/var/www/emp/"
<Directory "/var/www/emp/">
AllowOverride All
Options None
Require all granted
SetHandler 1c-application
ManagedApplicationDescriptor "/var/www/emp/default.vrd"
</Directory>
#
# !ОБЯЗАТЕЛЬНО! прописываем в строке ниже
#путь к установленной библиотеке 1С
# Релиз установленного 1С в Apache должен
#совпадать с релизом платформы
#установленной на сервере 1С
LoadModule _1cws_module "/opt/1cv8/x86_64/8.3.20.1996/wsap24.so"
```
То есть мы внесли в конфиг, что настроечный файл соединения будет лежать в папке /var/www/emp и обратится к нему можно будет по алиасу /emp.
Теперь переходим в папку публикации, в нашем случае /var/www и создаем в ней папку emp, куда переносим файл default.vrd. В этом файле описана структура соединения с базой 1С, в формате понятном серверу 1С. Ниже текстовка этого конфига:
```
<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/emp"
ib="Srvr=YourServer1C;Ref=NameBase1C;usr=UserForService;pwd=SecretPassword" enable="false">
<debug enable="true"
url="YourServer1C"/>
<standardOdata enable="false"
reuseSessions="autouse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<analytics enable="true"/>
<httpServices>
<service name="HS_CSM_API"
rootUrl="CSM-API"
enable="true"/>
</httpServices>
</point>
```
Небольшие пояснения к этому конфигу:
**YourServer1C** - Имя сервера 1С в вашей сети.
**NameBase1C** - Имя базы в кластере 1С.
**UserForService** - Пользователь от имени которого будет производиться вход в базу, во время работы сервиса.
**SecretPassword** - Длинный и сложный пароль пользователя 1С.
Конфиг составлен так, чтоб под обозначенным пользователем можно было только обратиться к HTTP сервису базы 1С. Интерактивного входа в базу сделать не получится. Но дополнительно включены разделы отладки и аналитики.
После того, как конфиг публикации положили в нужное место, предварительно отредактировав его под себя, идем в /etc/hosts или в файл hosts на windows, в зависимости от того, где развернут Apache, и в файл вносим строку с определением адреса и имени сервера 1С. Если у вас сервер 1С и web сервер на разных нодах.
```
ip.adress.you.server name-you-server
```
После всего проделанного перезапускаем web сервер. На нашей стороне все готово.
## Финальный шаг. Публикуем виджет.
- Переносим папку виджета вместе со всем содержимым на сайт.
- В папке виджета есть файл action.php, в него нужно внести внешний путь к вашему web серверу и публикации, с указанием метода который запрашиваем. На пример: http://web.newcsm.ru/emp/hs/CSM-API/StatusDoc Где /emp - это опубликованная база, /hs - это обращение к опубликованым в базе http сервисам, /CSM-API - это наш http сервис, у которого мы запрашиваем метод /StatusDoc. В моем же случае, я длиную часть адреса, спрятал от посторонних глаз в конфиге NGINX, и снаружи этот адрес стал выглядеть как http://web.newcsm.ru/StatusDoc
- Теперь в нужном месте и на нужных страницах можно сделать ссылки или кнопку ведущую на страницу index.php из списка файлов виджета.
## Готово. Наслаждаемся работой виджета.
***