我正在尝试从PHP soap客户端请求Juniper很多酒店服务,但我收到错误的响应(XML似乎不完整或错误)请求XML必须像那样
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns="http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<HotelAvail>
<HotelAvailRQ Version="1.1" Language="en">
<Login Email="user@mydomain.com" Password="pass"/>
<Paxes>
<Pax IdPax="1">
<Age>31</Age>
</Pax>
<Pax IdPax="2">
<Age>29</Age>
</Pax>
<Pax IdPax="3">
<Age>5</Age>
</Pax>
</Paxes>
<HotelRequest>
<SearchSegmentsHotels>
<SearchSegmentHotels Start="2014-04-24" End="2014-04-28" DestinationZone="1953"/>
<CountryOfResidence>ES</CountryOfResidence>
</SearchSegmentsHotels>
<RelPaxesDist>
<RelPaxDist>
<RelPaxes>
<RelPax IdPax="1"/>
<RelPax IdPax="2"/>
<RelPax IdPax="3"/>
</RelPaxes>
</RelPaxDist>
</RelPaxesDist>
</HotelRequest>
<AdvancedOptions>
<ShowAllCombinations>1</ShowAllCombinations>
<ShowHotelInfo>1</ShowHotelInfo>
<ShowBreakdownPrice>1</ShowBreakdownPrice>
</AdvancedOptions>
</HotelAvailRQ>
</HotelAvail>
</soapenv:Body>
</soapenv:Envelope>
和print_r函数打印后的请求数组就像那样
Array (
[HotelAvailRQ] => Array (
[Version] => 1.1 [Language] => en
[Login] => Array (
[Email] => xxxxxxxxx[Password] => xxxxxxxxxx
)
[Paxes] => Array (
[0] => Array (
[Pax] => Array (
[IdPax] => 1 [Age] => 15
)
)
[1] => Array (
[Pax] => Array (
[IdPax] => 2 [Age] => 30
)
)
[2] => Array (
[Pax] => Array (
[IdPax] => 3 [Age] => 50
)
)
)
[HotelRequest] => Array (
[SearchSegmentsHotels] => Array (
[Start] => 2017-11-20 [End] => 2017-11-25 [DestinationZone] => 1953 [CountryOfResidence] => ES [Boards] => Array (
[Board] => Array (
[Type] => AD
)
)
)
[RelPaxesDist] => Array (
[RelPaxDist] => Array (
[RelPaxes] => Array (
[RelPax] => Array (
[0] => Array (
[IdPax] => 1
)
[1] => Array (
[IdPax] => 2
)
[2] => Array (
[IdPax] => 3
)
)
)
)
)
)
[AdvancedOptions] => Array (
[ShowHotelInfo] => 1
)
)
)
我需要在SOAP客户端请求转换为XML时接受请求数组
答案 0 :(得分:0)
有var_export函数打印的数组
array ( 'HotelAvailRQ' => array ( 'Version' => '1.1', 'Language' => 'en', 'Login' => array ( 'Email' => 'xxxxxxxxx', 'Password' => 'xxxxxxxxxxxx', ), 'Paxes' => array ( 0 => array ( 'Pax' => array ( 'IdPax' => 1, 'Age' => '15', ), ), 1 => array ( 'Pax' => array ( 'IdPax' => 2, 'Age' => '30', ), ), 2 => array ( 'Pax' => array ( 'IdPax' => 3, 'Age' => '50', ), ), ), 'HotelRequest' => array ( 'SearchSegmentsHotels' => array ( 'Start' => '2017-11-20', 'End' => '2017-11-25', 'DestinationZone' => '1953', 'CountryOfResidence' => 'ES', 'Boards' => array ( 'Board' => array ( 'Type' => 'AD', ), ), ), 'RelPaxesDist' => array ( 'RelPaxDist' => array ( 'RelPaxes' => array ( 'RelPax' => array ( 0 => array ( 'IdPax' => 1, ), 1 => array ( 'IdPax' => 2, ), 2 => array ( 'IdPax' => 3, ), ), ), ), ), ), 'AdvancedOptions' => array ( 'ShowHotelInfo' => true, ), ), )
答案 1 :(得分:0)
今天没有更好的解决方案,使用WSDL到PHP生成器,确保正确构建您的PHP请求。
我只能建议您使用PackageGenerator项目。
如果它不起作用,它可能来自于本机SoapClient类无法正确处理这种WSDL的事实,因此您必须覆盖SoapClient :: __ doRequest方法。