CURL将XML数据发送到soap服务返回wsdl在php中的XML

CURL将XML数据发送到soap服务返回wsdl在php中的XML

问题描述:

我想使用curl请求获取响应。肥皂服务运行良好,肥皂客户端。但使用卷曲我没有得到适当的回应。CURL将XML数据发送到soap服务返回wsdl在php中的XML

这是我的代码示例:

$bookingRQ = '<?xml version="1.0" encoding="UTF-8"?> 
<soap-env:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap-env:Header> 
     <Interface xmlns="http://api.hotels-vacation.com/Documentation/XML/OTA/4/2011B/" ChannelIdentifierId="HIS_VACATION_XML4H" Version="2011B" Interface="VACATION QUICK CONNECT XML 4 OTA"> 
      <ComponentInfo User="XMLHISJP" Pwd="5Kh86RSr" ComponentType="Hotel" /> 
     </Interface> 
    </soap-env:Header> 
    <soap-env:Body RequestId="201505101528000000001" Transaction="OTA_HotelResRQ"> 
     <OTA_HotelResRQ xmlns="http://www.opentravel.org/OTA/2003/05" TimeStamp="2012-05-03T15:47:24-04:00" EchoToken="2012-05-03T15:47:24-04:00" Target="Production" Version="1.000" PrimaryLangID="en"> 
      <HotelReservations> 
       <HotelReservation RoomStayReservation="true" CreateDateTime="2012-05-03T15:47:24-04:00"> 
        <UniqueID Type="14" ID="HZ10014035" /> 
        <RoomStays> 
         <RoomStay> 
          <RoomTypes> 
           <RoomType RoomTypeCode="RR" /> 
          </RoomTypes> 
          <RatePlans> 
           <RatePlan RatePlanCode="RPLN"> 
            <MealsIncluded MealPlanCodes="BRE" /> 
           </RatePlan> 
          </RatePlans> 
          <RoomRates> 
           <RoomRate NumberOfUnits="1" EffectiveDate="2012-05-13" ExpireDate="2012-05-16" RoomTypeCode="RR" RatePlanCode="RPLN"> 
            <Rates> 
             <Rate EffectiveDate="2012-05-13" ExpireDate="2012-05-14" RateTimeUnit="Day"> 
              <Base AmountBeforeTax="10000" AmountAfterTax="10980" DecimalPlaces="2" CurrencyCode="USD" /> 
              <Total AmountBeforeTax="10000" AmountAfterTax="10980" DecimalPlaces="2" CurrencyCode="USD" /> 
             </Rate> 
             <Rate EffectiveDate="2012-05-14" ExpireDate="2012-05-16" RateTimeUnit="Day"> 
              <Base AmountBeforeTax="12000" AmountAfterTax="13050" DecimalPlaces="2" CurrencyCode="USD" /> 
              <Total AmountBeforeTax="24000" AmountAfterTax="26100" DecimalPlaces="2" CurrencyCode="USD" /> 
             </Rate> 
            </Rates> 
           </RoomRate> 
          </RoomRates> 
          <GuestCounts> 
           <GuestCount AgeQualifyingCode="10" Count="1" /> 
           <GuestCount AgeQualifyingCode="8" Count="1" /> 
          </GuestCounts> 
          <TimeSpan Start="2012-05-13" End="2012-05-16" /> 
          <DepositPayments> 
           <RequiredPayment> 
            <AcceptedPayments> 
             <AcceptedPayment RPH="1"> 
              <PaymentCard CardType="1" CardCode="VISA" CardNumber="4321432143214327" ExpireDate="1007" /> 
             </AcceptedPayment> 
            </AcceptedPayments> 
            <AmountPercent Amount="130.80" /> 
            <Deadline AbsoluteDeadline="2012-12-15" /> 
           </RequiredPayment> 
          </DepositPayments> 
          <BasicPropertyInfo HotelCode="105487" /> 
          <ResGuestRPHs> 
           <ResGuestRPH RPH="1" /> 
           <ResGuestRPH RPH="2" /> 
          </ResGuestRPHs> 
          <SpecialRequests> 
           <SpecialRequest Language="en" RequestCode="114"> 
            <Text Language="en">Honeymoon</Text> 
           </SpecialRequest> 
           <SpecialRequest Language="en" RequestCode="21"> 
            <Text Language="en">Non-Smoking</Text> 
           </SpecialRequest> 
          </SpecialRequests> 
         </RoomStay> 
        </RoomStays> 
        <ResGuests> 
         <ResGuest ResGuestRPH="1" AgeQualifyingCode="10" Age="21"> 
          <Profiles> 
           <ProfileInfo> 
            <Profile ProfileType="1"> 
             <Customer> 
              <PersonName> 
               <GivenName>John</GivenName> 
               <Surname>Dow</Surname> 
              </PersonName> 
             </Customer> 
            </Profile> 
           </ProfileInfo> 
          </Profiles> 
         </ResGuest> 
         <ResGuest ResGuestRPH="2" AgeQualifyingCode="8" age="10"> 
          <Profiles> 
           <ProfileInfo> 
            <Profile ProfileType="1"> 
             <Customer> 
              <PersonName> 
               <GivenName>Neil</GivenName> 
               <Surname>Dow</Surname> 
              </PersonName> 
             </Customer> 
            </Profile> 
           </ProfileInfo> 
          </Profiles> 
         </ResGuest> 
        </ResGuests> 
       </HotelReservation> 
      </HotelReservations> 
     </OTA_HotelResRQ> 
    </soap-env:Body> 
