M-IT: Готовый внешний веб-сервис для взаимодействия 1С и PHP

1cgw — программная сборка (внешний веб-сервис, WSDL-ссылка), реализованная средствами PHP для прямого обращения, передачи и получения данных между конфигурациями "1С: Предприятие 8" и  информационными системами на базе PHP.

В описании будет рассмотрен пример обращения из «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.

8 Comments

  1. Fragster

    Писал подобное для многопоточного теста, правда без ZENDа, он зато с автогенерацией wsdl по списку функции через Reflection

    Reply
  2. meteorit

    (1) Fragster, у вас на каждую операцию, получается, был свой wsdl? Использовали только для своей задачи с многопоточным тестом? Не думали, как решение свое использовать для других задач? Спасибо за идею

    Reply
  3. Fragster

    (2) нет, количество операций произвольное, сколько функций в передашь, столько и будет.

    см, например, http://fragster.ru/tmp/test.php?wsdl или сам http://fragster.ru/perfomanceTest/ws.php?wsdl

    ну а не использовал более нигде, потому что не надо было, да и не полностью покрываются все возможные варианты

    Reply
  4. fieryfist
    Скопируйте содержимое папки upload/ (каталоги 1cgw/, admin/ и vqmod/) в корень Вашего магазина

    этих папок нету в вашем архиве, откуда копировать?

    Reply
  5. Saldor

    (4) fieryfist, Они, я так понимаю лежат в выше указанной конфигурации Управления магазином.

    Reply
  6. Fragster

    (2) тем временем выложил в открытый доступ с примерами http://fragster.ru/wsfor1c/

    Reply
  7. Saldor

    (4) fieryfist, Вот, файлы не достающие для сайта. Сам сейчас публикацию веб сервисов интегрирую.

    Reply
  8. 1977

    Под opencart 3.0 есть решение?

    Reply

Leave a Comment

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