Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP SOAP问题:对象引用未设置为对象的实例_Php_Soap - Fatal编程技术网

PHP SOAP问题:对象引用未设置为对象的实例

PHP SOAP问题:对象引用未设置为对象的实例,php,soap,Php,Soap,我正在尝试使用php和SoapClient类构建一个接口 我设法越过了身份验证头,但当我试图调用一个方法时,我被卡住了。。我总是得到: 未捕获的SoapFault异常:[soap:Server]服务器无法处理请求。-->对象引用未设置为对象的实例 我试着这样称呼它(作为对象): 作为一个数组,如: $parameters = array('ToCity' => 'testttt',...); 但我也犯了同样的错误。有人能帮忙吗 谢谢 索林尝试使用以下方法: $this->clien

我正在尝试使用php和SoapClient类构建一个接口

我设法越过了身份验证头,但当我试图调用一个方法时,我被卡住了。。我总是得到:


未捕获的SoapFault异常:[soap:Server]服务器无法处理请求。-->对象引用未设置为对象的实例

我试着这样称呼它(作为对象):

作为一个数组,如:

$parameters = array('ToCity' => 'testttt',...);
但我也犯了同样的错误。有人能帮忙吗

谢谢

索林

尝试使用以下方法:

$this->client->SearchFlights(array('parameters' => $parameters));

我在尝试访问.net Web服务时遇到问题,这为我解决了问题。

如果我正确理解WSDL,SearchFlights对象应该包含FlightSearchRequest对象。后者包含参数

试试这个:

$parameters->FlightSearchRequest->NumberOfAdults = 2;
$parameters->FlightSearchRequest->ClassOfService = 'ECONOMY';
// etc...
$this->client->SearchFlights($parameters);

我也想知道这个问题的答案,最后我知道了原因:
我们应该知道通过SOAP请求发送的节点的数据类型以及它们是否是强制的。因此,如果这些节点中的任何一个不应该遵循WSDL的严格指令,我们将得到一个错误,即“对象引用未设置为对象的实例”。 我将给你举一个我面对的例子: 我遇到了同样的问题,我知道我没有向一个节点发送任何值,除了至少一个值或它的一次出现之外,然后我验证它,如果成功,我发送该值,否则是空字符串,它告诉WSDL这至少是一次出现,并且有一个值。 最后我解决了这个错误。 这里的基线是,如果这些节点是强制的,并且没有完全发送,则将引发此异常,否则将向这些节点发送空字符串。
感谢您的WSDL声明必须以这种方式调用它:

$this->client->SearchFlights(array('searchRequest' => $parameters));
请注意,
searchRequest
名称是重要的

该服务还有各种强制输入,您应该确保这些输入存在。通过查看代码,您丢失了一些

请查看此处的
FlightSearchRequest
复杂类型。每个具有
minOccurs=1
的参数都是必需的

<s:complexType name="FlightSearchRequest">
    <s:sequence>
        <s:element minOccurs="1" maxOccurs="1" name="TypeOfTrip" type="tns:TripType"/>
        <s:element minOccurs="0" maxOccurs="1" name="FromCity" type="s:string"/>
        <s:element minOccurs="0" maxOccurs="1" name="ToCity" type="s:string"/>
        <s:element minOccurs="0" maxOccurs="1" name="ReturnFromCity" type="s:string"/>
        <s:element minOccurs="0" maxOccurs="1" name="ReturnToCity" type="s:string"/>
        <s:element minOccurs="1" maxOccurs="1" name="DepartureDate" type="s:dateTime"/>
        <s:element minOccurs="1" maxOccurs="1" name="ReturnDate" type="s:dateTime"/>
        <s:element minOccurs="1" maxOccurs="1" name="NumberOfAdults" type="s:int"/>
        <s:element minOccurs="1" maxOccurs="1" name="NumberOfChildren" type="s:int"/>
        <s:element minOccurs="1" maxOccurs="1" name="NumberOfInfantsInLap" type="s:int"/>
        <s:element minOccurs="1" maxOccurs="1" name="NumberOfInfantsOnSeat" type="s:int"/>
        <s:element minOccurs="1" maxOccurs="1" name="NumberOfSeniors" type="s:int"/>
        <s:element minOccurs="0" maxOccurs="1" name="AirlinePreference" type="s:string"/>
        <s:element minOccurs="1" maxOccurs="1" name="ClassOfService" type="tns:FlightClass"/>
        <s:element minOccurs="1" maxOccurs="1" name="IsNonStop" type="s:boolean"/>
        <s:element minOccurs="1" maxOccurs="1" name="ConsolidatorFaresOnly" type="s:boolean"/>
        <s:element minOccurs="0" maxOccurs="1" name="FpAffiliate" type="s:string"/>
        <s:element minOccurs="0" maxOccurs="1" name="FpSubAffiliate" type="s:string"/>
    </s:sequence>
</s:complexType>


缺少必需参数不是此问题的原因。这是另一个问题,当第一个问题得到解决时,这一问题就会很明显,即错误的输入结构。“对象引用未设置为对象的实例。”通常意味着SOAP请求中的参数错误/缺失。确保不仅要检查,还要检查(这是我的问题)。
<s:complexType name="FlightSearchRequest">
    <s:sequence>
        <s:element minOccurs="1" maxOccurs="1" name="TypeOfTrip" type="tns:TripType"/>
        <s:element minOccurs="0" maxOccurs="1" name="FromCity" type="s:string"/>
        <s:element minOccurs="0" maxOccurs="1" name="ToCity" type="s:string"/>
        <s:element minOccurs="0" maxOccurs="1" name="ReturnFromCity" type="s:string"/>
        <s:element minOccurs="0" maxOccurs="1" name="ReturnToCity" type="s:string"/>
        <s:element minOccurs="1" maxOccurs="1" name="DepartureDate" type="s:dateTime"/>
        <s:element minOccurs="1" maxOccurs="1" name="ReturnDate" type="s:dateTime"/>
        <s:element minOccurs="1" maxOccurs="1" name="NumberOfAdults" type="s:int"/>
        <s:element minOccurs="1" maxOccurs="1" name="NumberOfChildren" type="s:int"/>
        <s:element minOccurs="1" maxOccurs="1" name="NumberOfInfantsInLap" type="s:int"/>
        <s:element minOccurs="1" maxOccurs="1" name="NumberOfInfantsOnSeat" type="s:int"/>
        <s:element minOccurs="1" maxOccurs="1" name="NumberOfSeniors" type="s:int"/>
        <s:element minOccurs="0" maxOccurs="1" name="AirlinePreference" type="s:string"/>
        <s:element minOccurs="1" maxOccurs="1" name="ClassOfService" type="tns:FlightClass"/>
        <s:element minOccurs="1" maxOccurs="1" name="IsNonStop" type="s:boolean"/>
        <s:element minOccurs="1" maxOccurs="1" name="ConsolidatorFaresOnly" type="s:boolean"/>
        <s:element minOccurs="0" maxOccurs="1" name="FpAffiliate" type="s:string"/>
        <s:element minOccurs="0" maxOccurs="1" name="FpSubAffiliate" type="s:string"/>
    </s:sequence>
</s:complexType>