PHP SOAP - > Xml请求
问题描述:
我有一个小问题。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
如何解决?
答
目前,我正在使用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);
嘿,我有同样的问题。 GoGlobal服务器及其所有的SOAP令我发疯......你是否设法解决这个问题? – tomazahlin