public function voucher($orderId)
 {
     $this->synchronize();
     $time = time() + $this->differenceTimestamp;
     $getData = array('login' => Yii::app()->params['HotelBook']['login'], 'time' => $time, 'checksum' => $this->getChecksum($time), 'order_id' => $orderId);
     self::$lastRequestMethod = 'voucher';
     self::$lastRequestDescription = (string) $orderId;
     $response = $this->request(Yii::app()->params['HotelBook']['uri'] . 'voucher_info', $getData);
     /*
     * <BookingDetails>
        <Supplier>Kuoni</Supplier>
        <Reference>152336046</Reference>
      </BookingDetails>
     */
     $responseObject = simplexml_load_string($response);
     $hotelOrderConfirmResponse = new HotelOrderConfirmResponse();
     $hotelOrderConfirmResponse->orderId = (string) $responseObject->Order['Id'];
     $hotelOrderConfirmResponse->tag = (string) $responseObject->Order->Tag;
     $hotelOrderConfirmResponse->orderState = (string) $responseObject->Order->State;
     if ($responseObject->Order->ItemList) {
         UtilsHelper::soapObjectsArray($responseObject->Order->ItemList->Item);
         foreach ($responseObject->Order->ItemList->Item as $itemSXE) {
             $key = (string) $itemSXE['Id'];
             if (isset($itemSXE->Voucher->BookingDetails->Supplier)) {
                 $hotelOrderConfirmResponse->suppliers[$key] = (string) $itemSXE->Voucher->BookingDetails->Supplier;
             }
             if (isset($itemSXE->Voucher->BookingDetails->Reference)) {
                 $hotelOrderConfirmResponse->references[$key] = (string) $itemSXE->Voucher->BookingDetails->Reference;
             }
             $hotelOrderConfirmResponse->voucherAvailable[$key] = (string) $itemSXE->VoucherAvailable;
         }
     }
     $hotelOrderConfirmResponse->error = 0;
     if (isset($responseObject->Errors->Error)) {
         throw new CException('Internal confirmOrder hotelBook error: ' . CVarDumper::dumpAsString($responseObject->Errors));
     }
     return $hotelOrderConfirmResponse;
 }
Exemple #2
0
 public function FlightTicketing(FlightTicketingParams $flightTicketingRequest)
 {
     $aParams = array('Request' => array('Ticketing' => array('BookID' => $flightTicketingRequest->nemoBookId, 'Commision' => array('Percent' => '2'))), 'Source' => array('ClientId' => Yii::app()->params['GDSNemo']['agencyId'], 'APIKey' => Yii::app()->params['GDSNemo']['agencyApiKey'], 'Language' => 'RU', 'Currency' => 'RUB'));
     $response = self::request('Ticketing', $aParams, $bCache = FALSE, $iExpiration = 0);
     $flightTicketingResponse = new FlightTicketingResponse();
     if (isset($response->Response->Error)) {
         $status = 'error';
         $flightTicketingResponse->status = 2;
         $flightTicketingResponse->responseStatus = ResponseStatus::ERROR_CODE_EXTERNAL;
         $flightTicketingResponse->addError('error', $response->Response->Error);
     } else {
         if (isset($response->Response->Ticketing->Status)) {
             $status = $response->Response->Ticketing->Status;
         } elseif (isset($response->Error->_)) {
             $status = 'error';
             $flightTicketingResponse->addError($response->Error->Code, $response->Error->_);
         } else {
             $status = 'error';
             if (GDSNemoSoapClient::$lastCurlError) {
                 $flightTicketingResponse->addError('connection error', GDSNemoSoapClient::$lastCurlError);
             }
         }
     }
     if ($status == 'ticket') {
         $flightTicketingResponse->status = 1;
         $aParts = array();
         UtilsHelper::soapObjectsArray($response->Response->Ticketing->Flight->Segments->Segment);
         foreach ($response->Response->Ticketing->Flight->Segments->Segment as $arrKey => $oSegment) {
             $oPart = new stdClass();
             //Yii::beginProfile('loadAirportData');
             if (!isset($oSegment->DepAirp)) {
                 Yii::log(print_r($oSegment, true) . '|||' . $arrKey, 'info');
             }
             try {
                 $oPart->departure_airport = Airport::getAirportByCode(UtilsHelper::soapElementValue($oSegment->DepAirp));
                 $oPart->departure_city = $oPart->departure_airport->city;
                 $oPart->arrival_airport = Airport::getAirportByCode(UtilsHelper::soapElementValue($oSegment->ArrAirp));
                 $oPart->arrival_city = $oPart->arrival_airport->city;
                 $oPart->departure_terminal_code = isset($oSegment->DepTerminal) ? UtilsHelper::soapElementValue($oSegment->DepTerminal) : '';
                 $oPart->arrival_terminal_code = isset($oSegment->ArrTerminal) ? UtilsHelper::soapElementValue($oSegment->ArrTerminal) : '';
                 $oPart->markAirline = Airline::getAirlineByCode($oSegment->MarkAirline);
                 if ($oSegment->OpAirline == '**') {
                     $oPart->opAirline = $oPart->markAirline;
                     $oPart->transport_airline = $oPart->markAirline;
                 } else {
                     $oPart->opAirline = Airline::getAirlineByCode($oSegment->OpAirline);
                     $oPart->transport_airline = Airline::getAirlineByCode($oSegment->OpAirline);
                 }
                 $oPart->code = $oSegment->FlightNumber;
                 $oPart->duration = $oSegment->FlightTime * 60;
                 $oPart->datetime_begin = UtilsHelper::soapElementValue($oSegment->DepDateTime);
                 $oPart->datetime_end = UtilsHelper::soapElementValue($oSegment->ArrDateTime);
                 $oPart->stopNum = UtilsHelper::soapElementValue($oSegment->StopNum);
                 $oPart->aircraft_code = $oSegment->AircraftType;
                 $oPart->aTariffs = array();
                 $oPart->aTaxes = array();
                 $oPart->aBookingCodes = array();
                 UtilsHelper::soapObjectsArray($oSegment->BookingCodes->BookingCode);
                 foreach ($oSegment->BookingCodes->BookingCode as $sBookingCode) {
                     $oPart->aBookingCodes[] = UtilsHelper::soapElementValue($sBookingCode);
                 }
                 $aParts[$oSegment->SegNum] = $oPart;
             } catch (CException $e) {
             }
         }
         if ($aParts) {
             $flightTicketingResponse->aParts = $aParts;
         }
         UtilsHelper::soapObjectsArray($response->Response->Ticketing->Travellers->Traveller);
         foreach ($response->Response->Ticketing->Travellers->Traveller as $traveller) {
             $ticket = array('ticketNumber' => $traveller->Ticket->TickectNum, 'documentNumber' => $traveller->DocumentInfo->DocNum);
             $flightTicketingResponse->tickets[] = $ticket;
         }
     } else {
         $flightTicketingResponse->responseStatus = ResponseStatus::ERROR_CODE_EXTERNAL;
         $flightTicketingResponse->addError('error', 'Status is:' . $status);
         $flightTicketingResponse->status = 2;
     }
     return $flightTicketingResponse;
 }