2016-11-14 10 views
0

私はRadixx ConnectPoint(SOAP)と呼ばれるものを使用しています。私は、情報を正しく要求する方法については若干問題があります。これが明白な場合はお詫び申し上げます。私はSOAPについて非常に新しいです。私は特定のキャリアコードを削除したPHP SoapClient()でオブジェクトを0回以上繰り返すにはどうすればよいですか?

POST http://xxx.connectpoint.uat.radixx.com/ConnectPoint.Pricing.svc HTTP/1.0 
Accept-Encoding: gzip,deflate 
Content-Type: text/xml;charset=UTF-8 
SOAPAction: "http://tempuri.org/IConnectPoint_Pricing/RetrieveFareQuote" 
Content-Length: 4076 
Host: xxx.connectpoint.uat.radixx.com 
Connection: Keep-Alive 
User-Agent: Apache-HttpClient/4.5.2 (Java/1.8.0_77) 

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:rad="http://schemas.datacontract.org/2004/07/Radixx.ConnectPoint.Request" xmlns:rad1="http://schemas.datacontract.org/2004/07/Radixx.ConnectPoint.Pricing.Request.FareQuote"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <tem:RetrieveFareQuote> 
     <!--Optional:--> 
     <tem:RetrieveFareQuoteRequest> 
      <rad:SecurityGUID>7fa327412a4a47hbu39fi87erfk0tan5ra580cd0a08e</rad:SecurityGUID> 
      <rad:CarrierCodes> 
       <!--Zero or more repetitions:--> 
       <rad:CarrierCode><rad:AccessibleCarrierCode>xxx</rad:AccessibleCarrierCode></rad:CarrierCode> 
      </rad:CarrierCodes> 
      <!--Optional:--> 
      <rad:ClientIPAddress>?</rad:ClientIPAddress> 
      <!--Optional:--> 
      <rad:HistoricUserName>?</rad:HistoricUserName> 
      <rad1:CurrencyOfFareQuote>USD</rad1:CurrencyOfFareQuote> 
      <rad1:PromotionalCode></rad1:PromotionalCode> 
      <rad1:IataNumberOfRequestor></rad1:IataNumberOfRequestor> 
      <rad1:CorporationID>-214</rad1:CorporationID> 
      <rad1:FareFilterMethod>NoCombinabilityRoundtripLowestFarePerFareType</rad1:FareFilterMethod> 
      <rad1:FareGroupMethod>WebFareTypes</rad1:FareGroupMethod> 
      <rad1:InventoryFilterMethod>Available</rad1:InventoryFilterMethod> 
      <rad1:FareQuoteDetails> 
       <!--Zero or more repetitions:--> 
       <rad1:FareQuoteDetail> 
        <rad1:Origin>BRL</rad1:Origin> 
        <rad1:Destination>ORD</rad1:Destination> 
        <rad1:UseAirportsNotMetroGroups>false</rad1:UseAirportsNotMetroGroups> 
        <!--Optional:--> 
        <rad1:UseAirportsNotMetroGroupsAsRule>false</rad1:UseAirportsNotMetroGroupsAsRule> 
        <!--Optional:--> 
        <rad1:UseAirportsNotMetroGroupsForFrom>false</rad1:UseAirportsNotMetroGroupsForFrom> 
        <!--Optional:--> 
        <rad1:UseAirportsNotMetroGroupsForTo>false</rad1:UseAirportsNotMetroGroupsForTo> 
        <rad1:DateOfDeparture>2016-11-20</rad1:DateOfDeparture> 
        <rad1:FareTypeCategory>1</rad1:FareTypeCategory> 
        <rad1:FareClass></rad1:FareClass> 
        <rad1:FareBasisCode></rad1:FareBasisCode> 
        <rad1:Cabin></rad1:Cabin> 
        <rad1:LFID>-214</rad1:LFID> 
        <rad1:OperatingCarrierCode></rad1:OperatingCarrierCode> 
        <rad1:MarketingCarrierCode></rad1:MarketingCarrierCode> 
        <rad1:NumberOfDaysBefore>0</rad1:NumberOfDaysBefore> 
        <rad1:NumberOfDaysAfter>0</rad1:NumberOfDaysAfter> 
        <rad1:LanguageCode>en</rad1:LanguageCode> 
        <rad1:TicketPackageID>1</rad1:TicketPackageID> 
        <rad1:FareQuoteRequestInfos> 
        <!--Zero or more repetitions:--> 
        <rad1:FareQuoteRequestInfo> 
         <rad1:PassengerTypeID>1</rad1:PassengerTypeID> 
         <rad1:TotalSeatsRequired>1</rad1:TotalSeatsRequired> 
        </rad1:FareQuoteRequestInfo> 

              <rad1:FareQuoteRequestInfo> 
         <rad1:PassengerTypeID>5</rad1:PassengerTypeID> 
         <rad1:TotalSeatsRequired>1</rad1:TotalSeatsRequired> 
        </rad1:FareQuoteRequestInfo> 

              <rad1:FareQuoteRequestInfo> 
         <rad1:PassengerTypeID>6</rad1:PassengerTypeID> 
         <rad1:TotalSeatsRequired>1</rad1:TotalSeatsRequired> 
        </rad1:FareQuoteRequestInfo> 
        </rad1:FareQuoteRequestInfos> 
        <!--Optional:--> 

       </rad1:FareQuoteDetail> 
      </rad1:FareQuoteDetails> 
     </tem:RetrieveFareQuoteRequest> 
     </tem:RetrieveFareQuote> 
    </soapenv:Body> 
