Скоро защита?
Меню Услуги

Автоматизация продажи авиабилетов. Часть 3

или напишите нам прямо сейчас:

Написать в WhatsApp Написать в Telegram

Страницы: 1 2 3

Заключение

В процессе выполнения дипломного проекта была разработана система автоматизированной продажи авиабилетов на сайте авиакомпании http://www.bekair.com, получившая название «Кусто» (Cousteau, в честь французского исследователя Мирового океана Жак-Ив Кусто, вдохновившись мотивами названия более мощной, также упоминаемой в дипломном проекте системы Nemo).

Система разработана в виде подключаемого, к основной системе управления контентом OctoberCMS, плагина. Поскольку основу OctoberCMS составляет PHP фреймворк Laravel, то соответственно и «Кусто» была написана на языке программирования PHP. Предусмотрены возможности для администрирования системы, которые включают в себя управление справочниками системы, возможность оказания технической поддержки пассажирам, а также возможность аналитики для коммерческих целей.

В ходе работы над проектом, были достигнуты все поставленные цели, проанализирована ИТ составляющая авиакомпании, разработан проект автоматизации, в разы улучшена скорость загрузки страниц, упрощены формы диалогов с пользователем, в следствии чего повышен процент конверсии, что дало большой скачок в доходности авиакомпании, который также произошёл по причине возможности сотрудничества с мета поисковиком AviaSales. Была введена возможность самостоятельного совершения возврата авиабилетов, что в целом удачно сказалось на трудозатратах и как следствие этого – расходах авиакомпании.

Программное обеспечение представляет собой законченный продукт и может применяться в реальной жизни. В результате анализа экономической части, проект также получил высокие показатели. В частности, было установлено, что срок возврата инвестиций составляет менее одного месяца, что свидетельствует о его высокой эффективности и актуальности.

В качестве ближайших возможных путей развития Кусто, можно отметить разработку собственного API для создания мобильных приложений для Android и iOS систем, а также создание автоматизированной онлайн системы регистрации пассажиров, что очень актуально в данный момент, поскольку уже сегодня каждые два посетителя сайта http://www.bekair.com из трёх, осуществляют веб-сёрфинг с мобильного устройства. А каждое седьмое обращение в техническую поддержку поступает с вопросом «как можно зарегистрироваться/выбрать место в самолёте онлайн?».

Список литературы

 

  1. Автоматизированные информационные технологии в экономике. — М.: Компьютер, Юнити, 2017. — 400 c.
  2. Банковские информационные системы и технологии. Часть 1. Технология банковского учета. — М.: Финансы и статистика, 2015. — 384 c.
  3. Беленькая, М. Н. Администрирование в информационных системах / М.Н. Беленькая, С.Т. Малиновский, Н.В. Яковенко. — М.: Горячая линия — Телеком, 2019. — 400 c.
  4. Васильков, А. В. Безопасность и управление доступом в информационных системах / А.В. Васильков, И.А. Васильков. — М.: Форум, 2021. — 368 c.
  5. Гвоздева, В. А. Информатика, автоматизированные информационные технологии и системы / В.А. Гвоздева. — М.: Форум, Инфра-М, 2017. — 544 c.
  6. Гвоздева, Валентина Александровна Информатика, автоматизированные информационные технологии и системы. Учебник / Гвоздева Валентина Александровна. — М.: Форум, 2018. — 58 c.
  7. Грекул, В.И. Автоматизация деятельности предприятия розничной торговли с использованием информационной системы Microsoft Dynamics NAV / В.И. Грекул. — М.: Бином. Лаборатория знаний, 2015. — 389 c.
  8. Ивлев, В. А. ABIS. Информационные системы на основе действий / В.А. Ивлев, Т.В. Попова. — М.: 1С-Паблишинг, 2019. — 248 c.
  9. Каримов, Вячеслав Хамитович Автоматизированные информационно-поисковые системы криминалистического назначения. Современное состояние, тенденции и перспективы развития / Каримов Вячеслав Хамитович. — М.: Юрлитинформ, 2021. — 322 c.
  10. Криницкий, Н. А. Автоматизированные информационные системы / Н.А. Криницкий, Г.А. Миронов, Г.Д. Фролов. — М.: Главная редакция физико-математической литературы издательства «Наука», 2016. — 380 c.
  11. Криницкий, Н.А. Автоматизированные информационные системы / Н.А. Криницкий, Г.А. Миронов, Г.Д. Фролов. — М.: Наука, 2017. — 382 c.
  12. Любарский, Ю.Я. Интеллектуальные информационные системы / Ю.Я. Любарский. — М.: Наука, 2016. — 232 c.
  13. Любарский, Ю.Я. Интеллектуальные информационные системы / Ю.Я. Любарский. — М.: Наука, 2021. — 228 c.
  14. Маглинец, Ю.А. Анализ требований к автоматизированным информационным системам / Ю.А. Маглинец. — М.: Бином. Лаборатория знаний, 2016. — 409 c.
  15. Маха, Акрам Шана Автоматизированная информационная система адаптивного обучения / Маха Акрам Шана. — М.: LAP Lambert Academic Publishing, 2019. — 188 c.
  16. Мезенцев, К. Н. Автоматизированные информационные системы / К.Н. Мезенцев. — М.: Academia, 2021. — 176 c.
  17. Мезенцев, К. Н. Автоматизированные информационные системы / К.Н. Мезенцев. — М.: Академия, 2015. — 174 c.
  18. Мезенцев, К. Н. Автоматизированные информационные системы / К.Н. Мезенцев. — М.: Академия, 2019. — 176 c.
  19. Мезенцев, Константин Николаевич Автоматизированные информационные системы. Учебник для студентов учреждений среднего профессионального образования / Мезенцев Константин Николаевич. — М.: Академия (Academia), 2019. — 300 c.
  20. Норенков, Игорь Автоматизированные информационные системы / Игорь Норенков. — Москва: Наука, 2017. — 345 c.
  21. Путькина, Л. В. Интеллектуальные информационные системы / Л.В. Путькина, Т.Г. Пискунова. — М.: СПбГУП, 2016. — 228 c.
  22. Пьявченко, Т. А. Автоматизированные информационно-управляющие системы с применением SCADA-системы Trace Mode. Учебное пособие / Т.А. Пьявченко. — М.: Лань, 2015. — 336 c.
  23. Пьявченко, Тамила Алексеевна Автоматизированные информационно-управляющие системы с применением SCADA-системы Trace Mode. Учебное пособие. Гриф УМО вузов России / Пьявченко Тамила Алексеевна. — М.: Лань, 2015. — 247 c.
  24. Редько, В.Н. Базы данных и информационные системы / В.Н. Редько, И.А. Басараб. — М.: Знание, 2020. — 32 c.
  25. Реутов, А. П. Автоматизированные информационные системы. Методы построения и исследования / А.П. Реутов, М.В. Черняков, С.Н. Замуруев. — М.: Радиотехника, 2015. — 328 c.
  26. Рубичев, Н. А. Измерительные информационные системы / Н.А. Рубичев. — М.: Дрофа, 2020. — 336 c.
  27. Хубаев, Георгий Николаевич Информатика. Информационные системы. Информационные технологии. Тестирование. Подготовка к интернет-экзамену / Хубаев Георгий Николаевич. — М.: Феникс, 2018. — 437 c.
  28. Цапенко, М.П. Измерительные информационные системы / М.П. Цапенко. — М.: Энергоатомиздат, 2020. — 440 c.
  29. Чандра, А. М. Дистанционное зондирование и географические информационные системы / А.М. Чандра, С.К. Гош. — М.: Техносфера, 2015. — 328 c.
  30. Школьник, Алексей Автоматизированная информационная система учета ИТ-активов предприятия / Алексей Школьник. — М.: LAP Lambert Academic Publishing, 2017. — 132 c.

Приложения

