0

为什么我的参数 p_oRSMasterFields 不会出现在请求中?这个请求是从soap服务器发回的,是不是服务器拒绝了那个特定参数的数据,只是把它清空了?

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

4

1 回答 1

1

您的 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
                                ));

幕后发生的事情是 PHPSoapClient类将您以数组形式传递的信息映射到 WSDL 中指定的类型。由于您原来的没有任何any元素/成员,因此它是空的。

于 2012-05-31T20:31:50.760 回答