SOAP ДЛЯ 1с

Despod

Новичок
Добрый день.

Есть необходимость создать веб сервис(сервер на php) который будет возвращать информацию для программы 1с. Проблема в 1c, она хочет что то особеного для себя.

Отправить 1с нужно объект у которого есть одно свойство mystr(строка). Код такой

Код:
<?php
ini_set("soap.wsdl_cache_enabled", "0"); // отключаем кэширование WSDL
$server = new SoapServer("soap.wsdl");
class testResponse
{
public $out;
}
class testType
{
public $mystr;
}
function test()
{
$testtype= new testType();
$testtype->mystr="success";
$ret= new testResponse();
$ret->out=$testtype;
return $ret;
}
$server->addFunction("test");
$server->handle();
?>
Возвращает данный код такой вот ответ.
Код:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.sample-package.org">
  <SOAP-ENV:Body>
      <ns1:testResponse>
        <out>
            <mystr>success</mystr>
        </out>
      </ns1:testResponse>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
1с такой ответ не устраивает, начинает ругаться на типы данных и их несоответствие. По трассировке стало ясно что 1с ждет приблизительно такой ответ

Код:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header/>
  <soap:Body>
      <m:testResponse xmlns:m="http://www.sample-package.org">
        <m:out xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <m:mystr>success</m:mystr>
        </m:out>
      </m:testResponse>
  </soap:Body>
</soap:Envelope>
1) Как должен выглядеть PHP код в таком случае?
2) Есть ли возможность в PHP создавать объекты для веб сервиса не через классы(как в моем случае) а на основании описания WSDL?
Типа
myObject=CreateObjectWSDL("out");
MyObject->mystr="success";

Заранее спасибо
 

AnrDaemon

Продвинутый новичок
Почему не задать этот вопрос в 1С?
Хотя…
Попробуйте
Код:
<SOAP-ENV:Envelope … xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
…
      <ns1:testResponse>
        <ns1:out>
            <ns1:mystr>success</ns1:mystr>
        </ns1:out>
      </ns1:testResponse>
 

Despod

Новичок
Почему не задать этот вопрос в 1С?
Хотя…
Попробуйте
Код:
<SOAP-ENV:Envelope … xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
…
      <ns1:testResponse>
        <ns1:out>
            <ns1:mystr>success</ns1:mystr>
        </ns1:out>
      </ns1:testResponse>
1с-ники этим не пользуются, в платформе есть а примеров крайне мало. в основном это взаимодествие 1с <->1с/

по поводу пробуйте. У меня как раз вопрос был в том, как добавить это пространство имен перед строками? Я сейчас получаю объект через класс, а он у меня выводится как <mystr>, а не <ns1:mystr>. Что нужно сделать чтоб на выходе это появилось?
 

AnrDaemon

Продвинутый новичок
"Попробуйте" имелось в виду "попробуйте простроить руками".
Напишите заглушку, получающую единственный запрос и формирующую единственный ответ и посмотрите реакцию клиента.
Или вам тоже надо давать ссылку на phpfaq.ru/debug ?
 

Despod

Новичок
Despod, ты решишь кучу проблем если возьмешь нормальную библиотеку для webservice, которая также и wsdlки генерит. попробуй http://framework.zend.com/manual/2.0/en/modules/zend.soap.server.html чес слово, для написания webservice не нужно понятитие структуры wsdl или того хуже soap
Маленькая предыстория. Я разработчик со стажем, но не по PHP. Задача стоит как взаимодействие 1с и не 1с системы. В 1с у меня нет возможности идти шаг в лево, шаг вправо, так как если что то 1с-ке не нравится она отстреливает (запросы, ответы, сам wsdl) с некому не понятными сообщениями типа "ошибка формата" и все, без описания строк ошибок и каких либо коментариев. По линии 1с выяснить что либо не удается.

Так что я создаю веб сервис 1с для 1с, смотрю форматы, и ручками создаю wsdl, ручками создаю обработки для 1с, ручками создаю веб сервис в данном случае на php. Так что знание структуры wsdl для меня очень критично.

"Попробуйте" имелось в виду "попробуйте простроить руками".
Напишите заглушку, получающую единственный запрос и формирующую единственный ответ и посмотрите реакцию клиента.
Или вам тоже надо давать ссылку на phpfaq.ru/debug ?
в качестве дебага у меня soapUI, воспроизвести ручками такую структуру у меня не получилось не через строку не через dom-модель, не через класс.
 

WMix

герр M:)ller
Партнер клуба
Wsdl как и soap платформенно-независимаые, единственное о чем нужно думать - типизация. Используй свое знание, для понимания, но не занимайся ерундой.
 
Сверху