如何使用SoapClient在PHP中将XML数据作为参数发送

时间:2015-04-08 22:55:21

标签: php xml web-services soap

我正在尝试实施一项网络服务。 当我使用SoapUI并发送原始XML请求时,它完美地工作:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://ws.wsdomain.com">
       <soap:Header/>
       <soap:Body>
          <web:mainFunction>
             <login>
                <loginData>
                   <name>Freak</name>
                   <password>qwerty</password>
                </loginData>
             </login>
             <xmlData>
             <![CDATA[
             <data>
              <id>123456</id>
              <value>69</value>
             </data>
            ]]>
           </xmlData>
          </web:mainFunction>
       </soap:Body>
    </soap:Envelope>

但是,如果我尝试使用PHP SoapClient,它就不会工作。

<?php

class loginData {var $name = 'Freak'; var $password = 'qwerty';}
class login {var $loginData;} 
class login_input {var $login;}

$loginData = new loginData;
$login = new login;
$login->loginData = $loginData;

$login_input = new ins;
$login_input->login = $login;        

$xml = '<data>
         <id>123456</id>
         <value>69</value>
        </data>';

class xmlData {var $xmlData;}
$xmlData = new xmlData;
$xmlData->xmlData = $xml;   
class xml_input {var $xmlData;}
$xml_input = new xml_input;
$xml_input->xmlData = $xmlData;  

$soapClient = new SoapClient("https://test.ws.wsdomain.com/files/services/structure?wsdl", array('trace' => 1,'cache_wsdl' => WSDL_CACHE_NONE)); 
$ws_result = $soapClient->mainFunction($login_input,$xml_input,true); 

它抛出:

  

致命错误:未捕获的SoapFault异常:[客户端] SOAP-ERROR:编码:对象没有&#39; xmlData&#39;属性

第一个参数(登录)工作正常。但是第二个使用XML数据是一个痛苦的事情。

我几乎尝试了所有东西(而不是$ xml变量中的简单XML字符串,我也尝试使用simplexml_load_string函数将其放入一个simplexml对象中)但似乎没有任何效果。

0 个答案:

没有答案