Приложение 1 Перечень запросов в баллах к WS-Gate.

Запрос Расшифровка запроса Баллы за 1 (один) запрос
1.  add_agent_com ission установка величины вознаграждения агента в сеансе BSP 1
2.  add_ff_info Ввод информации о частолетающем пассажире 1
3.  add_remark добавление ремарки в PNR 1
4.  add_ssr добавление в PNR запросов на спецобслуживание 1
5.  aezh_availabilit

y

Расписание Аэроэкспресс 2
6.  aezh_booking Бронирование перевозки Аэроэкспресс 10
7.  aezh_booking_c

ancel

Аннулирование заказа Аэроэкспресс 2
8.  aezh_fares Список тарифов Аэроэкспресс 2
9.  aezh_order Просмотр заказа Аэроэкспресс 3
10.  aezh_print Оформление билетов Аэроэкспресс 15
11.  aezh_receipts Получение образов билетов Аэроэкспресс 5
12.  aezh_routes Список маршрутов Аэроэкспресс 2
13.  aezh_seat_map наличие мест в вагоне бизнес-класса Аэроэкспресс 5
14.  availability Наличие мест 5
15.  bill_static Получение данных по баллам на момент ее фиксации 1
16.  

bill_online

Получение данных по баллам на момент получения запроса 5
17.  booking Бронирование 5
18.  booking-cancel Аннулирование брони 1
19.  booking-q Проверка результатов бронирования 3
20.  calendar Поиск минимальной стоимости перевозки на периоде дат 50
21.  card_type_allo

wed

ограничения по типам пластиковых карт 1
22.  change_pnr Изменение параметров брони 5
23.  check_itin_cons

istency — PNR

проверка согласованности сегментов 3
24.  check_route Проверка возможности работы с маршрутом 2
25.  city_schedule Расписание по городу 15
26.  client_summary Статистика бронирований клиента 15

 

27.  connected_citie

s

Получение списка городов, связанных с указанным 5
28.  

describe

Кодификатор. 2 вида – расшифровка и получение списков 1
29.  divide_order деление PNR 5
30.  fareremark Просмотр текста УПТ 3
31.  fares Справка по тарифам на направлении 5
32.  find_nearest_d

ate

Поиск ближайшей даты выполнения рейса с нужным наличием мест 7
33.  get_company_r

outes

получение списка маршрутов авиакомпании 3
34.  get_currency_r

ates

получение курсов валют 1
35.  get_itin_receipt

s

Получение маршрут-квитанции в PDF 2
36.  get_itin_receipt

s_data

получение данных маршрут-квитанций 2
37.  get_emd_quota получение квот EMD 1
38.  get_et_quota получение квот ЭБ 1
39.  get_schedule Выгрузка расписания 4
40.  get_pnr_history Получение текста истории PNR 2
41.  iclient_pub_key Обновление ключа клиента 1
42.  

ins_book

бронирование           страховок      без       бронирования авиасегментов 5
43.  ins_erase отмена бронирования страховки 2
44.  ins_info получение информации о доступных страховках 1
45.  ins_insert добавление страховки в PNR 2
46.  ins_print оформление страховки 2
47.  joint_info Получение информации о стыковке 3
48.  key_info Получение информации о ключах клиента 1
49.  

meal_add

Добавление в PNR информации о спецпитании пассажира 1
50.  meal_info Получение информации о спецпитании на рейсе 1
51.  modified_order s Просмотр       статусов         заказов,          изменявшихся             с указанного момента 7
52.  modify_pnr изменение  параметров бронирования 5
53.  order Просмотр PNR 3
54.  payment-ext-

auth

Оплата заказа 20

 

55.  pnr_status Просмотр статуса PNR 3
56.  prepaid_orders Список заказов, ожидающих подтверждения оплаты 5
57.  pricing_mono_b

rand

Оценка варианта перевозки тарифами разных брендов 13
58.  pricing

(pricing_route)

Оценка стоимости перевозки по направлению 25
59.  

pricing_flight

Оценка стоимости перевозки по направлению на конкретных рейсах 15
60.  

pricing_variant

Оценка стоимости перевозки на конкретных рейсах и подклассах 10
61.  queue_count кол-во PNR в очередях 3
62.  queue_pnr_plac e помещение PNR в очередь 3
63.  queue_pnr_rem

ove

изъятие PNR из очереди 3
64.  queue_pnr_sch

edule_accept

подтверждение изменения расписания 3
65.  queue_show просмотр очереди 3
66.  raceinfo Информация по рейсу 3
67.  rebook Восстановление аннулированных мест в PNR 5
68.  release_seats возврат мест без возврата билетов 5
69.  return_ins возврат страховки 2
70.  schedule Расписание 3
71.  seat_map Получение интерактивной карты мест на рейс 5
72.  selling_query покупка перевозки, первая часть 10
73.  set_agent_disc

ount

— ввод скидки агента 5
74.  set_timelimit ручное задание автоматического таймлимита 2
75.  set_agent_tax ручное изменение агентских сборов 5
76.  superclient_su

mmary

Статистика бронирований пула клиентов 20
77.  svcc Каталог доп. услуг, предоставляемых авиакомпанией 5
78.  svc_add Добавление доп. услуги в PNR 10
79.  svc_del Удаление доп. услуг из PNR 10
80.  svc_emd_issue _query Оформление EMD на доп. услуги, первый шаг 5
81.  svc_emd_issue _confirm Оформление EMD на доп. услуги, второй шаг 15
82.  svc_emd_issue _cancel Прерывание операции оформления EMD на доп. услуги 1
83.  svc_emd_void Отказ от оформленных EMD на доп. услуги 15
84.  svc_emd_refun

d_calc

Предварительный расчет суммы к возврату при возврате оформленных EMD на доп. услуги 10
85.  svc_emd_refun

d_query

Возврат оформленных EMD на доп. услуги, первый шаг 10
86.  svc_emd_refun

d_confirm

Возврат оформленных EMD на доп. услуги, второй шаг 15
87.  svc_emd_refun

d_cancel

Прерывание операции возврата EMD на доп. услуги 1
88.  view_flown_sta

tus

статус купона 3
89.  void_tickets Аннулирование электронного билета 10

 

Приложение 2

XML запрос/ответ get_schedule

Запрос:

<?xml version=»1.0″ encoding=»UTF-8″?>  <sirena>

<query>

<get_schedule>

<company>ТФ</company>

<date>20.05.20</date>

<date2>20.01.21</date2>

</get_schedule>

</query>

</sirena>

Ответ:

<?xml version=»1.0″ encoding=»UTF-8″?>

<sirena>

<answer pult=»АВТК58″ msgid=»19534949″ time=»07:52:01 20.05.2020″ instance=»ГРУ»>     <get_schedule>

<flight company=»ТФ» num=»179″>

<period date_start=»110220″ date_end=»241020″ freq=»1234567″ tts=»733″ classes=»Э»>

<segment index=»0″>

<city>БИШ</city>

<dep_time>1700</dep_time>

<dep_offset>0</dep_offset>

<reg_type>В ПОРТУ</reg_type>

</segment>

<segment index=»1″>

<city>ОШШ</city>

<arr_time>1740</arr_time>

<arr_offset>0</arr_offset>

<reg_type>?</reg_type>

</segment>

</period>

</flight>

<flight company=»ТФ» num=»180″>

<period date_start=»100220″ date_end=»241020″ freq=»1234567″ tts=»733″ classes=»Э»>

<segment index=»0″>

<city>ОШШ</city>

<dep_time>1840</dep_time>

<dep_offset>0</dep_offset>

<reg_type>В ПОРТУ</reg_type>

</segment>

<segment index=»1″>

<city>БИШ</city>

<arr_time>1920</arr_time>

<arr_offset>0</arr_offset>

<reg_type>?</reg_type>

</segment>

</period>

</flight>

<flight company=»ТФ» num=»883″>

