Мы не станем здесь останавливаться на вопросе: "Что такое веб-сервисы 1С и как их настраивать?", так как в сети и так очень много статейпо данной теме. Постараемся вкратце рассмотреть, каким же способом возможно настроить взаимодействие веб-сервисов 1С, используя популярный для работы сайтов язык PHP.
И так начнем.
В первую очередь для PHP надо подключить модуль для работы по протоколу SOAP. Для windows надо в файле php.ini либо раскомментировать либо дописать строки
[PHP_SOAP]
extension=php_soap.dll
Под windows замечена следующая особенность — файл php.ini надо обязательно положить в папку C:\Windows. Также необходимо перезапустить веб-сервер, если PHP установлен как модуль.
Рассмотрим 2 случая:
- Когда в параметр метода веб-сервиса необходимо передать строку
- Когда в параметр метода веб-сервиса необходимо передать объект пакета XDTO, который описан в 1С
Примем одно условие, что ответ веб-сервис 1С присылает в формате JSON. К сожалению поддержка формата JSON на уровне методов платформы появилось только в версии «1С Предприятие 8.3.6». Чтобы использовать формат JSON в более ранних версиях платформы есть хорошая обработка, которой можно воспользоваться, а можно и написать что-то свое, т.к. данный формат передачи данных не сложный.
Ответ веб-сервиса 1С будет в формате JSON с параметрами «Status» и «Message» (в данном примере я не использовал обработку, а описал ответ сам):
НашеСообщение = "Какое-то сообщение"
ТекстОтветаВебСервисов = "{" + Символы.ПС + """Status""" + ":" + """Ok""" + "," + Символы.ПС
+ """Message""" + ":" + """" + НашеСообщение + """" + Символы.ПС
+ "}";
1 случай. Передача параметра в виде строки.
// Необходимо отключить кэширование для SOAP. Если этого не сделать,
// функции веб-сервисов будут работать некорректно.
ini_set('soap.wsdl_cache_enabled', 0 );
ini_set('soap.wsdl_cache_ttl', 0);
$client = new SoapClient("//localhost:8080/ExampleBase/ws/ExampleWebService.1cws?wsdl",
array(
'login' => "1C", //логин пользователя к базе 1С
'password' => "54321", //пароль пользователя к базе 1С
'soap_version' => SOAP_1_2, //версия SOAP
'cache_wsdl' => WSDL_CACHE_NONE,
'trace' => true,
'features' => SOAP_USE_XSI_ARRAY_TYPE
)
);
//Заполним массив передаваемых параметров
$ParametrStroka = 'TestStroka';
$params["ParametrStroka"] = $ParametrStroka;
//Выполняем операцию
$result = $client->ExampleMethod($params); //ExampleMethod - это метод веб-сервиса 1С, который описан в конфигурации.
//Обработаем возвращаемый результат
$jsResult = $result->return;
$dataResult = json_decode($jsResult);
$StatusResult = $dataResult->Status; //получим значение параметра Status, который был сформирован при ответе веб-сервиса 1С
$MessageResult = $dataResult->Message; //получим значение параметра Message, который был сформирован при ответе веб-сервиса 1С
2 случай. Передача параметра в виде пакета XDTO 1C.
Допустим параметр XDTO — это документ «заказ клиента», который имеет реквизиты: номер документа, ФИО покупателя, табличная часть «Товары» (реквизиты — штрихкод товара, наименование товара, цена, количество, сумма). Для нашего примера пакет XDTO примет вид
// Необходимо отключить кэширование для SOAP. Если этого не сделать,
// функции веб-сервисов будут работать некорректно.
ini_set('soap.wsdl_cache_enabled', 0 );
ini_set('soap.wsdl_cache_ttl', 0);
$client = new SoapClient("//localhost:8080/ExampleBase/ws/ExampleWebService.1cws?wsdl",
array(
'login' => "1C", //логин пользователя к базе 1С
'password' => "54321", //пароль пользователя к базе 1С
'soap_version' => SOAP_1_2, //версия SOAP
'cache_wsdl' => WSDL_CACHE_NONE,
'trace' => true,
'features' => SOAP_USE_XSI_ARRAY_TYPE
)
);
//Заполним массив передаваемых параметров
$ParametrXDTO= Array(
"DocumentNumber" => '0000001',
"NameCustomer" => 'Андрей Петрович',
"Goods" => Array(
"Product" => array(
"ProductBarCod" => '8718863003152',
"ProductName" => 'Телевизор PHILIPS 40PFT4100/60',
"Count" => 1,
"Price" => 25000,
"Summa" => 25000);
$params["ParametrXDTO"] = $ParametrXDTO;
//Выполняем операцию
$result = $client->ExampleMethod($params); //ExampleMethod - это метод веб-сервиса 1С, который описан в конфигурации.
//Обработаем возвращаемый результат
$jsResult = $result->return;
$dataResult = json_decode($jsResult);
$StatusResult = $dataResult->Status; //получим значение параметра Status, который был сформирован при ответе веб-сервиса 1С
$MessageResult = $dataResult->Message; //получим значение параметра Message, который был сформирован при ответе веб-сервиса 1С
На этом все. Как видите ничего сложно нет. Будут вопросы — спрашивайте.