我正在尝试使用php和SoapClient类构建https://ws.farebuzz.com/FlightGateway.asmx?WSDL的界面.
我设法克服了身份验证标题,但是当我尝试调用方法时我被卡住了......我总是得到:
未捕获的SoapFault异常:[soap:Server]服务器无法处理请求.--->对象引用未设置为对象的实例.
我尝试像这样(作为对象)调用它:
class SearchFlights{
public $NumberOfAdults;
public $ClassOfService;
public $TypeOfTrip;
public $FromCity;
public $ToCity;
}
$parameters = new SearchFlights();
$parameters->NumberOfAdults = 2;
$parameters->ClassOfService = 'ECONOMY';
$parameters->FromCity = 'ECONOMY';
$parameters->ToCity = '1te';
$parameters->TypeOfTrip = 'NONE';
$this->client->SearchFlights($parameters);
Run Code Online (Sandbox Code Playgroud)
并作为一个数组:
$parameters = array('ToCity' => 'testttt',...);
Run Code Online (Sandbox Code Playgroud)
但我得到了同样的错误.有人可以帮忙吗?
谢谢
索林
您的WSDL声明必须以这种方式调用它:
$this->client->SearchFlights(array('searchRequest' => $parameters));
Run Code Online (Sandbox Code Playgroud)
请注意,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>
Run Code Online (Sandbox Code Playgroud)
试试这个:
$this->client->SearchFlights(array('parameters' => $parameters));
Run Code Online (Sandbox Code Playgroud)
我在尝试访问.net webservice时遇到了问题,这为我解决了这个问题.
| 归档时间: |
|
| 查看次数: |
25073 次 |
| 最近记录: |