2014-03-06 108 views
1

我有一个小问题。PHP SOAP - > Xml请求

我必须发送XML请求,我写了代码,但它不起作用。从WSDL

我的代码

$url = 'http://xml.qa.goglobal.travel/XMLWebService.asmx?WSDL'; 
$client = new SoapClient($url, array('soap_version' => SOAP_1_2)); 

$xml = ' 
POST /XMLWebService.asmx HTTP/1.1 
Host: xml.qa.goglobal.travel 
Content-Type: application/soap+xml; charset=utf-8 
Content-Length: 300    

<?xml version="1.0" encoding="utf-8"?> 
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> 
<soap12:Body> 
<Root> 
    <Header> 
     <Agency>1520475</Agency> 
     <User>PGHPOLXML</User> 
     <Password>MY_PASSWORD</Password> 
     <Operation>HOTEL_SEARCH_REQUEST</Operation> 
     <OperationType>Request</OperationType> 
    </Header> 
    <Main> 
     <SortOrder>0</SortOrder> 
     <FilterPriceMin>0</FilterPriceMin> 
     <FilterPriceMax>10000</FilterPriceMax> 
     <MaximumWaitTime>30</MaximumWaitTime> 
     <MaxResponses>1000</MaxResponses> 
     <FilterRoomBasises> 
     <FilterRoomBasis></FilterRoomBasis> 
     </FilterRoomBasises> 
     <HotelName></HotelName> 
     <CityCode>75</CityCode> 
     <ArrivalDate>2014-05-06</ArrivalDate> 
     <Nights>3</Nights> 
     <Rooms> 
      <Room Type="TWN" RoomCount="1" CotCount="0"></Room> 
     </Rooms> 
    </Main> 
</Root> 
</soap12:Body> 
</soap12:Envelope>'; 

$a = $client->__call(
    'MakeRequest', 
    array(
     array(
      'requestType' => 'xml', 
      'xmlRequest' => $xml 
     ) 
    ) 
); 

响应是

object(stdClass)#2 (1) { ["MakeRequestResult"]=> string(0) "" } 

从响应是

array(4) { [0]=> string(86) "MakeRequestCompressedResponse MakeRequestCompressed(MakeRequestCompressed $parameters)" [1]=> string(56) "MakeRequestResponse MakeRequest(MakeRequest $parameters)" [2]=> string(86) "MakeRequestCompressedResponse MakeRequestCompressed(MakeRequestCompressed $parameters)" [3]=> string(56) "MakeRequestResponse MakeRequest(MakeRequest $parameters)" } 

端点这个服务是http://xml.qa.goglobal.travel/XMLWebService.asmx

如何解决?

+0

嘿,我有同样的问题。 GoGlobal服务器及其所有的SOAP令我发疯......你是否设法解决这个问题? – tomazahlin

回答

0

目前,我正在使用Go Global Travel XML API,并通过PHP cURL库设法将其称为Web服务功能。这里是一个代码片段:

$URL = 'http://xml.qa.goglobal.travel/XMLWebService.asmx?op=MakeRequest'; 
$user = 'USERNAME'; 
$password = 'PASSWORD'; 
$request = '<?xml version="1.0" encoding="utf-8"?> 
    <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> 
     <soap12:Body> 
      <MakeRequest xmlns="http://www.goglobal.travel/"> 
       <requestType>11</requestType> 
       <xmlRequest><![CDATA[ 
       <Root> 
        <Header> 
         <Agency>AgencyCode</Agency> 
         <User>' . $user . '</User> 
         <Password>' . $password . '</Password> 
         <Operation>HOTEL_SEARCH_REQUEST</Operation> 
         <OperationType>Request</OperationType> 
        </Header> 
        <Main Version="2.0" Currency="EUR"> 
         <SortOrder>1</SortOrder> 
         <CityCode>2330</CityCode> 
         <ArrivalDate>2016-08-01</ArrivalDate> 
         <Nights>3</Nights> 
         <Rooms> 
          <Room Adults="2" RoomCount="1"></Room> 
         </Rooms> 
        </Main> 
       </Root> 
       ]]></xmlRequest> 
      </MakeRequest> 
     </soap12:Body> 
    </soap12:Envelope>'; 
$headers = array("Content-type: application/soap+xml; charset=\"utf-8\"", "Content-length: " . strlen($request)); 

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, $URL); 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $request); 
curl_setopt($ch, CURLOPT_USERPWD, $user . ':' . $password); 
curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

$response = curl_exec($ch);