/** * @param FlightBookingParams $oFlightBookingParams * @return FlightBookingResponse * @throws CException */ public function FlightBooking(FlightBookingParams $oFlightBookingParams) { if (!$oFlightBookingParams instanceof FlightBookingParams) { throw new CException(Yii::t('application', 'Parameter oFlightBookingParams not type of FlightBookingParams')); } $aParams = array('Request' => array('BookFlight' => array('FlightId' => $oFlightBookingParams->flightId, 'BookingCodes' => array('BookingCode' => array('Code' => 'Q', 'SegNumber' => '1')), 'Agency' => array('Name' => 'Easy', 'Telephone' => array('Type' => 'A', 'PhoneNumber' => '5745698'), 'Address' => array('City' => 'Saint-Petersburg')), 'Travellers' => array('Traveller' => array(array('Type' => 'ADT', 'Num' => '1', 'PersonalInfo' => array('DateOfBirth' => '01.01.1985', 'Nationality' => 'RU', 'Gender' => 'M', 'FirstName' => 'Aleksandr', 'LastName' => 'Kovalev'), 'DocumentInfo' => array('DocType' => 'М', 'DocNum' => 'asdawe131', 'CountryCode' => 'RU', 'DocElapsedTime' => '24.03.2026')), array('Type' => 'ADT', 'Count' => '1'))))), 'Source' => array('ClientId' => Yii::app()->params['GDSNemo']['agencyId'], 'APIKey' => Yii::app()->params['GDSNemo']['agencyApiKey'], 'Language' => 'RU', 'Currency' => 'RUB')); if ($oFlightBookingParams->checkValid()) { $aTraveler = array(); $iNum = 1; foreach ($oFlightBookingParams->passengers as $passenger) { //VarDumper::dump($passenger);die(); //$oTraveller = array(); $oTraveller['Type'] = Yii::app()->params['aPassegerTypes'][$passenger->type]; $oTraveller['Num'] = $iNum; $oTraveller['IsContact'] = $iNum == 1 ? true : false; $oTraveller['PersonalInfo'] = array(); $oTraveller['PersonalInfo']['DateOfBirth'] = $passenger->passport->birthday; $oTraveller['PersonalInfo']['Nationality'] = Country::getCountryByPk($passenger->passport->countryId)->code; $oTraveller['PersonalInfo']['Gender'] = $passenger->passport->genderId == 1 ? 'M' : 'F'; $oTraveller['PersonalInfo']['FirstName'] = $passenger->passport->firstName; $oTraveller['PersonalInfo']['LastName'] = $passenger->passport->lastName; $oTraveller['DocumentInfo'] = array(); $oTraveller['DocumentInfo']['DocType'] = isset(self::$passportTypesMap[$passenger->passport->documentTypeId]) ? self::$passportTypesMap[$passenger->passport->documentTypeId] : 'P'; $oTraveller['DocumentInfo']['DocNum'] = ($passenger->passport->series ? $passenger->passport->series : '') . $passenger->passport->number; $oTraveller['DocumentInfo']['CountryCode'] = Country::getCountryByPk($passenger->passport->countryId)->code; $oTraveller['DocumentInfo']['DocElapsedTime'] = UtilsHelper::dateToPointDate($passenger->passport->expiration); $oTraveller['ContactInfo'] = array(); $oTraveller['ContactInfo']['EmailID'] = $oFlightBookingParams->contactEmail; $oTraveller['ContactInfo']['Telephone'] = array(); $oTraveller['ContactInfo']['Telephone']['Type'] = 'M'; $oTraveller['ContactInfo']['Telephone']['PhoneNumber'] = $oFlightBookingParams->phoneNumber; $aTraveler[] = $oTraveller; $iNum++; } $aParams['Request']['BookFlight']['Travellers']['Traveller'] = $aTraveler; $aParams['Request']['BookFlight']['Travellers']['Traveller'] = UtilsHelper::normalizeArray($aParams['Request']['BookFlight']['Travellers']['Traveller']); } else { throw new CException(Yii::t('application', 'Data in parameter oFlightBookingParams not valid')); } $response = self::request('BookFlight', $aParams); $flightBookingResponse = new FlightBookingResponse(); if (isset($response->Response->Error)) { $status = 'error'; $flightBookingResponse->status = 2; $flightBookingResponse->responseStatus = ResponseStatus::ERROR_CODE_EXTERNAL; $flightBookingResponse->addError('error', $response->Response->Error); } else { if (isset($response->Response->BookFlight->Status)) { $status = $response->Response->BookFlight->Status; } elseif (isset($response->Error->_)) { $status = 'error'; $flightBookingResponse->addError($response->Error->Code, $response->Error->_); } else { $status = 'error'; if (GDSNemoSoapClient::$lastCurlError) { $flightBookingResponse->addError('connection error', GDSNemoSoapClient::$lastCurlError); } } } if ($status == 'booked') { $flightBookingResponse->pnr = $response->Response->BookFlight->Code; $flightBookingResponse->expiration = strtotime($response->Response->BookFlight->Flight->PricingInfo->PassengerFare->LastTicketDateTime->_); $flightBookingResponse->nemoBookId = $response->Response->BookFlight->ID; $flightBookingResponse->status = 1; } else { $flightBookingResponse->status = 2; $flightBookingResponse->responseStatus = ResponseStatus::ERROR_CODE_EXTERNAL; $flightBookingResponse->addError('error', 'Status is:' . $status); } return $flightBookingResponse; }