Заключение
В процессе выполнения дипломного проекта была разработана система автоматизированной продажи авиабилетов на сайте авиакомпании http://www.bekair.com, получившая название «Кусто» (Cousteau, в честь французского исследователя Мирового океана Жак-Ив Кусто, вдохновившись мотивами названия более мощной, также упоминаемой в дипломном проекте системы Nemo).
Система разработана в виде подключаемого, к основной системе управления контентом OctoberCMS, плагина. Поскольку основу OctoberCMS составляет PHP фреймворк Laravel, то соответственно и «Кусто» была написана на языке программирования PHP. Предусмотрены возможности для администрирования системы, которые включают в себя управление справочниками системы, возможность оказания технической поддержки пассажирам, а также возможность аналитики для коммерческих целей.
В ходе работы над проектом, были достигнуты все поставленные цели, проанализирована ИТ составляющая авиакомпании, разработан проект автоматизации, в разы улучшена скорость загрузки страниц, упрощены формы диалогов с пользователем, в следствии чего повышен процент конверсии, что дало большой скачок в доходности авиакомпании, который также произошёл по причине возможности сотрудничества с мета поисковиком AviaSales. Была введена возможность самостоятельного совершения возврата авиабилетов, что в целом удачно сказалось на трудозатратах и как следствие этого – расходах авиакомпании.
Программное обеспечение представляет собой законченный продукт и может применяться в реальной жизни. В результате анализа экономической части, проект также получил высокие показатели. В частности, было установлено, что срок возврата инвестиций составляет менее одного месяца, что свидетельствует о его высокой эффективности и актуальности.
В качестве ближайших возможных путей развития Кусто, можно отметить разработку собственного API для создания мобильных приложений для Android и iOS систем, а также создание автоматизированной онлайн системы регистрации пассажиров, что очень актуально в данный момент, поскольку уже сегодня каждые два посетителя сайта http://www.bekair.com из трёх, осуществляют веб-сёрфинг с мобильного устройства. А каждое седьмое обращение в техническую поддержку поступает с вопросом «как можно зарегистрироваться/выбрать место в самолёте онлайн?».
Список литературы
- Автоматизированные информационные технологии в экономике. — М.: Компьютер, Юнити, 2017. — 400 c.
- Банковские информационные системы и технологии. Часть 1. Технология банковского учета. — М.: Финансы и статистика, 2015. — 384 c.
- Беленькая, М. Н. Администрирование в информационных системах / М.Н. Беленькая, С.Т. Малиновский, Н.В. Яковенко. — М.: Горячая линия — Телеком, 2019. — 400 c.
- Васильков, А. В. Безопасность и управление доступом в информационных системах / А.В. Васильков, И.А. Васильков. — М.: Форум, 2021. — 368 c.
- Гвоздева, В. А. Информатика, автоматизированные информационные технологии и системы / В.А. Гвоздева. — М.: Форум, Инфра-М, 2017. — 544 c.
- Гвоздева, Валентина Александровна Информатика, автоматизированные информационные технологии и системы. Учебник / Гвоздева Валентина Александровна. — М.: Форум, 2018. — 58 c.
- Грекул, В.И. Автоматизация деятельности предприятия розничной торговли с использованием информационной системы Microsoft Dynamics NAV / В.И. Грекул. — М.: Бином. Лаборатория знаний, 2015. — 389 c.
- Ивлев, В. А. ABIS. Информационные системы на основе действий / В.А. Ивлев, Т.В. Попова. — М.: 1С-Паблишинг, 2019. — 248 c.
- Каримов, Вячеслав Хамитович Автоматизированные информационно-поисковые системы криминалистического назначения. Современное состояние, тенденции и перспективы развития / Каримов Вячеслав Хамитович. — М.: Юрлитинформ, 2021. — 322 c.
- Криницкий, Н. А. Автоматизированные информационные системы / Н.А. Криницкий, Г.А. Миронов, Г.Д. Фролов. — М.: Главная редакция физико-математической литературы издательства «Наука», 2016. — 380 c.
- Криницкий, Н.А. Автоматизированные информационные системы / Н.А. Криницкий, Г.А. Миронов, Г.Д. Фролов. — М.: Наука, 2017. — 382 c.
- Любарский, Ю.Я. Интеллектуальные информационные системы / Ю.Я. Любарский. — М.: Наука, 2016. — 232 c.
- Любарский, Ю.Я. Интеллектуальные информационные системы / Ю.Я. Любарский. — М.: Наука, 2021. — 228 c.
- Маглинец, Ю.А. Анализ требований к автоматизированным информационным системам / Ю.А. Маглинец. — М.: Бином. Лаборатория знаний, 2016. — 409 c.
- Маха, Акрам Шана Автоматизированная информационная система адаптивного обучения / Маха Акрам Шана. — М.: LAP Lambert Academic Publishing, 2019. — 188 c.
- Мезенцев, К. Н. Автоматизированные информационные системы / К.Н. Мезенцев. — М.: Academia, 2021. — 176 c.
- Мезенцев, К. Н. Автоматизированные информационные системы / К.Н. Мезенцев. — М.: Академия, 2015. — 174 c.
- Мезенцев, К. Н. Автоматизированные информационные системы / К.Н. Мезенцев. — М.: Академия, 2019. — 176 c.
- Мезенцев, Константин Николаевич Автоматизированные информационные системы. Учебник для студентов учреждений среднего профессионального образования / Мезенцев Константин Николаевич. — М.: Академия (Academia), 2019. — 300 c.
- Норенков, Игорь Автоматизированные информационные системы / Игорь Норенков. — Москва: Наука, 2017. — 345 c.
- Путькина, Л. В. Интеллектуальные информационные системы / Л.В. Путькина, Т.Г. Пискунова. — М.: СПбГУП, 2016. — 228 c.
- Пьявченко, Т. А. Автоматизированные информационно-управляющие системы с применением SCADA-системы Trace Mode. Учебное пособие / Т.А. Пьявченко. — М.: Лань, 2015. — 336 c.
- Пьявченко, Тамила Алексеевна Автоматизированные информационно-управляющие системы с применением SCADA-системы Trace Mode. Учебное пособие. Гриф УМО вузов России / Пьявченко Тамила Алексеевна. — М.: Лань, 2015. — 247 c.
- Редько, В.Н. Базы данных и информационные системы / В.Н. Редько, И.А. Басараб. — М.: Знание, 2020. — 32 c.
- Реутов, А. П. Автоматизированные информационные системы. Методы построения и исследования / А.П. Реутов, М.В. Черняков, С.Н. Замуруев. — М.: Радиотехника, 2015. — 328 c.
- Рубичев, Н. А. Измерительные информационные системы / Н.А. Рубичев. — М.: Дрофа, 2020. — 336 c.
- Хубаев, Георгий Николаевич Информатика. Информационные системы. Информационные технологии. Тестирование. Подготовка к интернет-экзамену / Хубаев Георгий Николаевич. — М.: Феникс, 2018. — 437 c.
- Цапенко, М.П. Измерительные информационные системы / М.П. Цапенко. — М.: Энергоатомиздат, 2020. — 440 c.
- Чандра, А. М. Дистанционное зондирование и географические информационные системы / А.М. Чандра, С.К. Гош. — М.: Техносфера, 2015. — 328 c.
- Школьник, Алексей Автоматизированная информационная система учета ИТ-активов предприятия / Алексей Школьник. — М.: 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(‘it@aero.kg’, ‘Заблокирована попытка брони ботом.’); return [
‘#error’ => ‘<div class=»alert alert-danger»>Привет, я Aerobot. Судя по всему, ты тоже бот, поэтому твоя попытка забронировать авиабилет была успешно
отклонена. Если есть вопросы, пиши на it@aero.kg.</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(‘support@aero.kg’)->cc(‘it@aero.kg’) });
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(‘aerobot@aero.kg’, ‘Aerobot’);
$message->to($user->email)->cc(‘it@aero.kg’);
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(‘aerobot@aero.kg’, ‘Aerobot’);
$message->to(‘it@aero.kg’)->cc(‘support@aero.kg’);
});
return Redirect::refresh();
} else {
Flash::error(‘При возврате произошла ошибка: «‘. $xml_sirena->answer>{‘payment-ext-auth’}->error .'» Возврат не произведён. Сделайте фото данного сообщения, и обратитесь на почту: support@aero.kg ‘);
$vars = [‘pnr’ => post(‘pnr’), ‘error’ => $xml_sirena->answer->{‘paymentext-auth’}->error];
Mail::send(‘mihailbishkek.cousteau::mail.refund_error_sirena’, $vars, function($message) {
$message->from(‘aerobot@aero.kg’, ‘Aerobot’);
$message->to(‘it@aero.kg’)->cc(‘support@aero.kg’);
});
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 ] ),
Комментарии
Оставить комментарий
Валера 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@дцо.рф