Интеграция 1С Предприятие 8.2 с php вебсервисом, созданным при помощи классов nuSOAP
Ожидает приглашения
Добрый день. В данной статье я расскажу каким образом интегрировать 1С Предприятие 8.2 с php вебсервисом, созданным при помощи классов nuSOAP.
Разберу на конкретном примере который я специально создал для данной статьи. Для простоты восприятия буду вести повествование от первого лица.
Создание вебсервиса
Для начала скачаю последнюю версию nuSOAP по адресу sourceforge.net/projects/nusoap, распакую архив и заберу оттуда папку lib, которую положу в папку /wsdl_service/ на сайте eduportal.infosuite.ru.
Таким образом путь к папке выглядит как eduportal.infosuite.ru/wsdl_service
Далее я создаю вебсервис по адресу eduportal.infosuite.ru/wsdl_service/GetSimpleArray.php
Рабочий код GetSimpleArray.php
Теперь по адресу eduportal.infosuite.ru/wsdl_service/GetSimpleArray.php?wsdl будет выведена XML разметка документа.
Обращение к сервису из 1с Предприятие 8.2
Скачиваем файл GetSimpleArray.rar по адресу eduportal.infosuite.ru/wsdl_service/GetSimpleArray.rar, распаковываем и полученный файл GetSimpleArray.epf запускаем при помощи 1с Предприятие 8.2 – оно работает!

Приведу 1С код:
PS – Прошу обратить внимание что nuSOAP не работает вместе с IIS7. Один из вариантов решения проблемы — установка Apache 2.2 на другой порт и последующий вызов сервиса из под Apache.
Разберу на конкретном примере который я специально создал для данной статьи. Для простоты восприятия буду вести повествование от первого лица.
Создание вебсервиса
Для начала скачаю последнюю версию nuSOAP по адресу sourceforge.net/projects/nusoap, распакую архив и заберу оттуда папку lib, которую положу в папку /wsdl_service/ на сайте eduportal.infosuite.ru.
Таким образом путь к папке выглядит как eduportal.infosuite.ru/wsdl_service
Далее я создаю вебсервис по адресу eduportal.infosuite.ru/wsdl_service/GetSimpleArray.php
Рабочий код GetSimpleArray.php
<?
// Подключаем и инициализируем NuSOAP
require_once('lib/nusoap.php');
$server = new soap_server();
$server->decode_utf8 = false;
$server->soap_defencoding = 'UTF-8';
$server->configureWSDL('GetSimpleArray','http://eduportal.infosuite.ru/wsdl_service/','','document');
// Определяем выходной массив
$server->wsdl->addComplexType(
'ArrayOfString',
'complexType',
'array',
'',
'SOAP-ENC:Array',
array(),
array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'string[]')),'xsd:string'
);
// Регистрируем предоставляемый метод
$server->register('GetSimpleArray', // название метода
array('arg1' => 'xsd:string','arg2' => 'xsd:string'), // входные параметры
array('return' => 'tns:ArrayOfString'), // выходные параметры
'urn:GetSimpleArray', // пространство имен
'', // soapaction
'', // стиль
'', // использование
'' // описание
);
// Определяем метод как функцию PHP
function GetSimpleArray($arg1,$arg2) {
$array[] = $arg1;
$array[] = $arg2;
return $array;
}
// Используем HTTP-запрос чтобы вызвать сервис
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
?>
Теперь по адресу eduportal.infosuite.ru/wsdl_service/GetSimpleArray.php?wsdl будет выведена XML разметка документа.
Обращение к сервису из 1с Предприятие 8.2
Скачиваем файл GetSimpleArray.rar по адресу eduportal.infosuite.ru/wsdl_service/GetSimpleArray.rar, распаковываем и полученный файл GetSimpleArray.epf запускаем при помощи 1с Предприятие 8.2 – оно работает!

Приведу 1С код:
Процедура Кнопка1Нажатие(Элемент)
ОпределениеТ=Новый WSОпределения("http://eduportal.infosuite.ru/wsdl_service/GetSimpleArray.php?wsdl");
Т=Новый WSПрокси(ОпределениеТ,"http://eduportal.infosuite.ru/wsdl_service/","GetSimpleArray","GetSimpleArrayPort");
ОтветОбщ = Т.GetSimpleArray(Именительный,BV1);
Если Типзнч(ОтветОбщ)= Тип("ОбъектXDTO") Тогда
ТабличноеПоле1.Очистить();
Для каждого ЭЛЕМ из ОтветОбщ.list Цикл
ТабличноеПоле1.Добавить(ЭЛЕМ);
КонецЦикла;
Иначе
Ответ = ОтветОбщ;
КонецЕсли;
КонецПроцедуры
PS – Прошу обратить внимание что nuSOAP не работает вместе с IIS7. Один из вариантов решения проблемы — установка Apache 2.2 на другой порт и последующий вызов сервиса из под Apache.