<period date_start=»110220″ date_end=»241020″ freq=»1234567″ tts=»733″ classes=»Э»>

<segment index=»0″>

<city>БИШ</city>

<dep_time>0805</dep_time>

<dep_offset>0</dep_offset>

<reg_type>В ПОРТУ</reg_type>

</segment>

<segment index=»1″>

<city>МОВ</city>

<port>ДМД</port>

<arr_time>0925</arr_time>

<arr_offset>0</arr_offset>

<reg_type>?</reg_type>

</segment>

</period>

</flight>

<flight company=»ТФ» num=»884″>

<period date_start=»110220″ date_end=»241020″ freq=»1234567″ tts=»733″ classes=»Э»>

<segment index=»0″>

<city>МОВ</city>

<port>ДМД</port>

<dep_time>1055</dep_time>

<dep_offset>0</dep_offset>

<reg_type>В ПОРТУ</reg_type>

</segment>

<segment index=»1″>

<city>БИШ</city>

<arr_time>1755</arr_time>

<arr_offset>0</arr_offset>

<reg_type>?</reg_type>

</segment>

</period>

</flight>

</get_schedule>

</answer>

</sirena>

Приложение 3

Маршрут квитанция

Приложение 4

Листинг модуля поиска вариантов перевозки

public function onRun()

{

$this->addCss(‘assets/css/style.css’);

 

if ($this->page->id == ‘finder-findflight’ or $this->page->id == ‘findersearch’)         {

$this->addJs(‘assets/js/search.js’);

$this->addJs(‘assets/js/search_findflight.js’);

//$this->addJs(‘assets/js/datepicker.min.js’);

$this->addJs(‘assets/js/maskedinput.min.js’);

//$this->addCss(‘assets/css/datepicker.min.css’);

$this->addJs(‘assets/js/moment.min.js’);

$this->addJs(‘assets/js/bootstrap-datetimepicker.min.js’);

 

$this->addCss(‘assets/css/bootstrap-datetimepicker.min.css’);

$this->addJs(‘assets/js/findflight.js’);

 

$this->addJs(‘assets/js/litranslit.js’);

 

// Добавляем рекапчу от гугла версии 3, для автоматического определения ботов.

$this-

>addJs(‘https://www.google.com/recaptcha/api.js?render=6LeUisYUAAAAAJk-

Po9nI5wuKMOZn4Bzq-f7QwEo’);

$this->addJs(‘assets/js/recaptcha.js?ver=1’);

// получаем список всех активных городов

 

$this->towns = Towns::where(‘is_active’,’1′)->whereNull(‘parent_id’)-

>orderBy(‘town_name_ru’, ‘asc’)->get();

 

if (Input::has(‘search_engine’)){

$meta_code = Input::get(‘search_engine’);

$meta_marker = ‘none’;

if (Input::has(‘meta_marker’)) {

$meta_marker = Input::get(‘meta_marker’);

}

\Cookie::queue(‘search_engine’, $meta_code.’:’.$meta_marker, 43200); // ставим куку на 30 дней.

}

} else if ($this->page->id == ‘finder-order’)

{

$this->addJs(‘assets/js/order.js’);

 

if (mb_strlen($this->param(‘pnr’)) != 6) { return Response::make($this>controller->run(‘404’)->getContent(), 404); }

 

// Проводим транслитерацию

$translit_pnr = array(

 

‘W’ => ‘Ш’,

‘R’ => ‘Р’,

‘T’ => ‘Т’,                 ‘P’ => ‘П’,

‘S’ => ‘С’,

‘D’ => ‘Д’,

‘F’ => ‘Ф’,

‘G’ => ‘Г’,

‘K’ => ‘К’,                 ‘L’ => ‘Л’,

‘Z’ => ‘Ж’,

‘X’ => ‘Х’,

‘C’ => ‘Ц’,

‘V’ => ‘В’,                 ‘B’ => ‘Б’,

‘N’ => ‘Н’,

‘M’ => ‘М’,

 

);

$find_pnr = strtr(mb_strtoupper($this->param(‘pnr’)), $translit_pnr);

$order = Orders::where(‘pnr’, $find_pnr)->first();

 

//$order->prices = simplexml_load_string($order->prices);

$this->notes = Notes::where(‘where’, ‘order_top’)->where(‘is_active’, 1)-

>get();

if (!$order) {

//return Response::make($this->controller->run(‘404’)->getContent(), 404);

$this->order = ‘none’;

} else {

$this->order = $order;

}

 

} else {

 

 

//$this->addJs(‘assets/js/datepicker.min.js’);

$this->addJs(‘assets/js/maskedinput.min.js’);

//$this->addCss(‘assets/css/datepicker.min.css’);

$this->addJs(‘assets/js/moment.min.js’);

$this->addJs(‘assets/js/bootstrap-datetimepicker.min.js’);

$this->addCss(‘assets/css/bootstrap-datetimepicker.min.css’);

// получаем список всех активных городов

$this->towns = Towns::where(‘is_active’,’1′)->whereNull(‘parent_id’)-

>orderBy(‘town_name_ru’, ‘asc’)->get();

}

 

 

// до этого if надо добавить обработку и проверку URL с возвратом 404 ошибки.

if ($this->param(‘findme’))

{

$town_from_code = mb_substr($this->param(‘findme’), 0, 3);             $town_to_code = mb_substr($this->param(‘findme’), 9, 3);

$town_from_code_bd = Towns::where(‘town_code_en’, $town_from_code)-

>first();

if ($town_from_code_bd){

$this->findme[0] = $town_from_code_bd->town_code_ru;

} else  {

$this->findme[0] = $town_from_code;

}

 

$town_to_code_bd = Towns::where(‘town_code_en’, $town_to_code)->first();             if ($town_to_code_bd){

$this->findme[1] = $town_to_code_bd->town_code_ru;

} else  {

$this->findme[1] = $town_to_code;

}

 

$this->findme[2] = mb_substr($this->param(‘findme’), 3,

2).’.’.mb_substr($this->param(‘findme’), 5, 2).’.20′.mb_substr($this->param(‘findme’),

7, 2);

if (mb_substr($this->param(‘findme’), 12, 4) == «BACK»)

{

$this->findme[3] = mb_substr($this->param(‘findme’), 16,

2).’.’.mb_substr($this->param(‘findme’), 18, 2).’.20′.mb_substr($this->param(‘findme’), 20, 2);

$this->findme[4] = mb_substr($this->param(‘findme’), 22, 1);

$this->findme[5] = mb_substr($this->param(‘findme’), 23, 1);                 $this->findme[6] = mb_substr($this->param(‘findme’), 24, 1);

$this->findme[7] = mb_substr($this->param(‘findme’), 25, 1);                 $this->findme[8] = mb_substr($this->param(‘findme’), 26, 1);

} else {

$this->findme[4] = mb_substr($this->param(‘findme’), 12, 1);                 $this->findme[5] = mb_substr($this->param(‘findme’), 13, 1);

$this->findme[6] = mb_substr($this->param(‘findme’), 14, 1);

$this->findme[7] = mb_substr($this->param(‘findme’), 15, 1);                 $this->findme[8] = mb_substr($this->param(‘findme’), 16, 1);

}

 

 

}

}

public function onWhatLimit()

{

$order = Orders::find(post(‘order_id’));

$timetoend = strtotime(post(‘limit’)) — strtotime(Carbon::now());         return [

‘timetoend’ => $timetoend,

‘html’ => ‘Итого по заказу:<br><span class=»price-total»>’.$order>total.'</span> ‘.$order->currency.'<br><div id=»error_on_pay_system»></div><button data-request=»onGetPlatron» data-request-data=»pg_amount: \».$order->total.’\’,  pg_order_id: \».$order->pnr.’\’, pg_user_phone: \».$order->customer_tel.’\’, my_order_id: \». $order->id .’\'» class=»btn btn-success btnlg»>ОПЛАТИТЬ<br>банковской картой</button>’,

];     }