</soap-env:Envelope>'; 

$headers = array(
"Cache-Control: no-cache", 
"Content-type: text/xml; charset=\"utf-8\"", 
"Accept: text/xml", 
"SOAPAction: \"OTA_HotelResRQ\"", 
"Pragma: no-cache", 
"Content-length: ".strlen($bookingRQ) 
); 


$url = 'http://chetu.volateam.com/chetu/push/soapserver/PullService.php?wsdl'; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_TIMEOUT, 60); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 

curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $bookingRQ); 


$result = curl_exec($ch); 

$xmlstring = str_replace('soap-env:', '', $result); 
$xml = simplexml_load_string($xmlstring); 
$json = json_encode($xml); 
$array = json_decode($json,TRUE); 

我得到的WSDL XML代码作为响应。我谷歌,但我没有找到任何解决方案。我得到如下所述的响应数组。

阵列 ( [@属性] =>数组 ( [名称] => PullServiceHIS [的targetNamespace] =>http://chetu.volateam.com/chetu/push/soapserver/PullService.php

[types] => Array 
    (
    ) 

[portType] => Array 
    (
     [@attributes] => Array 
      (
       [name] => PullServiceHISPort 
      ) 

     [operation] => Array 
      (
       [@attributes] => Array 
        (
         [name] => OTA_HotelResRQ 
        ) 

       [documentation] => This method takes XML request and return a string response 
       [input] => Array 
        (
         [@attributes] => Array 
          (
           [message] => tns:OTA_HotelResRQIn 
          ) 

        ) 

       [output] => Array 
        (
         [@attributes] => Array 
          (
           [message] => tns:OTA_HotelResRQOut 
          ) 

        ) 

      ) 

    ) 

[binding] => Array 
    (
     [@attributes] => Array 
      (
       [name] => PullServiceHISBinding 
       [type] => tns:PullServiceHISPort 
      ) 

     [operation] => Array 
      (
       [@attributes] => Array 
        (
         [name] => OTA_HotelResRQ 
        ) 

       [input] => Array 
        (
        ) 

       [output] => Array 
        (
        ) 

      ) 

    ) 

[service] => Array 
    (
     [@attributes] => Array 
      (
       [name] => PullServiceHISService 
      ) 

     [port] => Array 
      (
       [@attributes] => Array 
        (
         [name] => PullServiceHISPort 
         [binding] => tns:PullServiceHISBinding 
        ) 

      ) 

    ) 

[message] => Array 
    (
     [0] => Array 
      (
       [@attributes] => Array 
        (
         [name] => OTA_HotelResRQIn 
        ) 

       [0] => Array 
        (
         [@attributes] => Array 
          (
           [name] => bookingRQ 
           [type] => xsd:string 
          ) 

        ) 

      ) 

     [1] => Array 
      (
       [@attributes] => Array 
        (
         [name] => OTA_HotelResRQOut 
        ) 

       [part] => Array 
        (
         [@attributes] => Array 
          (
           [name] => return 
           [type] => xsd:string 
          ) 

        ) 

      ) 

    ) 

我劝你使用Native PHP SoapClient类。最简单的方法就是使用一个WSDL to PHP生成器,它将帮助您将要发送的结构建模为请求。

您还必须知道,OTA调用起来可能很复杂,并且需要对rquest结构有很好的理解。

看一看https://www.wsdltophp.com