</soapenv:Envelope> 

とXXXとそれらを置き換える:

はテスト目的のために私はAPIの開発者が、後に私の要求をモデル化するために私を送ったことを、このXMLの例があります。私はFareQuoteRequestInfosオブジェクトを追加するのを忘れていることを私は見ますprint_rを実行した後はGUIDセキュリティコードは

$data->CurrencyOfFareQuote = "USD"; 
$data->CorporationID = -214; 
$data->FareFilterMethod = "NoCombinabilityRoundtripLowestFarePerFareType"; 
$data->FareGroupMethod = "WebFareTypes"; 
$data->InventoryFilterMethod = "Available"; 
$data->ClientIPAddress = "?"; // Optional 
$data->HistoricUserName = "?"; // Optional 
$data->PromotionalCode = null; 
$data->IataNumberOfRequestor = null; 
$data->FareQuoteDetails->FareQuoteDetail->Origin = "BRL"; 
$data->FareQuoteDetails->FareQuoteDetail->Destination = "ORD"; 
$data->FareQuoteDetails->FareQuoteDetail->UseAirportsNotMetroGroups = false; 
$data->FareQuoteDetails->FareQuoteDetail->UseAirportsNotMetroGroupsAsRule = false; 
$data->FareQuoteDetails->FareQuoteDetail->UseAirportsNotMetroGroupsForForm = false; 
$data->FareQuoteDetails->FareQuoteDetail->UseAirportsNotMetroGroupsForTo = false; 
$data->FareQuoteDetails->FareQuoteDetail->DateOfDeparture = "2016-11-20"; 
$data->FareQuoteDetails->FareQuoteDetail->FareTypeCategory = 1; 
$data->FareQuoteDetails->FareQuoteDetail->FareClass = null; 
$data->FareQuoteDetails->FareQuoteDetail->FareBasisCode = null; 
$data->FareQuoteDetails->FareQuoteDetail->Cabin = null; 
$data->FareQuoteDetails->FareQuoteDetail->LFID = -214; 
$data->FareQuoteDetails->FareQuoteDetail->OperatingCarrierCode = null; 
$data->FareQuoteDetails->FareQuoteDetail->MarketingCarrierCode = null; 
$data->FareQuoteDetails->FareQuoteDetail->NumberOfDaysBefore = 0; 
$data->FareQuoteDetails->FareQuoteDetail->NumberOfDaysAfter = 0; 
$data->FareQuoteDetails->FareQuoteDetail->LanguageCode = "en"; 
$data->FareQuoteDetails->FareQuoteDetail->TicketPackageID = 1; 

$quote = $pricing->RetrieveFareQuote(array("RetrieveFareQuoteRequest" => $data)); 
print_r($quote); 

。私はそれを残しているので、もはや有効ではありませんが、XMLを見た後、私は追加するかどうかはわかりませんよXMLから、FareQuoteDetailオブジェクトに同じことをやり直さなければならないように見えます。なぜなら、それは繰り返すことができる必要があるからです。