public function onLetMeKnowWhatLimit()

{

$order = Orders::find(post(‘order_id’));

if ( is_null($order->utc_timelimit)) { return [‘havelimit’ => ‘no’ ]; } else { return [‘havelimit’ => ‘yes’ ]; }

 

}

 

public function onMakeFindMe()

{

if (mb_substr($this->param(‘findme’), 12, 4) == ‘BACK’)

{

$back = 1;

$date2 = mb_substr($this->param(‘findme’), 16, 2).’.’.mb_substr($this-

>param(‘findme’), 18, 2).’.’.mb_substr($this->param(‘findme’), 20, 2);

$class = mb_substr($this->param(‘findme’), 22, 1);

$aaa = mb_substr($this->param(‘findme’), 23, 1);             $chd = mb_substr($this->param(‘findme’), 24, 1);

$infx = mb_substr($this->param(‘findme’), 25, 1);

$inf = mb_substr($this->param(‘findme’), 26, 1);

} else {

$back = 0;

$date2 = »;

$class = mb_substr($this->param(‘findme’), 12, 1);

$aaa = mb_substr($this->param(‘findme’), 13, 1);

$chd = mb_substr($this->param(‘findme’), 14, 1);

$infx = mb_substr($this->param(‘findme’), 15, 1);

$inf = mb_substr($this->param(‘findme’), 16, 1);

}

$datas = [‘departure’=>mb_substr($this->param(‘findme’), 0, 3), ‘arrival’ => mb_substr($this->param(‘findme’), 9, 3), ‘date’ => mb_substr($this->param(‘findme’), 3, 2).’.’.mb_substr($this->param(‘findme’), 5, 2).’.’.mb_substr($this->param(‘findme’), 7,

2), ‘company’ => $this->property(‘avk_code’), ‘back’ => $back, ‘date2’ => $date2,

‘class’ => $class, ‘aaa’ => $aaa, ‘chd’ => $chd, ‘infx’ => $infx, ‘inf’ => $inf ];

$answer = $this->getAnswer(‘pricing’, $datas);

 

$xml = simplexml_load_string($answer);

 

//trace_log($xml);

 

$notes = Notes::where(‘where’, ‘finder_variants’)->where(‘is_active’, 1)>get();

return [‘#findme’ => $this->renderPartial($this.’::list_pricing’,[‘xml’=>$xml, ‘user’ => \Auth::getUser(), ‘notes’ => $notes ]) ];

}

public function onListPassengers()

{

 

//$search_engine = post(‘search_engine’);

$from = post(‘from’); //mb_substr($this->param(‘findme’), 0, 3);

$to = post(‘to’);//mb_substr($this->param(‘findme’), 9, 3);

$company = post(‘company’);

$flight = post(‘flight’);

$class = post(‘class’);

$date = Carbon::createFromDate(’20’.mb_substr(post(‘deptdate1’),6,2), mb_substr(post(‘deptdate1’),3,2), mb_substr(post(‘deptdate1’),0,2))-

>addDays(post(‘delay1’))->format(‘d.m.y’);

$datedept = Carbon::create(’20’.mb_substr(post(‘deptdate1’),6,2), mb_substr(post(‘deptdate1’),3,2), mb_substr(post(‘deptdate1’),0,2), mb_substr(post(‘depttime1’),0,2), mb_substr(post(‘depttime1’),3,2))-

>addDays(post(‘delay1′))->toDateTimeString();

$datearrv = Carbon::create(’20’.mb_substr(post(‘arrvdate1’),6,2), mb_substr(post(‘arrvdate1’),3,2), mb_substr(post(‘arrvdate1’),0,2), mb_substr(post(‘arrvtime1’),0,2), mb_substr(post(‘arrvtime1’),3,2))-

>addDays(post(‘delay1’))->toDateTimeString();

if (($from == ‘БИШ’ and $to == ‘ОШШ’) or ($from == ‘ОШШ’ and $to == ‘БИШ’) or

($from == ‘БИШ’ and $to == ‘ДЖБ’) or ($from == ‘ДЖБ’ and $to == ‘БИШ’))

{

$inside = true;

} else {

$inside = false;

}

if ($inside == true){ $infyear = 5; } else { $infyear = 2; }

 

if (mb_substr($this->param(‘findme’), 12, 4) == ‘BACK’)

{

$back = 1;

$aaa = mb_substr($this->param(‘findme’), 23, 1);             $chd = mb_substr($this->param(‘findme’), 24, 1);

$infx = mb_substr($this->param(‘findme’), 25, 1);

$inf = mb_substr($this->param(‘findme’), 26, 1);

$flight_back = post(‘flight2’);

$class_back = post(‘class2′);

$date2 = Carbon::createFromDate(’20’.mb_substr(post(‘deptdate2’),6,2), mb_substr(post(‘deptdate2’),3,2), mb_substr(post(‘deptdate2’),0,2))-

>addDays(post(‘delay2’))->format(‘d.m.y’);

$datedept_back = Carbon::create(’20’.mb_substr(post(‘deptdate2’),6,2), mb_substr(post(‘deptdate2’),3,2), mb_substr(post(‘deptdate2’),0,2), mb_substr(post(‘depttime2’),0,2), mb_substr(post(‘depttime2’),3,2))-

>addDays(post(‘delay2′))->toDateTimeString();

$datearrv_back = Carbon::create(’20’.mb_substr(post(‘arrvdate2’),6,2), mb_substr(post(‘arrvdate2’),3,2), mb_substr(post(‘arrvdate2’),0,2), mb_substr(post(‘arrvtime2’),0,2), mb_substr(post(‘arrvtime2’),3,2))-

>addDays(post(‘delay2′))->toDateTimeString();

 

$dateaaamax = Carbon::createFromDate(’20’.mb_substr(post(‘deptdate2’),6,2), mb_substr(post(‘deptdate2’),3,2), mb_substr(post(‘deptdate2’),0,2))-

>addDays(post(‘delay2’))->subYears(18)->format(‘m/d/Y’);

$datechdmax = Carbon::createFromDate(’20’.mb_substr(post(‘deptdate2’),6,2), mb_substr(post(‘deptdate2’),3,2), mb_substr(post(‘deptdate2’),0,2))-

>addDays(post(‘delay2’))->subYears($infyear)->format(‘m/d/Y’);

$datechdmin = Carbon::createFromDate(’20’.mb_substr(post(‘deptdate2’),6,2), mb_substr(post(‘deptdate2’),3,2), mb_substr(post(‘deptdate2’),0,2))-

>addDays(post(‘delay2’))->subYears(12)->format(‘m/d/Y’);

$dateinfmin = Carbon::createFromDate(’20’.mb_substr(post(‘deptdate2’),6,2), mb_substr(post(‘deptdate2’),3,2), mb_substr(post(‘deptdate2’),0,2))-

>addDays(post(‘delay2’))->subYears($infyear)->format(‘m/d/Y’);

$dateaaadop = Carbon::createFromDate(’20’.mb_substr(post(‘deptdate2’),6,2), mb_substr(post(‘deptdate2’),3,2), mb_substr(post(‘deptdate2’),0,2))>addDays(post(‘delay2’))->subYears(8)->format(‘m/d/Y’);

 

} else {

$back = 0;

$aaa = mb_substr($this->param(‘findme’), 13, 1);             $chd = mb_substr($this->param(‘findme’), 14, 1);

$infx = mb_substr($this->param(‘findme’), 15, 1);

$inf = mb_substr($this->param(‘findme’), 16, 1);

$dateaaamax = Carbon::createFromDate(’20’.mb_substr(post(‘deptdate1’),6,2), mb_substr(post(‘deptdate1’),3,2), mb_substr(post(‘deptdate1’),0,2))-

>addDays(post(‘delay1’))->subYears(18)->format(‘m/d/Y’);

$datechdmax = Carbon::createFromDate(’20’.mb_substr(post(‘deptdate1’),6,2), mb_substr(post(‘deptdate1’),3,2), mb_substr(post(‘deptdate1’),0,2))-

>addDays(post(‘delay1’))->subYears($infyear)->format(‘m/d/Y’);

$datechdmin = Carbon::createFromDate(’20’.mb_substr(post(‘deptdate1’),6,2), mb_substr(post(‘deptdate1’),3,2), mb_substr(post(‘deptdate1’),0,2))-

>addDays(post(‘delay1’))->subYears(12)->format(‘m/d/Y’);

$dateinfmin = Carbon::createFromDate(’20’.mb_substr(post(‘deptdate1’),6,2), mb_substr(post(‘deptdate1’),3,2), mb_substr(post(‘deptdate1’),0,2))-

>addDays(post(‘delay1’))->subYears($infyear)->format(‘m/d/Y’);

$dateaaadop = Carbon::createFromDate(’20’.mb_substr(post(‘deptdate1’),6,2), mb_substr(post(‘deptdate1’),3,2), mb_substr(post(‘deptdate1’),0,2))>addDays(post(‘delay1’))->subYears(8)->format(‘m/d/Y’);

 

 

}

$allpass = $aaa + $chd + $infx + $inf;

 

$i = 0;

for ($o=1; $o <= $aaa ; $o++) {

$i++;

$whoiam[$i] = ‘ААА’;

}

for ($o=1; $o <= $chd ; $o++) {

$i++;

$whoiam[$i] = ‘РБГ’;

}

for ($o=1; $o <= $infx ; $o++) {

$i++;

$whoiam[$i] = ‘РВГ’;

}

for ($o=1; $o <= $inf ; $o++) {

$i++;

$whoiam[$i] = ‘РМГ’;

}

 

$notes = Notes::where(‘where’, ‘finder_variants2’)->where(‘is_active’, 1)>get();

if ($back == 0)

{

return [‘#findme’ => $this-

>renderPartial($this.’::list_passengers’,[‘inside’ => $inside, ‘dateaaadop’ =>

$dateaaadop, ‘dateinfmin’ => $dateinfmin, ‘datechdmin’ => $datechdmin, ‘datechdmax’ =>

$datechdmax, ‘dateaaamax’ => $dateaaamax, ‘allpass’ => $allpass, ‘flight’ => $flight,

‘class’ => $class, ‘date’ => $date, ‘whoiam’ => $whoiam, ‘user’=> \Auth::getUser(),

‘from’ => $from, ‘to’ => $to, ‘company’ => $company, ‘notes’ => $notes, ‘total_price’

=> post(‘total_price’), ‘price_currency’ => post(‘price_currency’), ‘datedept’ =>

$datedept, ‘datearrv’ => $datearrv, ‘recaptcha’ => post(‘recaptcha_response’)  ])];

} else {

return [‘#findme’ => $this-

>renderPartial($this.’::list_passengers’,[‘inside’ => $inside, ‘dateaaadop’ =>

$dateaaadop, ‘dateinfmin’ => $dateinfmin, ‘datechdmin’ => $datechdmin, ‘datechdmax’ =>

$datechdmax, ‘dateaaamax’ => $dateaaamax, ‘allpass’ => $allpass, ‘flight’ => $flight,

‘class’ => $class, ‘date’ => $date, ‘whoiam’ => $whoiam, ‘user’=> \Auth::getUser(),

‘from’ => $from, ‘to’ => $to, ‘company’ => $company, ‘notes’ => $notes, ‘total_price’

=> post(‘total_price’), ‘price_currency’ => post(‘price_currency’), ‘datedept’ =>

$datedept, ‘datearrv’ => $datearrv, ‘datedept_back’ => $datedept_back, ‘datearrv_back’ => $datearrv_back, ‘flight_back’ => $flight_back, ‘class_back’ => $class_back, ‘date2’

=> $date2, ‘recaptcha’ => post(‘recaptcha_response’) ])];

}

 

}      public function onMakeBooking()

{         if (mb_substr($this->param(‘findme’), 12, 4) == ‘BACK’)

{

$back = 1;

$aaa = mb_substr($this->param(‘findme’), 23, 1);

$chd = mb_substr($this->param(‘findme’), 24, 1);

$infx = mb_substr($this->param(‘findme’), 25, 1);

 

$inf = mb_substr($this->param(‘findme’), 26, 1);

} else {

$back = 0;

$aaa = mb_substr($this->param(‘findme’), 13, 1);

$chd = mb_substr($this->param(‘findme’), 14, 1);

$infx = mb_substr($this->param(‘findme’), 15, 1);

$inf = mb_substr($this->param(‘findme’), 16, 1);

 

}

$allpass = $aaa + $chd + $infx + $inf;

 

$data = post();

 

$rules = array();

for ($numpass=1; $numpass <= $allpass; $numpass++) {

$rules = array_add($rules, ‘lastname’.$numpass, ‘required|alpha’);

$rules = array_add($rules, ‘firstname’.$numpass, ‘required|alpha’);

$rules = array_add($rules, ‘birthdate’.$numpass, ‘required’);

}

$rules = array_add($rules, ‘customer_email’, ‘required’);

$rules = array_add($rules, ‘customer_tel’, ‘required’);

$rules = array_add($rules, ‘agree’, ‘accepted’);

$validation = Validator::make($data, $rules);

 

if ($validation->fails()) {

throw new ValidationException($validation);

}

if ($allpass == 1){

$checkBirthday = Carbon::parse(substr(post(‘birthdate1’), 6, 4).».substr(post(‘birthdate1′), 3, 2).’-‘.substr(post(‘birthdate1’), 0, 2));

if ($checkBirthday > Carbon::now()->subYears(16)){                 return [

‘#error’ => ‘<div class=»alert alert-danger»>Несопровождаемый ребенок не может лететь один!</div>’,

];

 

}

}

 

//Валидация рекаптчи

// Build POST request

$recaptcha_url = ‘https://www.google.com/recaptcha/api/siteverify’;

$recaptcha_secret = ‘6LeUisYUAAAAAKfTc5EEOOQehDdACPHyaF5z_XNH’;         $recaptcha_response = post(‘recaptcha_response’);

 

// Make and decode POST request

$recaptcha = file_get_contents($recaptcha_url . ‘?secret=’ . $recaptcha_secret

. ‘&response=’ . $recaptcha_response);

$recaptcha = json_decode($recaptcha);

//trace_log(‘Рекаптча’);

//trace_log($recaptcha);

// Take action based on the score returned         trace_log($recaptcha);

if (isset($recaptcha->score) and $recaptcha->score < 0.6) {             trace_log(‘Заблокирована попытка брони ботом (‘.$recaptcha->score.’) с ‘.

Request::ip().’. ‘.post(‘flight’).’ ‘.post(‘from’).’ — ‘.post(‘to’));

// Mail::rawTo(‘[email protected]’, ‘Заблокирована попытка брони ботом.’); return [

‘#error’ => ‘<div class=»alert alert-danger»>Привет, я Aerobot. Судя по всему, ты тоже бот, поэтому твоя попытка забронировать авиабилет была успешно

отклонена. Если есть вопросы, пиши на [email protected].</div>’,

];

}

 

 

 

// Проводим транслитерацию

$translit = array(

 

‘А’ => ‘A’,   ‘Б’ => ‘B’,   ‘В’ => ‘V’,

 

‘Г’ => ‘G’,   ‘Д’ => ‘D’,   ‘Е’ => ‘E’,

‘Ё’ => ‘YO’,   ‘Ж’ => ‘ZH’,  ‘З’ => ‘Z’,

‘И’ => ‘I’,   ‘Й’ => ‘Y’,   ‘К’ => ‘K’,

 

‘Л’ => ‘L’,   ‘М’ => ‘M’,   ‘Н’ => ‘N’,

 

‘О’ => ‘O’,   ‘П’ => ‘P’,   ‘Р’ => ‘R’,

 

‘С’ => ‘S’,   ‘Т’ => ‘T’,   ‘У’ => ‘U’,

‘Ф’ => ‘F’,   ‘Х’ => ‘KH’,   ‘Ц’ => ‘TS’,

‘Ч’ => ‘CH’,  ‘Ш’ => ‘SH’,  ‘Щ’ => ‘SH’,

‘Ь’ => »,  ‘Ы’ => ‘Y’,   ‘Ъ’ => »,

‘Э’ => ‘E’,   ‘Ю’ => ‘YU’,  ‘Я’ => ‘YA’,

 

);

for ($numpass=1; $numpass <= $allpass; $numpass++) {              $lastname = trim(post(‘lastname’.$numpass));

$firstname = trim(post(‘firstname’.$numpass));

$lastnames[$numpass] = strtr(mb_strtoupper($lastname), $translit);

$firstnames[$numpass] = strtr(mb_strtoupper($firstname), $translit);

$birthdate[$numpass] = post(‘birthdate’.$numpass);

$sex[$numpass] = post(‘sex’.$numpass);

$category[$numpass] = post(‘category’.$numpass);

$nationality[$numpass] = post(‘nationality’.$numpass);

$doccode[$numpass] = post(‘doccode’.$numpass);

$doc[$numpass] = post(‘doc’.$numpass);

$doc_country[$numpass] = post(‘doc_country’.$numpass);             if (post(‘pspexpire’.$numpass)){ $pspexpire[$numpass] = post(‘pspexpire’.$numpass); } else { $pspexpire[$numpass] = 0; }

$phone[$numpass] = post(‘phone’.$numpass);

$email[$numpass] = post(’email’.$numpass);

$customer_email = post(‘customer_email’);

$customer_tel = post(‘customer_tel’);

}

//^[a-zA-Z]{2,25}$

 

$datas = [‘customer_email’ => $customer_email, ‘customer_tel’ => $customer_tel,

‘phone’ => $phone, ’email’ => $email, ‘doc_country’ => $doc_country,’pspexpire’ =>

$pspexpire, ‘doc’ => $doc,  ‘nationality’ => $nationality, ‘doccode’ => $doccode,

‘birthdate’ => $birthdate, ‘sex’ => $sex, ‘category’ => $category, ‘allpass’ => $allpass, ‘lastnames’ => $lastnames, ‘firstnames’ => $firstnames, ‘date’ => post(‘date’), ‘flight’ => post(‘flight’), ‘class’ => post(‘class’), ‘origin’ => post(‘from’), ‘destination’ => post(‘to’), ‘company’ => post(‘company’)];

 

if (mb_substr($this->param(‘findme’), 12, 4) == ‘BACK’)

{

$datas = array_add($datas, ‘flight_back’, post(‘flight_back’));

$datas = array_add($datas, ‘class_back’, post(‘class_back’));

$datas = array_add($datas, ‘date2’, post(‘date2’));         }

//trace_log(mb_substr($this->param(‘findme’), 12, 4));

$user = \Auth::getUser();

// добавим ремарку поисковика если есть.         if (Input::has(‘search_engine’)){

$meta = MetaSearch::where(‘partner’, Input::get(‘search_engine’))->first();             if ($meta){

$datas = array_add($datas, ‘search_engine’, $meta->marker);

}

} elseif (\Cookie::get(‘search_engine’)) {

$cookie_array = explode(‘:’, \Cookie::get(‘search_engine’));             $meta = MetaSearch::where(‘partner’, $cookie_array[0])->first();             if ($meta){

$datas = array_add($datas, ‘search_engine’, $meta->marker);

}         }

