Веб-сервисы 1С позволяют интегрировать внешние приложения с конфигурациями платформы, обмениваясь данными в формате XML или JSON через протокол HTTP. Для подключения к такому сервису необходимо учитывать особенности организации HTTP-запросов и авторизации на стороне 1С.
Стандартный механизм работы включает обращение к опубликованному на веб-сервере объекту – обычно это общий модуль с экспортируемыми методами, доступный через URL вида: http://host/название_базы/ws/имя_модуля.1cws. Перед отправкой запросов убедитесь, что публикация выполнена корректно через встроенный веб-сервер или IIS и что модуль имеет пометку «Web-сервис».
Для доступа к методу веб-сервиса необходимо использовать HTTP POST с телом запроса в формате SOAP или, при использовании REST-интерфейса, в формате JSON. Важно настроить правильные HTTP-заголовки: Content-Type (например, text/xml; charset=utf-8 или application/json) и Authorization, если используется базовая авторизация. Учетные данные должны соответствовать пользователю с правами на вызов веб-сервисов.
Необходимо учитывать, что по умолчанию 1С не ведет логирования внешних обращений. Для отладки подключений желательно использовать прокси-сервер (например, Fiddler или mitmproxy) для отслеживания трафика и анализа HTTP-ответов, включая коды ошибок и тела сообщений. Это особенно актуально при интеграции с нестандартными клиентами или при проблемах с сериализацией данных.
Получение WSDL-файла веб-сервиса 1С
WSDL-файл необходим для генерации клиентского кода и описывает структуру SOAP-сервиса 1С. Получение WSDL возможно только при корректной настройке публикации веб-сервиса в конфигурации 1С.
- Откройте конфигуратор 1С с правами администратора.
- Перейдите в раздел «Общие» → «HTTP-сервисы».
- Создайте новый HTTP-сервис или откройте существующий.
- Убедитесь, что для сервиса установлен флаг «Публиковать».
- Проверьте, что каждая веб-метод содержит описание и активирован для публикации.
После публикации конфигурации на веб-сервере доступ к WSDL осуществляется по следующему шаблону URL:
http://<адрес-сервера>/<имя-публикации>/ws/<имя-сервиса>?wsdl
Например:
http://localhost/Trade/ws/ExchangeService?wsdl
Если при обращении по ссылке возвращается ошибка 404 или пустой ответ:
- Проверьте настройки публикации через «Администрирование веб-сервера» (например, Web-служба 1С).
- Убедитесь, что сервис активен в опубликованной конфигурации (проверка через «Толстый клиент»).
- Проверьте, работает ли веб-сервер (IIS или Apache) и правильно ли настроены виртуальные каталоги.
После успешного получения WSDL-файла его можно сохранить локально или использовать напрямую в инструментах генерации прокси-классов, например, в Visual Studio или SoapUI.
Настройка публикации веб-сервиса в конфигураторе 1С
Откройте конфигуратор и загрузите нужную информационную базу. Перейдите в режим конфигурации (меню «Конфигурация» → «Открыть конфигурацию»).
Создайте общий модуль, предназначенный для публикации. В его свойствах установите флажки «Серверный» и «Экспорт». Пропишите необходимые экспортируемые процедуры и функции, которые должны быть доступны через веб-сервис.
В дереве конфигурации раскройте раздел «Общие» → «HTTP-сервисы». Создайте новый HTTP-сервис. В свойствах задайте имя и включите флажок «Опубликован». Добавьте методы, указав имя, тип (GET/POST), а также соответствующую экспортируемую функцию из модуля.
Откройте свойства конфигурации и установите флажок «Использовать веб-сервер». Сохраните конфигурацию, затем выполните её обновление в режиме 1С:Предприятия.
Для публикации сервиса на веб-сервере IIS используйте встроенный инструмент «Публикация на веб-сервере». Укажите путь к каталогу публикации и выберите IIS как тип веб-сервера. Проверьте, что публикация прошла успешно, и что веб-сервис доступен по сформированному URL-адресу.
После публикации протестируйте доступность сервиса, вызвав его метод через браузер или HTTP-клиент, передав необходимые параметры. В случае ошибок проверьте журнал событий и настройки безопасности IIS.
Формирование HTTP-запроса к веб-сервису 1С
Для обращения к веб-сервису 1С, опубликованному через HTTP-сервис, требуется сформировать корректный HTTP-запрос с учетом специфики платформы. 1С использует базовую HTTP-аутентификацию и формат обмена SOAP или JSON, в зависимости от конфигурации.
- Метод запроса: POST. Только этот метод используется для вызова методов веб-сервиса.
- Заголовки запроса:
Content-Type: text/xml; charset=utf-8
– для SOAPContent-Type: application/json
– для JSON-сервисовAuthorization: Basic {base64(логин:пароль)}
– обязательный заголовок для базовой авторизации
- Тело запроса:
- Для SOAP – XML-структура с пространствами имён и тегом действия (например,
soap:Envelope
) - Для JSON – объект с полями, соответствующими параметрам вызываемого метода
- Для SOAP – XML-структура с пространствами имён и тегом действия (например,
Пример SOAP-запроса:
POST /ws/Service.1cws HTTP/1.1
Host: example.com
Content-Type: text/xml; charset=utf-8
Authorization: Basic YWRtaW46MTIzNDU2
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<m:GetData xmlns:m="http://example.com/Service">
<m:Parameter>Значение</m:Parameter>
</m:GetData>
</soap:Body>
</soap:Envelope>
Особенности:
- URL запроса должен указывать на WSDL- или SOAP-endpoint, оканчивающийся на
.1cws
или.wsdl
при необходимости получения описания сервиса - Структура запроса должна соответствовать описанию, полученному из WSDL
- Ошибка 401 указывает на проблемы с авторизацией, ошибка 500 – на неправильную структуру запроса
Формировать запрос рекомендуется с помощью специализированных HTTP-клиентов: Postman, curl, или средствами программирования с поддержкой работы с SOAP (например, библиотека requests
в Python в связке с zeep
или suds
)
Указание параметров аутентификации при подключении
Для доступа к веб-сервису 1С через HTTP необходимо передавать учетные данные с использованием HTTP Basic Authentication. В запросе указывается заголовок Authorization с закодированной строкой, содержащей логин и пароль пользователя информационной базы.
Формат заголовка:
Authorization: Basic <base64(имя_пользователя:пароль)>
Пример: если имя пользователя webuser, а пароль 12345, то в заголовке будет:
Authorization: Basic d2VidXNlcjoxMjM0NQ==
Закодировать строку можно с помощью утилит или библиотек в нужной среде разработки. Например, в Python:
import base64
auth_str = base64.b64encode(b’webuser:12345′).decode()
При использовании cURL:
curl -u webuser:12345 http://example.com/1cws/endpoint
Если на стороне сервера включена аутентификация через встроенные механизмы 1С (например, через роли или веб-сервер), убедитесь, что у пользователя есть доступ к опубликованному сервису. Без корректной настройки прав вызов будет завершаться с кодом 401 Unauthorized.
Для HTTPS-соединений Basic Authentication используется аналогично, но передача учетных данных происходит по зашифрованному каналу, что предотвращает перехват.
Разбор структуры SOAP-ответа от веб-сервиса 1С
SOAP-ответ от веб-сервиса 1С представляет собой XML-документ, заключённый в стандартный контейнер <soap:Envelope>
, внутри которого находятся два основных элемента: <soap:Header>
(чаще всего пустой) и <soap:Body>
– основное содержимое ответа.
Внутри <soap:Body>
располагается элемент, совпадающий по названию с вызываемым методом, но с добавлением постфикса Response
. Например, при вызове метода GetCatalog
, в теле ответа будет находиться элемент <m:GetCatalogResponse>
, где m
– префикс пространства имён, заданного в XML-атрибуте xmlns:m
.
Далее идёт вложенный элемент return
, содержащий данные, возвращённые 1С. Обычно он представлен в виде вложенной XML-структуры или строки в формате XML или JSON. Если возвращаемое значение сериализовано в XML, его необходимо десериализовать вручную с учётом пространств имён и вложенности элементов.
Особенность 1С – передача бизнес-объектов (справочников, документов, обработок) в виде вложенных структур с метаданными. Например, справочник может содержать элементы: Ссылка
, Код
, Наименование
. При этом порядок элементов может отличаться, поэтому не следует полагаться на фиксированную последовательность при парсинге.
Обрабатывая SOAP-ответ, обязательно проверяйте наличие элемента <soap:Fault>
. Он сигнализирует об ошибке на стороне сервиса 1С. Внутри Fault
находятся поля faultcode
, faultstring
и, при наличии, detail
с дополнительной информацией. Эти данные полезны для диагностики проблем в логике вызова или при авторизации.
При интеграции рекомендуется использовать XML-парсер с поддержкой пространства имён. Это критично, поскольку элементы ответа часто содержат одинаковые имена, различающиеся только префиксами.
Для устойчивой работы следует реализовать схему обработки исключений, валидировать структуру ответа и контролировать корректность декодирования вложенных данных. Особенно важно при получении вложенных XML-строк, возвращаемых в виде CDATA-секций – их необходимо дополнительно распарсить перед использованием.
Обработка ошибок HTTP и SOAP при обмене с 1С
При интеграции с веб-сервисами 1С через HTTP важно учитывать особенности обработки ошибок на уровне протоколов HTTP и SOAP. В случае некорректных запросов или проблем на стороне 1С могут возвращаться различные коды состояния и сообщения об ошибках, которые требуют точной интерпретации.
HTTP-уровень ошибок сообщает о сетевых и протокольных сбоях. Ниже приведены ключевые коды, на которые следует ориентироваться:
400 | Некорректный синтаксис запроса. Чаще всего – неверный SOAP-запрос или отсутствие необходимых HTTP-заголовков. |
401 | Ошибка авторизации. Проверьте логин/пароль и корректность передачи заголовка Authorization в формате Basic Auth. |
403 | Доступ запрещён. Возможны ограничения прав пользователя в конфигурации 1С или IP-фильтрация. |
404 | Сервис не найден. Проверьте URL публикации веб-сервиса в 1С, особенно наличие суффикса /ws или ?wsdl . |
500 | Ошибка сервера. Чаще всего вызвана исключением в обработчике запроса 1С. Анализируйте тело ответа. |
На уровне SOAP ошибки возвращаются в теле ответа в формате XML. Типовая структура SOAP Fault содержит элементы faultcode
, faultstring
и detail
. Пример:
<SOAP-ENV:Fault> <faultcode>SOAP-ENV:Client</faultcode> <faultstring>Ошибка при разборе XML</faultstring> <detail>Тег <Документ> не распознан</detail> </SOAP-ENV:Fault>
Для диагностики используйте трассировку HTTP-запросов (например, с помощью Fiddler или логирования в коде клиента). Анализируйте заголовки и тело ответа. В случае ошибок SOAP обязательно проверяйте корректность пространств имён, схемы XML и соответствие контракту WSDL.
Рекомендуется реализовать централизованную обработку исключений на клиентской стороне с логированием HTTP-кодов и содержимого SOAP Fault. Ошибки уровня 500 должны сохраняться вместе с запросом для последующего анализа в отладочной среде 1С.
Использование Postman для тестирования веб-сервиса 1С
Откройте Postman и создайте новый запрос. Укажите метод POST и введите URL веб-сервиса 1С в формате: http://
.
Перейдите во вкладку Authorization, выберите тип Basic Auth и введите логин и пароль пользователя 1С с правами доступа к веб-сервису.
Во вкладке Headers добавьте заголовок Content-Type
со значением text/xml; charset=utf-8
. Для SOAP-сервисов также укажите заголовок SOAPAction
со значением, соответствующим вызываемому методу.
Во вкладке Body выберите опцию raw и формат XML. Вставьте SOAP-запрос, содержащий тело метода, например:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
<soapenv:Header/>
<soapenv:Body>
<tem:ИмяМетода>
<tem:Параметр1>Значение</tem:Параметр1>
</tem:ИмяМетода>
</soapenv:Body>
</soapenv:Envelope>
Нажмите Send. Если авторизация и структура запроса корректны, в ответе будет XML с результатом выполнения метода. Для отладки анализируйте структуру ответа и коды состояния HTTP.
Чтобы ускорить работу, сохраняйте готовые запросы в коллекции Postman и используйте переменные окружения для URL, логина и пароля. Это особенно полезно при работе с разными базами 1С.
Примеры подключения к веб-сервису 1С с использованием Python
Для подключения к веб-сервису 1С с использованием Python можно использовать стандартные библиотеки, такие как requests, которые позволяют отправлять HTTP-запросы к серверу 1С. Для начала убедитесь, что веб-сервис 1С настроен и доступен по URL. Пример подключения через requests:
import requests
url = 'https://example.com/1C_service'
headers = {'Content-Type': 'application/xml'}
data = """
Value1
Value2
"""
response = requests.post(url, data=data, headers=headers)
if response.status_code == 200:
print("Ответ от сервера 1С:", response.text)
else:
print("Ошибка:", response.status_code)
В данном примере отправляется SOAP-запрос, который содержит XML-данные. Важно настроить правильные заголовки и структуру запроса, соответствующую требованиям веб-сервиса 1С. Для отправки других типов запросов, например, REST, можно использовать аналогичные подходы, изменив структуру запроса и URL.
Если веб-сервис 1С использует аутентификацию, для добавления авторизационных данных в запрос можно использовать параметр auth библиотеки requests. Пример:
from requests.auth import HTTPBasicAuth
auth = HTTPBasicAuth('username', 'password')
response = requests.post(url, data=data, headers=headers, auth=auth)
Если сервер 1С использует SSL-сертификаты для безопасного соединения, можно указать путь к сертификатам с помощью параметров cert и verify:
response = requests.post(url, data=data, headers=headers, cert=('/path/to/cert.pem', '/path/to/key.pem'), verify='/path/to/ca.pem')
Для обработки ошибок и получения более подробной информации о ответе можно использовать дополнительные проверки и обработку исключений:
try:
response = requests.post(url, data=data, headers=headers, auth=auth)
response.raise_for_status() # Проверка на ошибки HTTP
print("Ответ от сервера:", response.text)
except requests.exceptions.RequestException as e:
print("Ошибка подключения:", e)
Таким образом, подключение к веб-сервису 1С с использованием Python достаточно гибкое и позволяет легко интегрировать систему с внешними приложениями. Выбор метода подключения зависит от типа веб-сервиса и требований безопасности.
Вопрос-ответ:
Как настроить подключение к веб-сервису 1С через HTTP?
Для подключения к веб-сервису 1С через HTTP необходимо выполнить несколько шагов. Во-первых, нужно настроить веб-сервер, который будет обрабатывать HTTP-запросы. Это может быть сервер IIS или Apache. Затем нужно в конфигурации 1С указать адрес веб-сервиса и убедиться, что в системе 1С разрешено использование веб-сервисов. После этого можно настроить сервер 1С для работы с запросами и тестировать подключение через HTTP, используя специальный URL для доступа к данным через сервис.
Какие протоколы и порты нужно открыть для подключения к веб-сервису 1С через HTTP?
Для работы веб-сервиса 1С через HTTP нужно, чтобы на сервере был открыт порт 80 (для HTTP) или 443 (для HTTPS), если используется защищенное соединение. Протокол HTTP/HTTPS является основным для передачи данных между клиентом и сервером, поэтому важно настроить соответствующие порты в брандмауэре и в настройках сети. Также убедитесь, что протокол SOAP или REST (в зависимости от того, какой используется в 1С) доступен для корректной работы веб-сервиса.
Можно ли использовать веб-сервис 1С для интеграции с другими системами через HTTP?
Да, веб-сервис 1С через HTTP может быть использован для интеграции с другими системами. В зависимости от потребностей интеграции можно настроить обмен данными между 1С и другими приложениями через стандартные форматы, такие как XML, JSON или другие. Важно, чтобы сторонняя система поддерживала нужный протокол (например, SOAP или REST) и могла правильно обрабатывать запросы и ответы, передаваемые через HTTP.
Какие типы аутентификации поддерживает веб-сервис 1С при подключении через HTTP?
Веб-сервис 1С поддерживает несколько типов аутентификации при подключении через HTTP. Самый распространенный вариант — это базовая аутентификация (Basic Authentication), когда логин и пароль передаются в заголовке HTTP-запроса. Также может быть настроена аутентификация через токены или использование SSL-сертификатов для более безопасной передачи данных. Важно выбрать подходящий метод в зависимости от требований безопасности вашей организации.
Как протестировать подключение к веб-сервису 1С через HTTP?
Для тестирования подключения к веб-сервису 1С через HTTP можно использовать инструмент, такой как Postman или SoapUI. В этих приложениях можно отправить HTTP-запрос к URL веб-сервиса и проверить корректность ответа. Также стоит использовать логирование в 1С для выявления возможных ошибок при установке соединения. Если сервис использует аутентификацию, важно передавать правильные учетные данные в запросе. При успешном подключении сервис должен вернуть корректный ответ в формате XML или JSON.