2011-12-12 2 views
1

문제는 SOAP을 통해 특정 웹 서비스에 클래스의 배열을 보내면 구조를 변경할 수 없다는 것입니다. 여기SOAP로 복잡한 구조 사용하기

$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; 
    } 

:

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

당신은 내가 그것에 대응하고있어 코드를 찾을 수 있습니다 : 당신이 비누 함수의 스키마를 볼 수 아래로 여기

전송 된 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> 

이 비누 요청에서 Extras 개체 배열을 찾을 수 없습니다.

개체를 올바르게 보내려면 개체를 어떻게 작성해야합니까?

+0

설명되어 있습니다. 나는이 코드에 아무런 문제가 보이지 않으며 사실 "엑스트라"를 추가한다. http://codepad.org/11u4KQU3. 나는 엑스트라가이 코드에 들어올 것으로 예상하지 않는다고 의심한다. – gregmac

답변

1

나는 다른 게시물을 사용하여 문제를 해결했으며 많은 성질을 보였다.

$params->Extras = array_to_objecttree($params->Extras); 

array_to_objecttree는 당신은 전에 요청을 (예를 들어, 위해 var_dump()를) 전송에 $의 PARAMS 배열의 내용을 확인해야합니다 여기 Passing array to SOAP function in PHP