if (Settings::get(‘mainremark’)){

$datas = array_add($datas, ‘mainremark’, Settings::get(‘mainremark’));

}

 

/*if ($user and in_array($user->id, [1, 519])) {

$datas = array_add($datas, ‘remark’, ‘ATCAGENT001’);

}*/

 

$answer = $this->getAnswer(‘selling_query’, $datas);

 

//$ert = strlen($answer);

//echo «wer»;

$xml = simplexml_load_string($answer);

 

$zakaz = $xml->answer->selling_query;

 

//$zakaz = $xml->answer->booking;

 

if ($zakaz->error) {             return [‘#error’ => $this-

>renderPartial($this.’::error_selling_query’,[‘xml’ => $xml ])];

} else if ($zakaz[‘regnum’]) // если заказ успешный и бронь выполнена         {

 

$order = new Orders;

$order->pnr = $zakaz[‘regnum’];

$order->total = $zakaz->pnr->prices->variant_total;

$order->status = 1;

$order->currency = $zakaz->pnr->prices->variant_total[‘currency’];

$utc_timelimit = new Carbon($zakaz->pnr->utc_timelimit);

$order->utc_timelimit = $utc_timelimit;

$order->regnum = $zakaz->pnr->regnum;

$order->customer_email = mb_strtolower($zakaz->contacts->email);             foreach ($zakaz->contacts->contact as $tel) {

if ($tel[‘comment’] == ‘CUSTOMER’) { $order->customer_tel = $tel; }

}

if (post(‘customer_firstname’)) { $order->customer_firstname = post(‘customer_firstname’); }

 

if (post(‘customer_lastname’)) { $order->customer_lastname = post(‘customer_lastname’); }

$order->slug = $this->param(‘findme’);

$order->firstpaxname = $zakaz->pnr->passengers->passenger->surname;

$order->prices = $zakaz->pnr->prices;

$order->segments = $zakaz->pnr->segments;             $order->purchase_ip = Request::ip();             if (Input::has(‘search_engine’)){

$order->meta_finder = Input::get(‘search_engine’);

} elseif (\Cookie::get(‘search_engine’)) {

$cookie_array = explode(‘:’, \Cookie::get(‘search_engine’));

$order->meta_finder = $cookie_array[0];

$order->meta_marker = $cookie_array[1];

}

if (Input::has(‘meta_marker’)){

$order->meta_marker = Input::get(‘meta_marker’);

}

$order->save();

 

foreach ($zakaz->pnr->passengers->passenger as $pass) {

$pax = new Paxs;

$pax->name = $pass->name;

$pax->surname = $pass->surname;

$pax->sex = $pass->sex;

$pax->birthdate = mb_substr($pass->birthdate, 6, 4).’-

‘.mb_substr($pass->birthdate, 3, 2).’-‘.mb_substr($pass->birthdate, 0, 2);

$pax->doccode = $pass->doccode;

$pax->doc = $pass->doc;

$pax->pspexpire = mb_substr($pass->pspexpire, 6, 4).’-

‘.mb_substr($pass->pspexpire, 3, 2).’-‘.mb_substr($pass->pspexpire, 0, 2);

$pax->nationality = $pass->nationality;

$pax->order_id = $order->id;

$pax->save();

}

 

$maildata = [‘pnr’ => $order->pnr];

$mailemail = $order->customer_email;

 

Mail::send(‘mihailbishkek.cousteau::mail.booking_success’, $maildata, function ($message) use ($mailemail) {

$message->to($mailemail); //->cc(‘[email protected]’)->cc(‘[email protected]’)             });

 

return Redirect::to(‘order/’.$order->pnr);

}

 

}

 

 

public function onGetPlatron()

{

$order = Orders::find(post(‘my_order_id’));

 

//trace_log(Carbon::parse($order->utc_timelimit)->timestamp);         //trace_log(Carbon::now()->timestamp);

 

 

 

//trace_log($pg_lifetime);

 

if (is_null($order->payment_id)) {

 

 

/* if( $curl = curl_init() ) {

 

curl_setopt($curl, CURLOPT_URL, ‘https://www.platron.ru/init_payment.php’);

curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);                 curl_setopt($curl, CURLOPT_POST, true);                 curl_setopt($curl, CURLOPT_POSTFIELDS, $this-

>makePlatronLink(post(‘pg_amount’), post(‘pg_order_id’), post(‘pg_user_phone’), $order-

>id, $order->customer_email, $pg_lifetime ));                 $out = curl_exec($curl);                 trace_log(‘это запрос в платрон’);

trace_log($this->makePlatronLink(post(‘pg_amount’),

post(‘pg_order_id’), post(‘pg_user_phone’), $order->id, $order->customer_email,

$pg_lifetime ));

curl_close($curl);

}

 

$xml = simplexml_load_string($out); */

$pays = Settings::instance()->pays;

 

/*$merchant_id = Settings::get(‘pg_merchant_id’);

$secret_key = Settings::get(‘pg_secret_key’);

$result_url = Settings::get(‘pg_result_url’);

$success_url = Settings::get(‘pg_success_url’);

$payment_system = Settings::get(‘pg_payment_system’); */

 

$pg_lifetime = Carbon::parse($order->utc_timelimit)->timestamp — Carbon::now()->timestamp;

 

//trace_log($pays);

 

$platron_datas = array(‘pg_merchant_id’ => $pays->platron_merchant_id, ‘pg_amount’ => post(‘pg_amount’), ‘pg_description’ => ‘Оплата авиабилетов по заказу: ‘.post(‘pg_order_id’), ‘pg_salt’ => md5(uniqid(rand(), true)), ‘pg_user_phone’ => post(‘pg_user_phone’), ‘pg_user_contact_email’ => $order->customer_email, ‘pg_order_id’

=> post(‘pg_order_id’), ‘pg_result_url’ => $pays->platron_result_url,

‘pg_request_method’ => ‘XML’, ‘atc_order_id’ => $order->id, ‘pg_success_url’ => $pays-

>platron_success_url.$this->param(‘pnr’), ‘pg_success_url_method’ => ‘AUTOGET’,

‘pg_payment_system’ => $pays->platron_payment_system, ‘pg_lifetime’ => $pg_lifetime, ‘pg_secret_key’ => $pays->platron_secret_key );

$xml = simplexml_load_string($this-

>getAnswerFromPlatron(‘init_payment.php’, $platron_datas ,’platron_init’));

if ($xml->pg_status == ‘ok’) {

 

$order->payment_id = $xml->pg_payment_id;

$order->payment_url = $xml->pg_redirect_url;

$order->pays_id = $pays->id;

$order->save();

return [‘#ordercont’ => $this-

>renderPartial($this.’::platron_iframe’,[‘link_iframe’ => $xml->pg_redirect_url ]) ];

} else {                 return [

‘#error_on_pay_system’ => ‘<div class=»alert alert-danger part»>Банковская система временно недоступна. Попробуйте оплатить заказ позже…</div>’,                 ];

}         $validation = Validator::make($data, $rules);

 

if ($validation->fails()) {

throw new ValidationException([‘Выберите пассажиров для расчёта стоимости возврата!’]);

}

//$names = array();

$paxes_well_id = array(); // массив тех, кто остался без возврата!          for ($i=1; $i <= post(‘iws’) ; $i++) {

if (post(‘checkbox’.$i) and post(‘checkbox’.$i) == ‘ok’){                 list($paxes_id[], $clearfio) = explode(«!», post(‘fio’.$i));                 list($name[], $surname[]) = explode(» «, $clearfio);

} else {

list($paxes_well_id[]) = explode(«!», post(‘fio’.$i));

}

}

 

 

//trace_log(‘К возврату id: ‘, $paxes_id );

//trace_log(‘Остаются id: ‘, $paxes_well_id );

$datas = [‘action’ => ‘query’, ‘name’ => $name, ‘surname’ => $surname, ‘countimes’ => count($surname), ‘pnr’ => post(‘pnr’), ‘firstpaxname’ => post(‘firstpaxname’)];

$answer = $this->getAnswer(‘payment_ext_auth_refund’, $datas);         $xml = simplexml_load_string($answer);

//trace_log($xml);

if (isset($xml->answer->{‘payment-ext-auth’}->error)){             $error = $xml->answer->{‘payment-ext-auth’}->error;

$notes = Notes::where(‘where’, ‘error_on_refund’)->where(‘is_active’, 1)>get();

$summa = false;

$valuta = false;

} else {

$summa = $xml->answer->{‘payment-ext-auth’}->cost;

$valuta = $xml->answer->{‘payment-ext-auth’}->cost[‘curr’];

$error = false;

$notes = false;

}

 

//trace_log(‘Сумма составила: ‘.$summa);         /*trace_log(‘Всего: ‘.post(‘iws’));         trace_log($name);         trace_log($surname);

$answer = $this->getAnswer(‘payment_ext_auth_refund’, $datas);

$xml = simplexml_load_string($answer);         trace_log($xml); */

 

return [

‘#makerealrefundcancel’ => ‘Вы все ещё можете <a id=»cancelref» datarequest=»onCancelRefund» data-request-data=»pnr: \». post(‘pnr’) .’\’, firstpaxname: \». post(‘firstpaxname’) .’\'» data-attach-loading class=»btn btn-xs btn-warning» href=»javascript:void(0);»>отменить</a>

возврат.<script>$(«#cancelref»).click(function(){ $(«#refundcont»).hide();

$(«#ordercont»).show(); });</script>’,

‘#refundcountsteptwo’ => $this->renderPartial($this.’::refundstep_two’, [

‘pnr’ => post(‘pnr’), ‘firstpaxname’ => post(‘firstpaxname’), ‘summa’ => $summa,

‘valuta’ => $valuta, ‘paxes_id’ => $paxes_id, ‘paxes_well_id’ => $paxes_well_id,

‘order_id’ => post(‘order_id’), ‘notes’ => $notes, ‘error’ => $error ] )         ];

}

 

 

public function onCancelRefund()

{

$datas = [‘action’ => ‘cancel’, ‘pnr’ => post(‘pnr’), ‘firstpaxname’ => post(‘firstpaxname’)];

$answer = $this->getAnswer(‘payment_ext_auth_refund’, $datas);

 

}

public function onMakeMoneyRefund()

{

//trace_log(post(‘test’));

 

$datas = [‘action’ => ‘confirm’, ‘pnr’ => post(‘pnr’), ‘firstpaxname’ => post(‘firstpaxname’), ‘summa’ => post(‘summa’), ‘valuta’ => post(‘valuta’)];

$mydatakey = $this->makeHandShake();

$answer = $this->getAnswer(‘payment_ext_auth_refund’, $datas,3,$mydatakey);         $xml_sirena = simplexml_load_string($answer);

 

 

//trace_log(‘Вот она: ‘.$xml->answer->{‘payment-ext-auth’}->ok);

//trace_log($xml);

if (isset($xml_sirena->answer->{‘payment-ext-auth’}->ok))

{

 

//$merchant_id = Settings::get(‘pg_merchant_id’);

$paxes = Paxs::whereIn(‘id’, post(‘paxes_id’))->get();             foreach ($paxes as $pax) {                 $pax->is_refunded = 1;

$pax->save();

$order = Orders::find(post(‘order_id’));

//узнаем остались ли не возвращённые пассажиры в заказе             if (!empty(post(‘paxes_well_id’))){

$welpax = Paxs::find(post(‘paxes_well_id’)[0]);

$order->firstpaxname = $welpax->surname;

$order->status = 5;

$order->save();

} else {

$order->status = 4;

$order->save();

$platron_datas = [‘pg_salt’ => md5(uniqid(rand(), true)), ‘pg_merchant_id’

=> $order->pays->platron_merchant_id, ‘pg_payment_id’ => $order->payment_id,

‘pg_refund_amount’ => abs(post(‘summa’)), ‘pg_secret_key’ => $order->pays-

>platron_secret_key ];

$xml_platron = simplexml_load_string($this-

>getAnswerFromPlatron(‘revoke.php’, $platron_datas ,’platron_refund’));

 

if ($xml_platron->pg_status == ‘ok’){

$order->refund = $order->refund + post(‘summa’);

$order->balance = $order->balance + post(‘summa’);

$order->save();

Flash::success(‘Возврат успешно произведён! Денежные средства поступят на счёт карты, с которой был сделан заказ от 2х до 25ти банковских дней.’);

 

$user = \Auth::getUser();

$vars = [‘pnr’ => $order->pnr ];

Mail::send(‘mihailbishkek.cousteau::mail.refund_success’, $vars, function($message) use ($user) {

$message->from(‘[email protected]’, ‘Aerobot’);

$message->to($user->email)->cc(‘[email protected]’);

return Redirect::refresh();

} else {

trace_log(‘Ошибка платрона: ‘, $xml_platron);

Flash::error(‘При возврате произошла ошибка! Возврат не произведён.’);

$vars = [‘pnr’ => $order->pnr, ‘error_code’=> $xml_platron-

>pg_error_code, ‘error_desc’ => $xml_platron->pg_error_description ];

Mail::send(‘mihailbishkek.cousteau::mail.refund_error_platron’, $vars, function($message) {

$message->from(‘[email protected]’, ‘Aerobot’);

$message->to(‘[email protected]’)->cc(‘[email protected]’);

});

return Redirect::refresh();

} else {

Flash::error(‘При возврате произошла ошибка: «‘. $xml_sirena->answer>{‘payment-ext-auth’}->error .'» Возврат не произведён. Сделайте фото данного сообщения, и обратитесь на почту: [email protected] ‘);

$vars = [‘pnr’ => post(‘pnr’), ‘error’ => $xml_sirena->answer->{‘paymentext-auth’}->error];

Mail::send(‘mihailbishkek.cousteau::mail.refund_error_sirena’, $vars, function($message) {

$message->from(‘[email protected]’, ‘Aerobot’);

$message->to(‘[email protected]’)->cc(‘[email protected]’);

});

return Redirect::refresh();

public function onFindInAllOrders()

{

$datas = [‘fio’ => post(‘fio’), ‘pnr’ => post(‘pnr’) ];

$answer = $this->getAnswer(‘query_order’, $datas);

$xml = simplexml_load_string($answer);

 

return [

‘#answer’ => $this->renderPartial($this.’::order_outhere’, [ ‘order’ =>

$xml->answer->order ] ),

       Страницы: 1 2 3

или напишите нам прямо сейчас:

Написать в WhatsApp Написать в Telegram

Комментарии

Оставить комментарий

 

Ваше имя:

Ваш E-mail:

Ваш комментарий

Валера 14 минут назад

добрый день. Необходимо закрыть долги за 2 и 3 курсы. Заранее спасибо.

Иван, помощь с обучением 21 минут назад

Валерий, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф

Fedor 2 часа назад

Здравствуйте, сколько будет стоить данная работа и как заказать?

Иван, помощь с обучением 2 часа назад

Fedor, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф

Алина 4 часа назад

Сделать презентацию и защитную речь к дипломной работе по теме: Источники права социального обеспечения

Иван, помощь с обучением 4 часа назад

Алина, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф

Алена 7 часов назад

Добрый день! Учусь в синергии, факультет экономики, нужно закрыт 2 семестр, общ получается 7 предметов! 1.Иностранный язык 2.Цифровая экономика 3.Управление проектами 4.Микроэкономика 5.Экономика и финансы организации 6.Статистика 7.Информационно-комуникационные технологии для профессиональной деятельности.

Иван, помощь с обучением 8 часов назад

Алена, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф

Игорь Петрович 10 часов назад

К утру необходимы материалы для защиты диплома - речь и презентация (слайды). Сам диплом готов, пришлю его Вам по запросу!

Иван, помощь с обучением 10 часов назад

Игорь Петрович, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф

Инкогнито 1 день назад

У меня есть скорректированный и согласованный руководителем, план ВКР. Напишите, пожалуйста, порядок оплаты и реквизиты.

Иван, помощь с обучением 1 день назад

Инкогнито, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф

Илья 1 день назад

Здравствуйте) нужен отчет по практике. Практику прохожу в доме-интернате для престарелых и инвалидов. Все четыре задания объединены одним отчетом о проведенных исследованиях. Каждое задание направлено на выполнение одной из его частей. Помогите!

Иван, помощь с обучением 1 день назад

Илья, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф

Alina 2 дня назад

Педагогическая практика, 4 семестр, Направление: ППО Во время прохождения практики Вы: получите представления об основных видах профессиональной психолого-педагогической деятельности; разовьёте навыки использования современных методов и технологий организации образовательной работы с детьми младшего школьного возраста; научитесь выстраивать взаимодействие со всеми участниками образовательного процесса.

Иван, помощь с обучением 2 дня назад

Alina, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф

Влад 3 дня назад

Здравствуйте. Только поступил! Операционная деятельность в логистике. Так же получается 10 - 11 класс заканчивать. То-есть 2 года 11 месяцев. Сколько будет стоить семестр закончить?

Иван, помощь с обучением 3 дня назад

Влад, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф

Полина 3 дня назад

Требуется выполнить 3 работы по предмету "Психология ФКиС" за 3 курс

Иван, помощь с обучением 3 дня назад

Полина, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф

Инкогнито 4 дня назад

Здравствуйте. Нужно написать диплом в короткие сроки. На тему Анализ финансового состояния предприятия. С материалами для защиты. Сколько будет стоить?

Иван, помощь с обучением 4 дня назад

Инкогнито, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф

Студент 4 дня назад

Нужно сделать отчёт по практике преддипломной, дальше по ней уже нудно будет сделать вкр. Все данные и все по производству имеется

Иван, помощь с обучением 4 дня назад

Студент, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф

Олег 5 дня назад

Преддипломная практика и ВКР. Проходила практика на заводе, который занимается производством электроизоляционных материалов и изделий из них. В должности менеджера отдела сбыта, а также занимался продвижением продукции в интернете. Также , эту работу надо связать с темой ВКР "РАЗРАБОТКА СТРАТЕГИИ ПРОЕКТА В СФЕРЕ ИТ".

Иван, помощь с обучением 5 дня назад

Олег, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф

Анна 5 дня назад

сколько стоит вступительные экзамены русский , математика, информатика и какие условия?

Иван, помощь с обучением 5 дня назад

Анна, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф

Владимир Иванович 5 дня назад

Хочу закрыть все долги до 1 числа также вкр + диплом. Факультет информационных технологий.

Иван, помощь с обучением 5 дня назад

Владимир Иванович, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф

Василий 6 дней назад

сколько будет стоить полностью закрыть сессию .туда входят Информационные технологий (Контрольная работа, 3 лабораторных работ, Экзаменационный тест ), Русский язык и культура речи (практические задания) , Начертательная геометрия ( 3 задачи и атестационный тест ), Тайм менеджмент ( 4 практических задания , итоговый тест)

Иван, помощь с обучением 6 дней назад

Василий, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф

Марк неделю назад

Нужно сделать 2 задания и 1 итоговый тест по Иностранный язык 2, 4 практических задания и 1 итоговый тест Исследования рынка, 4 практических задания и 1 итоговый тест Менеджмент, 1 практическое задание Проектная деятельность (практикум) 1, 3 практических задания Проектная деятельность (практикум) 2, 1 итоговый тест Проектная деятельность (практикум) 3, 1 практическое задание и 1 итоговый тест Проектная деятельность 1, 3 практических задания и 1 итоговый тест Проектная деятельность 2, 2 практических заданий и 1 итоговый тест Проектная деятельность 3, 2 практических задания Экономико-правовое сопровождение бизнеса какое время займет и стоимость?

Иван, помощь с обучением неделю назад

Марк, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф