2012-05-31 33 views
0

爲什麼我的param p_oRSMasterFields不會出現在請求中?這個請求是否從肥皂服務器發送回來,是否可能是服務器拒絕該特定參數的數據並將其空白?php SoapClient:param沒有出現在請求中

$client = new SoapClient($wsdl, $options);  

$client->UpdateCustMaster(array('p_iCompanyID' => 100, 
           'p_lAccountNum' => 18087, 
           'p_sSysUser' => 'WebTest',  
           'p_oRSMasterFields' => 'THIS IS A TEST', 
           'p_lErrorCode' => 0 
           )); 

echo "REQUEST:\n" . $client->__getLastRequest() . "\n"; 



REQUEST: 

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.acme.com/"> 
<SOAP-ENV:Body> 
    <ns1:UpdateCustMaster> 
     <ns1:p_iCompanyID>100</ns1:p_iCompanyID> 
     <ns1:p_lAccountNum>18087</ns1:p_lAccountNum> 
     <ns1:p_sSysUser>WebTest</ns1:p_sSysUser> 
     <ns1:p_oRSMasterFields/> 
     <ns1:p_lErrorCode>0</ns1:p_lErrorCode> 
    </ns1:UpdateCustMaster> 
</SOAP-ENV:Body> 

+0

WSDL告訴我該字段是什麼? – hakre

+0

不知道什麼這意味着準確 –

+0

如果它是一個序列,它不能是我想的字符串。所以價值得到了下降。你可能想用''p_oRSMasterFields'=>數組('THIS IS A TEST'),'而不是。但我不完全確定。 – hakre

回答

0

您的WSDL是這樣,對於該項目:

<s:complexType> 
    <s:sequence> 
    <s:any namespace="acme.com/EnergyAPI/CustomerMaint/DSCustomerFields.xsd"/> 
    </s:sequence> 
</s:complexType> 

所以,你需要給至少一個any因素在裏面:

$client->UpdateCustMaster(array('p_iCompanyID' => 100, 
           'p_lAccountNum' => 18087, 
           'p_sSysUser' => 'WebTest',  
           'p_oRSMasterFields' => array('any' => 'THIS IS A TEST'), 
                 ################################ 
           'p_lErrorCode' => 0 
           )); 

什麼背後發生場景是PHP SoapClient類映射您在f中傳遞的信息數組的orm與WSDL中指定的類型相關聯。由於你原來的元素/成員沒有任何any,它是空的。