PHP: как выполнить запрос SOAP с помощью complexTypes?

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

 <payloadPublication d2p1:type="GenericPublication" >
     ...
 </payloadPublication>

единственная проблема заключается в том, как добавить комплексный тип "GenericPublication" в следующий код, все остальное работает.

 $payloadPublication = array('payloadPublication'=> "subtags/data");

person Sharj    schedule 22.11.2010    source источник
comment
Можете ли вы обновить более подробную информацию о данных   -  person wajiw    schedule 22.11.2010
comment
Один из способов - напрямую использовать XML вместо создания объектов, и это сработало для меня. herongyang.com/WSDL/PHP-SOAP-SoapVar- Create-Encoded-Values.html   -  person Sharj    schedule 23.11.2010


Ответы (2)


Я просто предполагаю здесь на основе предоставленного вами примера (было бы полезно получить дополнительную информацию об услуге), но в основном вы бы просто сделали что-то вроде этого:

class MYGenericPublication {
  public $subtags;
  public $name;
}

$new_pub = new MYGenericPublication;
$new_pub->subtags = array('tagA', 'tagB');
$new_pub->name = 'HiThere';

$client = new SoapClient('foo?wsdl', classmap=array('GenericPublication' => 'MYGenericPublication'));
$client->doSomethingWithPublication(array('payloadPublication' => $new_pub));

$my_pub = $client->findPublication(array('name' => 'HiThere'));
echo $my_pub->subtags[0]; // tagA
echo $my_pub->name; // HiThere
echo get_class($my_pub); // MYGenericPublication

См. Мой ответ здесь: Передача определяемых пользователем типов в PHP SOAP подробнее

person Kayla Rose    schedule 22.11.2010
comment
Это не сработает при взаимодействии с сервером SOAP на основе .NET. - person Sharj; 25.11.2010
comment
Может, я здесь невежественен. Но почему бы ему не работать с .NET-сервером? - person Kayla Rose; 26.11.2010
comment
Я не уверен, что, может быть, я здесь невежественен, но я продолжал получать ошибку. Указанный тип является абстрактным: name = 'Object', где Object - ‹payloadPublication d2p1: type = Object› Я пытался отправить xml напрямую, и это сработало для меня. - person Sharj; 03.12.2010

Вы можете попробовать другие ответы, но я решил свою проблему, отправив XML напрямую, и это сработало для меня.

$ myxml = "весь xml, который вы хотите отправить в теле запроса Soap";

$ xmlvar = новая SoapVar ($ myxml, XSD_ANYXML);

$ params-> xmlDocument = (объект) $ xmlvar;

$ save_result = $ client-> yourFunctionName ($ xmlvar);

person Sharj    schedule 03.12.2010