どうすればいいですか?それらを配列として追加しますか?すべてのヘルプやヒントをいただければ幸いです

stdClass Object 
(
    [RetrieveFareQuoteResult] => stdClass Object 
     (
      [CommissionIncluded] => 
      [Exceptions] => stdClass Object 
       (
        [ExceptionInformation.Exception] => stdClass Object 
         (
          [ExceptionCode] => 9989 
          [ExceptionDescription] => RetrieveFareQuote/FareQuoteDetails[0]/FareQuoteRequestInfos: cannot be NULL and collection count must be between 1 and 20 
          [ExceptionSource] => RetrieveFareQuote 
          [ExceptionLevel] => Critical 
         ) 

       ) 

      [FlightSegments] => stdClass Object 
       (
       ) 

      [LegDetails] => stdClass Object 
       (
       ) 

      [RequestedCorporationID] => 0 
      [RequestedCurrencyOfFareQuote] => 
      [RequestedFareFilterMethod] => 0 
      [RequestedGroupMethod] => 0 
      [RequestedIataNumber] => 
      [RequestedInventoryFilterMethod] => 0 
      [RequestedPromotionalCode] => 
      [RequestedReservationChannel] => 0 
      [SegmentDetails] => stdClass Object 
       (
       ) 

      [TaxDetails] => stdClass Object 
       (
       ) 

     ) 

) 

:参考

は、ここますprint_rの結果です!ありがとう!

+0

なぜ失敗するのかを教えてください。 'NULLにすることはできず、コレクションの数は1から20の間でなければなりません。 ' – Xorifelse

+0

私は知っています。私はFareQuoteRequestInfosを繰り返す方法を尋ねていましたが、これまでに何もしなかったことがあります。 – DavyH

+0

API開発者はあなたに[WSDL](https://de.wikipedia.org/wiki/Web_Services_Description_Language)を送信する必要があります。それがSOAPのポイントです – hek2mgl

答えて

0

自分自身をこれを考え出したし、共有することを決めた:

$info = new StdClass; 
$info->Origin = "BRL"; 
$info->Destination = "ORD"; 
$info->UseAirportsNotMetroGroups = false; 
$info->UseAirportsNotMetroGroupsAsRule = false; 
$info->UseAirportsNotMetroGroupsForForm = false; 
$info->UseAirportsNotMetroGroupsForTo = false; 
$info->DateOfDeparture = "2016-11-20"; 
$info->FareTypeCategory = 1; 
$info->FareClass = null; 
$info->FareBasisCode = null; 
$info->Cabin = null; 
$info->LFID = -214; 
$info->OperatingCarrierCode = null; 
$info->MarketingCarrierCode = null; 
$info->NumberOfDaysBefore = 0; 
$info->NumberOfDaysAfter = 0; 
$info->LanguageCode = "en"; 
$info->TicketPackageID = 1; 
$info->FareQuoteRequestInfos->FareQuoteRequestInfo[] = array(
    'PassengerTypeID' => 1, 
    'TotalSeatsRequired' => 1 
); 
$info->FareQuoteRequestInfos->FareQuoteRequestInfo[] = array(
    'PassengerTypeID' => 5, 
    'TotalSeatsRequired' => 1 
); 
$info->FareQuoteRequestInfos->FareQuoteRequestInfo[] = array(
    'PassengerTypeID' => 6, 
    'TotalSeatsRequired' => 1 
); 

$detail = new StdClass; 
$detail->FareQuoteDetail = $info; 

$data->CurrencyOfFareQuote = "USD"; 
$data->CorporationID = -214; 
$data->FareFilterMethod = "NoCombinabilityRoundtripLowestFarePerFareType"; 
$data->FareGroupMethod = "WebFareTypes"; 
$data->InventoryFilterMethod = "Available"; 
$data->ClientIPAddress = "?"; // Optional 
$data->HistoricUserName = "?"; // Optional 
$data->PromotionalCode = null; 
$data->IataNumberOfRequestor = null; 
$data->FareQuoteDetails = $detail; 

$quote = $pricing->RetrieveFareQuote(array("RetrieveFareQuoteRequest" => $data)); 

print_r($quote); 

私は別のクラスのオブジェクトにFareQuoteDetailを移動した後、私は同じ命名構造を維持させる配列として各FareQuoteRequestInfoを追加しました。

関連する問題