Работа с веб-сервисами 1С на PHP

Здравствуйте.

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

И так начнем.

В первую очередь для PHP надо подключить модуль  для работы по протоколу SOAP. Для windows надо в файле php.ini либо раскомментировать либо дописать строки
[PHP_SOAP]
extension=php_soap.dll

Под windows замечена следующая особенность — файл php.ini надо обязательно положить в папку C:\Windows. Также необходимо перезапустить веб-сервер, если PHP установлен как модуль.

Рассмотрим 2 случая:

  1. Когда в параметр метода веб-сервиса необходимо передать строку
  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("http://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 примет вид
Пример пакета XDTO


// Необходимо отключить кэширование для SOAP. Если этого не сделать, 
// функции веб-сервисов будут работать некорректно.    
ini_set('soap.wsdl_cache_enabled', 0 );
ini_set('soap.wsdl_cache_ttl', 0); 

$client = new SoapClient("http://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С

На этом все. Как видите ничего сложно нет. Будут вопросы — спрашивайте.

Популярность: 22%

Запись опубликована в рубрике Настройка и оптимизация с метками , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *