2011-12-12 69 views
1

问题是,我无法成功通过SOAP发送一个类的数组到特定的Web服务,我无法更改他的结构。与SOAP一起使用复杂结构

这里下面你会看到肥皂功能的模式:

enter image description here http://www.elyotech.com/share/yoni/forum/developpeznet-soap.jpg

在这里,你会发现我是与之对应的代码:

$s = new soapclient($URL_WEBSERVICE,array('wsdl'=>true,"trace"=>true)); 
$params = new stdClass(); 
$params->loginInfo = new stdClass(); 
$params->loginInfo->UserName = 'username'; 

    $params->loginInfo->Password = 'password'; 
    $params->loginInfo->LanguageCode = 'en'; 
    $params->reservation = new stdClass(); 
    $params->reservation->EmailRecipient2 = '[email protected]'; 
    $params->reservation->EmailRecipient3 = '[email protected]'; 
    $params->reservation->FirstName = 'Yoni' 
    foreach($extras as $id=>$extra) 
    { 
     $params->Extras[$id]= new stdClass(); 
     $params->Extras[$id]->SelectedExtra = new stdClass(); 
     $params->Extras[$id]->ExtensionData = new stdClass(); 
     $params->Extras[$id]->SelectedExtra->Amount = 1; 
     $params->Extras[$id]->SelectedExtra->ID = $extra; 
    } 

这里是发送的SOAP请求:

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/"> 
    <SOAP-ENV:Body> 
    <ns1:CreateReservation> 
     <ns1:loginInfo> 
     <ns1:UserName>monusername</ns1:UserName> 
     <ns1:Password>monpass</ns1:Password> 
     <ns1:LanguageCode>en</ns1:LanguageCode> 
     </ns1:loginInfo> 
     <ns1:reservation> 
     <ns1:EmailRecipient2>[email protected]</ns1:EmailRecipient2> 
     <ns1:EmailRecipient3>[email protected]</ns1:EmailRecipient3> 
     <ns1:FirstName>Yoni</ns1:FirstName> 
     </ns1:reservation> 
    </ns1:CreateReservation> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

在这个Soap请求中,我找不到Extras对象数组。

你有任何想法应该如何创建我的对象才能正确发送它?

+0

描述你应该在发送请求(例如,后续代码var_dump()的话)之前,检查$ params数组中的内容。我没有看到代码的任何问题,实际上它增加了“extras”就好了:http://codepad.org/11u4KQU3。我怀疑$额外是不是你期望它进入这个代码。 – gregmac

回答