php数组用于xml soap请求错误" XML似乎不完整或错误"

时间:2017-11-05 08:46:38

标签: php arrays xml soap

我正在尝试从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时接受请求数组

2 个答案:

答案 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方法。