php - 可选参数对于使用 WSDL 模式的 Soap 调用不是可选的

标签 php soap sap webservice-client

我尝试调用 SAP 提供的网络服务来更新客户数据。我使用 SoapUI 来测试连接和所需的实际请求。一切正常,这是更改电子邮件地址的 SoapUI 请求的样子:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:sap-com:document:sap:soap:functions:mc-style">
   <soapenv:Header/>
   <soapenv:Body>
      <urn:Ze12RfcMaintainCustomer>     
         <!--Optional:-->
         <PiTEmail>
            <!--Zero or more repetitions:-->
            <item>
               <StdNo>X</StdNo>
               <EMail>me@example.com</EMail>
            </item>
         </PiTEmail>
         <!--Optional:-->
         <PiTEmailX>
            <!--Zero or more repetitions:-->
            <item>
               <StdNo>X</StdNo>
               <EMail>X</EMail>
            </item>
         </PiTEmailX>
         <PieKunnr>4711</PieKunnr>
      </urn:Ze12RfcMaintainCustomer>
   </soapenv:Body>
</soapenv:Envelope>

webservice 接受更多的参数,但所有这些都是可选的,对于这个任务不需要。

现在,如果我尝试在 WSDL 模式下使用 SoapClient 在 PHP 中执行相同的请求,我会收到请求中未包含的每个可选参数的错误,例如:
SOAP-ERROR: Encoding: object hasn't 'EmailSrch' property

这是我的代码(简化):
$params = array(
    'PieKunnr' => 4711,
    'PiTEmail' => array(
        'item' => array(
            'StdNo' => 'X',
            'EMail' => 'me@example.com',                    
        ),        
    ),
    'PiTEmailX' => array(
        'item' => array(
            'StdNo' => 'X',
            'EMail' => 'X',                    
        ),        
    ),    
);

$result = $service->Ze12RfcMaintainCustomer($params);

如果我将所有可选参数放入请求中,它就可以工作。

为什么在 SoapClient 请求中不能省略可选参数?

最佳答案

结果证明,WSDL 文件(由 SAP 自动生成)没有所有元素的“minOccurs”属性,尽管服务端点不需要它们。我现在在非 WSDL 模式下使用 Soap 客户端 - 这似乎是解决我的问题的最简单方法。

关于php - 可选参数对于使用 WSDL 模式的 Soap 调用不是可选的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4538128/

相关文章:

php - SSL证书问题: unable to get issuer certificate

c# - 可以将 Visual Studio 2017 与 SAP .NET 连接器 3.0 一起使用吗?

带有 SAP GUI 7.40 的 Excel VBA - SAP.Functions 不起作用

java - org.apache.axis.message.SOAPBodyElement 无法转换为 weblogic.xml.xmlnode.XMLNode

java - Rally API 新手,尝试添加测试用例结果

php - 带有 Zend 框架 2 的 SOAP 客户端

c# - 如何找到通过 C# 应用程序实现 SAP 自动化所需的连接字符串?

javascript - 如何不让用户直接从 AJAX 使用的浏览器访问 php 文件?

php - MYSQL UNION 跨 3 个表与 ORDER BY

php - Googledrive 应用程序的刷新 token 会过期吗?