Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Zend_Soap_Client

256
13 октября 2010 года
foxweb
1.0K / / 27.07.2005
Имеется объект Zend_Soap_Client. Подключаюсь и выполняю запрос так:

Код:
$client = new Zend_Soap_Client($uri,
        array(
            'login' => $login,
            'password' => $password,
            'soapVersion' => SOAP_1_1)
        );

/*
 * GetIdentityInfo
 *
 */


$params = array('Profile' => $profile);
$result = $client->GetIdentityInfo($params);
print($result->GetIdentityInfoResult->any);
print($client->getLastRequest());

/*
 * SubmitXml
 *
 */


$request = simplexml_load_file('./request.xml');
$filter = simplexml_load_file('./filter.xml');

$request = xml2array($request);
$filter = xml2array($filter);

$params = array(
    'Profile' => $profile,
    'Request' => $request,
    'Filter' => $filter);

$result1 = $client->SubmitXml($params);

   function xml2array($xml) {
      $arXML=array();
      $arXML['name']=trim($xml->getName());
      $arXML['value']=trim((string)$xml);
      $t=array();
      foreach($xml->attributes() as $name => $value) $t[$name]=trim($value);
      $arXML['attr']=$t;
      $t=array();
      foreach($xml->children() as $name => $xmlchild) $t[$name]=xml2array($xmlchild);
      $arXML['children']=$t;
      return($arXML);
   }


где $request, $filter — XML-данные (сначала как объект, затем преобразуется в массив).

Имеется WSDL-схема. Существенный кусок привожу ниже:
Код:
<s:element name="SubmitXml">
<s:complexType>
<s:sequence>
<s:element maxOccurs="1" minOccurs="0" name="Profile" type="s:string"/>
<s:element maxOccurs="1" minOccurs="0" name="Request">
<s:complexType>
<s:sequence>
<s:any/>
</s:sequence>
</s:complexType>
</s:element>
<s:element maxOccurs="1" minOccurs="0" name="Filter">
<s:complexType>
<s:sequence>
<s:any/>
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>


Я только недавно начал изучать SOAP, поэтому пока не понимаю, как правильно задавать тип параметров.

В первом запросе GetIdentityInfo параметр Profile проходит отлично, получаю нормальный ответ.

Во втором запросе SubmitXml параметр Profile также кушает нормально, ибо это type="s:string". Ругается на Request и Filter ибо это XML в виде массива.

Отвечает:
 
Код:
PHP Fatal error:  SOAP-ERROR: Encoding: object hasn't 'any' property in /usr/share/php/libzend-framework-php/Zend/Soap/Client.php on line 1113
PHP Fatal error:  Uncaught SoapFault exception: [Client] SOAP-ERROR: Encoding: object hasn't 'any' property in /usr/share/php/libzend-framework-php/Zend/Soap/Client.php:1113


Вопрос: как быть с параметрами Request и Filter? Как мне их корректно передать?
Я вот вижу этот «any» и близок к разгадке...
Как мне в виде PHP отдать параметр, соответствующий этому описанию?
 
Код:
<s:complexType>
<s:sequence>
<s:any/>
</s:sequence>
</s:complexType>
256
14 октября 2010 года
foxweb
1.0K / / 27.07.2005
Правильный ответ, если кто-то искал похожее:

Код:
$client = new Zend_Soap_Client($uri,
        array(
            'login' => $login,
            'password' => $password,
            'soapVersion' => SOAP_1_1)
        );

$r_xml = simplexml_load_file('./request.xml');
$f_xml = simplexml_load_file('./filter.xml');

$p_obj = new SoapVar($profile, XSD_STRING);
$r_obj = new SoapVar($r_xml, SOAP_ENC_OBJECT);
$f_obj = new SoapVar($f_xml, SOAP_ENC_OBJECT);

$params = array(
    'Profile' => $p_obj,
    'Request' => $r_obj,
    'Filter' => $f_obj
    );
$result = $client->SubmitXml($params);


Содержимое request.xml и filter.xml должно быть обрамлено в <Request> и <Filter> тэги соответственно.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог