В описании будет рассмотрен пример обращения из «1С: Предприятие 8» к базе данных CMS Open Cart.
Поддержку SOAP обеспечивает SOAP-расширение для PHP.
Наш SOAP-сервис (веб-сервис) написан с использованием программного каркаса на PHP Zend Framework. А именно, используется компонент Zend_Soap фреймворка, который создает оболочку вокруг SOAP-расширения для PHP и имеет полный набор инструментов для создания и развертывания SOAP-сервисов.
Zend_Soap расположен в папке Zend, ядро веб-сервиса (сервер SOAP) — в папке OneC.
Для определения возможностей SOAP-клиентов при работе с веб-сервисом создается набор сервис-объектов с методами и публикуется на сервере SOAP.
Это API сервиса в файле формата WSDL (Web Service Description Language, язык описания веб-сервисов и доступа к ним).
Клиенты SOAP могут получать из этих файлов информацию об именах методов, типах входных и выходных данных и возвращаемых значениях.
SOAP-сервер осуществляет перевод типов данных SOAP в стандартные типы данных, анализирует пакеты запросов SOAP, реализует соответствующий метод сервиса, а также генерирует пакеты ответов SOAP с результатами.
1cgw — это публикация SOAP-протокола плюс файл INDEX.PHP, в котором описаны процедуры информационной базы PHP c параметрами, к которым происходит обращение из 1С.
Если процедура описана в файле INDEX.PHP, входящего в сборку 1cgw, то из 1С, после подключения внешнего веб-серсиса через инструмент WSПрокси, возможно обращение к этой процедуре/объекту.
Состав и содержимое INDEX.PHP редактируется с учетом БД.
Рассмотрим пример: функцию поиска товара по ID.
—————————————————————————————————-
В INDEX.PHP она описана следующим образом:
private function _getProduct($product_id) {
return $this->model_catalog_product->getProduct($product_id);
}
—————————————————————————————————-
//В 1С создаем объект WSПрокси:
Функция ПолучитьWSПрокси(Витрина, ИмяФайла) Экспорт
Попытка
Определение = Новый WSОпределения(Витрина.АдресВитрины + "/" + ИмяФайла);
Прокси = Новый WSПрокси(Определение, Витрина.АдресВитрины + "/" + ИмяФайла, "OneCGatewayService", "OneCGatewayPort");
Возврат Прокси;
Исключение
Возврат Неопределено;
КонецПопытки;
КонецФункции
—————————————————————————————————-
//Пример вызова функции поиска номенклатуры в 1С по ID OpenCart:
//В качестве адреса витрины может быть прописан путь: http://localhost.ru/1cgw (в примере "Витрина" используется как
//параметр)
Функция НайтиНоменклатуруПоИД(ОпенКартИД)
ВебСервис = ПолучитьWSПрокси(http://localhost.ru/1cgw, "index.php");
Если ОпенКартИД = 0 ТогдаВозврат Ложь; КонецЕсли;
ТипЦелое = ВебСервис.ФабрикаXDTO.тип("http://www.w3.org/2001/XMLSchema", "int");
product_id = ВебСервис.ФабрикаXDTO.создать(ТипЦелое, ОпенКартИД);
Попытка
retStr = ВебСервис.getProduct(product_id);
Продукт = retStr.item;
Возврат Истина;
Исключение
Возврат Ложь;
КонецПопытки;
КонецФункции
Примечание: 1сgw используется при реализации обмена в режиме реального времени для решений:
M-IT: Управление интернет-магазином из 1С
Реализован обмен с CMS Open Cart, Prestashop и Simpla на базе PHP
В 1сgw меняется только содержание файла INDEX.PHP, в зависимости от состава процедур и параметров информационной системы на базе PHP.
Писал подобное для многопоточного теста, правда без ZENDа, он зато с автогенерацией wsdl по списку функции через Reflection
(1) Fragster, у вас на каждую операцию, получается, был свой wsdl? Использовали только для своей задачи с многопоточным тестом? Не думали, как решение свое использовать для других задач? Спасибо за идею
(2) нет, количество операций произвольное, сколько функций в передашь, столько и будет.
http://fragster.ru/tmp/test.php?wsdl или сам http://fragster.ru/perfomanceTest/ws.php?wsdl
см, например,
ну а не использовал более нигде, потому что не надо было, да и не полностью покрываются все возможные варианты
этих папок нету в вашем архиве, откуда копировать?
(4) fieryfist, Они, я так понимаю лежат в выше указанной конфигурации Управления магазином.
(2) тем временем выложил в открытый доступ с примерамиhttp://fragster.ru/wsfor1c/
(4) fieryfist, Вот, файлы не достающие для сайта. Сам сейчас публикацию веб сервисов интегрирую.
Под opencart 3.0 есть решение?