PHP SoapClient,wsdl有必填字段,但实际上不是必需的

PHP SoapClient,wsdl有必填字段,但实际上不是必需的,php,.net,soap,wsdl,Php,.net,Soap,Wsdl,好的,那么另一个PHPSOAPClient问题,您猜它访问.NETWSDL 我正在访问一个soap服务,该服务的元素的最小值为1,因此如果您从php SoapClient中忽略这些元素,它将抛出一个错误,表示该元素不存在 如果我提供了它们/提供了null值/传递空值,那么相关的soap服务将抛出一个错误。所讨论的参数是布尔值 然而,当我通过SoapUI发送请求时,如果没有xml中的参数,我会得到一个有效的响应 也有一个朋友在.net中尝试过这个,这个对象的参数有一个默认值null。我的朋友告诉我

好的,那么另一个PHPSOAPClient问题,您猜它访问.NETWSDL

我正在访问一个soap服务,该服务的元素的最小值为1,因此如果您从php SoapClient中忽略这些元素,它将抛出一个错误,表示该元素不存在

如果我提供了它们/提供了null值/传递空值,那么相关的soap服务将抛出一个错误。所讨论的参数是布尔值

然而,当我通过SoapUI发送请求时,如果没有xml中的参数,我会得到一个有效的响应

也有一个朋友在.net中尝试过这个,这个对象的参数有一个默认值null。我的朋友告诉我.net中的sting有一个默认的空值,而布尔值没有

我不知道应该尝试什么,目前使用的是不推荐的调用方法

更新:

wsdl中的部分如下所示:

<s:complexType name="BankDetails">
    <s:sequence>
        <s:element minOccurs="0" maxOccurs="1" name="AccountName" type="s:string"/>
        <s:element minOccurs="0" maxOccurs="1" name="AccountNumber" type="s:string"/>
        <s:element minOccurs="1" maxOccurs="1" name="Amex" type="s:boolean"/>
        <s:element minOccurs="1" maxOccurs="1" name="ChequeCard" type="s:boolean"/>
        <s:element minOccurs="1" maxOccurs="1" name="CreditLimit" type="s:decimal"/>
        <s:element minOccurs="1" maxOccurs="1" name="CurrentAccount" type="s:boolean"/>
        <s:element minOccurs="1" maxOccurs="1" name="DepositAccount" type="s:boolean"/>
        <s:element minOccurs="1" maxOccurs="1" name="Diners" type="s:boolean"/>
        <s:element minOccurs="1" maxOccurs="1" name="DirectDebit" type="s:boolean"/>
        <s:element minOccurs="1" maxOccurs="1" name="JointAccount" type="s:boolean"/>
        <s:element minOccurs="1" maxOccurs="1" name="Mastercard" type="s:boolean"/>
        <s:element minOccurs="1" maxOccurs="1" name="Months" type="s:int"/>
        <s:element minOccurs="1" maxOccurs="1" name="MortgageAccount" type="s:boolean"/>
        <s:element minOccurs="1" maxOccurs="1" name="OtherCard" type="s:boolean"/>
        <s:element minOccurs="1" maxOccurs="1" name="PaymentBookRequired" type="s:boolean"/>
        <s:element minOccurs="1" maxOccurs="1" name="Storecard" type="s:boolean"/>
        <s:element minOccurs="1" maxOccurs="1" name="Visa" type="s:boolean"/>
        <s:element minOccurs="1" maxOccurs="1" name="Years" type="s:int"/>
    </s:sequence>
</s:complexType>

我在Soap UI中成功发送的请求是:

<BankDetails>
    <CurrentAccount>true</CurrentAccount>
    <Months>0</Months>
    <Years>3</Years>
</BankDetails>

真的
0
3.

假设您正在传递XML,请尝试删除整个空元素。例如,如果因为它是空的而中断,只需删除整行。大多数WSDL不喜欢接收空的行。他们宁愿在里面有东西,或者根本没有那条线


或者,尝试传递一个假布尔值。

我们已经尝试了大多数组合,但是,如果您确实传递了一些字段,那么它需要其他字段。如果元素不存在,SoapClient将出错并且不发送请求。必须查看您的文档才能真正找到答案。听起来你可能有一些依赖关系,这才是问题的根源。我也有同样的问题。你都解决了吗?删除该元素会给我一个错误,即它不存在。但是在SoapUI中省略它很好。不,对不起。我确实快速查看了代码,我不确定这与什么有关。网络肥皂的东西大部分时间都很糟糕。您是否尝试过使用php wsdl代码生成器?我通过指定元素,但只传递空字符串,0表示int,false表示boolean,最终使其工作。。现在一切正常,但我真的很想知道为什么SoapUI可以省略这些元素,而我不能。。很奇怪。。但是谢谢你,男人:)