【问题标题】:php SoapClient : param not showing up in requestphp SoapClient:参数未显示在请求中
【发布时间】:2012-05-31 17:45:23
【问题描述】:

为什么我的参数 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>

【问题讨论】:

  • WSDL 对那个字段有什么说明?
  • acme.com/EnergyAPI/CustomerMaint/DSCustomerFields.xsd"> 不知道这到底是什么意思
  • 如果是序列,我认为不可能是字符串。所以价值得到了下降。您可能想改用'p_oRSMasterFields' =&gt; array('THIS IS A TEST'),。但我不完全确定。
  • 不管我在里面放了什么,还是空白
  • harkre,非常感谢,你是对的,除了在我的情况下,我不得不做 array('any'=>'THIS IS A TEST') 出于某种上帝抛弃的原因。猜测.net

标签: php .net xml web-services soap


【解决方案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
                                ));

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多