355
правок
Изменения
Нет описания правки
[[Category:Функции]]{{Deprecated ru}}[[Category:Интеграция]]<!-- -->Для интеграции Nemo {{NameSystemLink}} с другими системами имеются инструменты обмена данными.
== Легкая форма на сайт ==
[[Файл:Лёгкая_форма.png|400px|thumb|right|«Лёгкая форма»]]
Если вы желаете разместить поисковую форму авиабилетов на другом домене, то это можно сделать с помощью '''«Легкой Формы»'''. Других доменов может быть несколько, но после заполнения поисковых критериев [[пользователь]] будет перебрасываться на ваш сайт для просмотра результатов и бронирования.
1. Разместить Подключить у себя на странице в месте, где должна располагаться форма следующий html-кодвнутри тега <head> нужные файлы:
<pre><link rel="stylesheet" href="http://DOMAIN/templates/nano/css/ui.datepicker.css" type="text/css" media="screen"><link rel="stylesheet" href="css/style.css" type="text/css" media="screen" ><script type="text/javascript" src="http://DOMAIN/static/js/jquery-1.3.1.min.js"></script><script type="text/javascript" src="http://DOMAIN/static/js/nano_loader.js"></script></pre>
<span style="background-color:#fff0f5;"><span style="font-size:large;"><span style="color:#ff0000;">!Если ранее вы использовали http://DOMAIN/static/js/jquery-1.3.1.min.js — обратите внимание на изменение пути.</span></span> Здесь и делее замените в адресах ссылок DOMAIN на имя вашего домена!
{{Attention|Здесь и далее замените в адресах ссылок DOMAIN на имя вашего домена!}} 2. Разместить Также необходимо разместить скрипт инициализации формы:
<pre><script>
</script></pre>
Здесь : * '''typeSearch''' может принимать значения OW или RT (в один конец или туда и обратно).<br> ; * '''arrDate''' - — через сколько дней вылет.<br> ;* '''depDate''' - — через сколько дней обратный вылет;* '''outSearch''' — текст запроса в автокомплит для предзаполнения поля "Вылет";* '''inSearch''' — текст запроса в автокомплит для предзаполнения поля "Прилет";Дефолтным пунктом вылета/прилета в полях формы установится первый пункт, который подгружается в автокомплит по вводу этого текста.
3. Разместить на html-странице в желаемом месте код формы: <div class="toccolours mw-collapsible mw-collapsed">Код формы<prediv class="mw-collapsible-content"><syntaxhighlight lang="html4strict" line enclose="div" style="font-size:9pt; padding: 10px 5px; margin: 10px 0;"><div id="nano_flght_form" style="display:none;"> <div id="test"></div> <div id="wrapper"> <div id="main"> <div class="title"> <h1>Поиск авиабилетов</h1> </div> <form name="search-form" id="search-form" method="POST" action="http://lightform/index.php?go=search/index"> <fieldset> <div class="box"> <div class="bg-t"> <div class="form-track"> <h2>Маршрут</h2> <div class="mtext"></div> <div class="row"> <input type="hidden" value="1" name="real_gogo"> <input type="radio" id="trip_type" name="trip_type" value="OW" checked>В одну сторону <input type="radio" id="trip_type" name="trip_type" value="RT">Туда и обратно </div> <div id="normal-selection"> <!-- Строка вылета --> <div class="row row-departure"> <!-- Вылет из --> <div class="col-airport"> <label>Вылет</label><span style="display: none; margin-left: 100px;" class="required error" id="out_search-error"></span> <div class="location_select"> <span class="hint"> <div id="span_out_search"></div> <input type="text" style="width: 100%; display: none;" class="loc ac_input" value="" id="out_search" name="out_search" check="" autocomplete="off"> </span> <div id="control_out_iata"> <input type="hidden" rel="{group:['OW', 'RT'], visitor:'prev_iata', id: 'out_search-error', required_error:'Обязательное поле'}" class="v-visitor v-required" value="" name="out_iata"> </div> </div>
</div>
</div>
</div>
<option value="1">1</option>
<option value="2">2</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="1">1</option>
</div>
img{border-style:none;}
a{color:#009}
.header-hold{width:100%;clear:both;}
.logo{width:114px;height:55px;overflow:hidden;float:left;display:inline;margin:4px 0 0 63px;}
.header-hold .logo a{display:block;background:url(../images/logo.png);text-indent:-9999px;overflow:hidden;width:114px;height:55px;}
#header .login-box{float:left;display:inline;margin:10px 0 0 0;}
#lang{float:right;display:none;margin:12px 20px 0 0;}
#header .top-menu li{float:left;margin:0 0 0 5px;}
#header .top-menu a{float:left;padding:0 0 0 7px;}
#header .top-menu a.lnk-avt{background:url(../images/ico-topnav.gif) no-repeat 0 0;}#header .top-menu a.lnk-reg{background:url(../images/ico-topnav.gif) no-repeat 0 -18px;padding:0 0 0 14px;}/*#header .top-menu a.lnk-tools{background:url(../images/ico-topnav.gif) no-repeat 0 -36px;padding:0 0 0 18px;}*/
.navigation{list-style:none;font-size:22px;line-height:36px;width:1048px;overflow:hidden;margin:0 -48px 0 0;padding:14px 0 0 1px;}
.navigation li{float:left;margin:0 48px 0 0;}
.navigation a{float:left;color:#4a4a4a;background:url(../images/bg-nav-ico.png) no-repeat;}
.navigation .lnk-ticket{background-position:0 0;padding:0 0 0 63px;}
.navigation .lnk-otel{background-position:0 -36px;padding:0 0 0 37px;}
#main .title{overflow:hidden;padding:0 0 12px;}
#main .title h1{color:#333;font-size:24px;font-weight:400;margin:0;}
.box{width:100%;background:url(../images/bg-box.gif);}
.box .bg-t{border-top:1px solid #e3e3e3;border-bottom:1px solid #a3a3a3;border-right:1px solid #a3a3a3}
.form-track{padding:8px 15px 0;}
.form-track label.active{font-weight:700;color:#48a200;}
ul.che-list li {clear:both;}
.arrows{background:url(../images/arrows.png) no-repeat left top;margin-left: 151px;height:35px;width:61px;cursor:pointer;display:none}
.arrow_rt{background-position:left -35px;}
.col-airport, .col-city{float:left;width:390px;position:relative}
#assignment-error .tooltip-red{top:-80px !important;left:190px !important;position:relative !important;}
.tooltip .l{float:left;overflow:hidden;width:30px;height:51px;}
.tooltip-blue .l{background:url(../images/bg-tt-blue-l.png);}.tooltip-red .l{background:url(images/bg-tt-red-l.png);}.tooltip-red ./l{background:url(images/bg-tt-red-l.png);}
.tooltip .txt{float:left;height:33px;padding:0 8px 0 0;}
.tooltip-blue .txt{background:url(../images/bg-tt-blue-c.png);}.tooltip-red .txt{background:url(../images/bg-tt-red-c.png);}
.tooltip .txt span{float:left;position:relative;margin:0 0 0 -13px;}
.tooltip .r{float:left;overflow:hidden;width:11px;height:33px;}
.tooltip-blue .r{background:url(../images/bg-tt-blue-r.png);}.tooltip-red .r{background:url(../images/bg-tt-red-r.png);}
.col-airport select{width:365px;font:17px/20px 'Trebuchet MS', Arial, sans-serif;color:#6c6c6c;}
.form-track .col-date{float:left;position:relative}
/*.form-track .col-time{float:left;overflow:hidden;}*/
.row-departure{width:100%;clear:both;padding:0 0 4px;}
.box-bottom{width:100%;overflow:hidden;background:url(../images/bg-box-b.gif);margin:0 0 20px;}.box-bottom .bg-t{width:100%;overflow:hidden;background:url(../images/bg-box-b-t.gif) no-repeat;display:none}
.box-bottom .bg-b{height:1%;overflow:hidden;padding:14px 10px 10px 10px;border:1px solid #ececec}
.box-bottom .title-b{padding:0 0 24px;}
.box-bottom h3{font-size:18px;font-weight:400;background:url(../images/dashed.gif) repeat-x 0 100%;float:left;margin:0;padding:0 0 3px;}.box-bottom h3 a{text-decoration:none;background:url(../images/arrow-top.gif) no-repeat 100% 50%;color:#4a4a4a;padding:0 18px 0 0;}.box-bottom h3 a.close-box{background:url(../images/arrow-bottom.gif) no-repeat 100% 50%;}
.row{clear:both;padding:0 0 24px;}
.row label span{padding:0 5px;}
.toll-che{padding-top:20px;}
.add,.delete{float:left;color:#4a4a4a;font-size:14px;line-height:27px;text-decoration:none;padding:0 0 0 32px;}
.delete{float:right;background:url(../images/ico-error.gif) no-repeat 0 -41px;margin:0 116px 0 0;}.add span,.delete span{background:url(../images/dashed.gif) repeat-x 0 100%;}.add{background:url(../images/ico-error.gif) no-repeat 0 0;font-size:18px;line-height:36px;padding:0 0 0 44px;}
.form-track .row1 label{line-height:30px;}
.buttons{padding:10px 0 15px;}
.error1{color:#ec1612;font-size:14px;background:url(../images/ico-error.gif) no-repeat 0 -75px;line-height:30px;margin:5px 0 0 42px;padding:0 0 0 52px}
.search_noresults{width:960px !important;margin-left:-265px}
.btn{border:none;background:none;}
.search-form-err{color:#F00; line-height:30px;font-size:16px; margin:10px 0 0 42px;padding:10px 0 0;}
.warning{color:#af0307;font-size:14px;font-weight:700;background:url(../images/warning.png) no-repeat;line-height:48px;margin:5px 0 10px 12px;padding:0 0 0 52px;}
.buttons .btn-search, .btn-big-w{background: #57bb10;float:left;height:25px;line-height:25px;font-size:18px;color:#fff;text-decoration:none;margin:0 0 0 0;border-top:1px solid #add595;border-left:1px solid #add595;border-right:1px solid #3e8514;border-bottom:1px solid #3e8514;
border-radius: 3px;-moz-border-radius: 3px;-webkit-border-bottom-left-radius: 3px;-webkit-border-top-right-radius: 3px;
-webkit-border-bottom-right-radius: 3px;-webkit-border-top-left-radius: 3px}
.buttons .btn-search span, .btn-big-w span{float:left;background:url(../images/btn-search.gif) no-repeat 100% -41px;cursor:pointer;padding:0 45px;}.btn-big-g{background:url(../images/btn-big-g.gif);float:left;height:41px;line-height:41px;font-size:24px;color:#fff;text-decoration:none;margin:0 0 0 31px;}.btn-big-g span{float:left;background:url(../images/btn-big-g.gif) no-repeat 100% -41px;cursor:pointer;padding:0 45px;}.btn-big-g-a{background:url(../images/btn-big-g.gif);float:left;height:41px;line-height:41px;font-size:24px;color:#fff;text-decoration:none;}.btn-big-g-a span{float:left;background:url(../images/btn-big-g.gif) no-repeat 100% -41px;cursor:pointer;padding:0 45px;}.pay-btn-big-g{background:url(../images/btn-big-g.gif);float:left;height:41px;line-height:41px;font-size:24px;color:#fff;text-decoration:none;margin:0 0 0 31px;}.pay-btn-big-g span{float:left;background:url(../images/btn-big-g.gif) no-repeat 100% -41px;cursor:pointer;padding:0 45px;}
.btn-clear, .btn-small{float:right;border-bottom:1px solid #a3a3a3;border-right:1px solid #a3a3a3;border-left:1px solid #f4f4f4;border-top:1px solid #f4f4f4;height:24px;line-height:24px;color:#4a4a4a;text-decoration:none;margin:9px 20px 0 0;background:#d9d9d9}
.btn-small-g{float:right;background:#FF8C00;border-right:1px solid #a4a4a4;border-bottom:1px solid #a4a4a4;border-left:1px solid #f4f4f4;border-top:1px solid #f4f4f4;height:24px;line-height:24px;color:#fff;text-decoration:none;border-radius: 3px;-moz-border-radius: 3px;-webkit-border-bottom-left-radius: 3px;-webkit-border-top-right-radius: 3px;
.btn-small-g span{float:left;cursor:pointer;white-space:nowrap;padding:0 12px;}
button{cursor:pointer;}
.btn-clear span,.btn-small span{float:left;cursor:pointer;background:url(../images/btn-clear.gif) no-repeat 100% -24px;white-space:nowrap;padding:0 12px;}
.search_btn_clear{float:right;display:none}
.select2{width:53px;}
.che-hold{float:left;overflow:visible;margin:4px 0 0;}
.row-arrows1 select{width:364px;font:17px/20px 'Trebuchet MS', Arial, sans-serif;color:#6c6c6c;}
.row-arrows1 .arrow{float:left;overflow:hidden;background:url(../images/arrow-right.gif);width:35px;height:28px;margin:0 27px 0 33px;}
#table{
}
#table th, #table td{
}
#air_fare_info h2{margin-top:20px;}
#table th{
}
.stub_extra_block{ padding: 14px 0 0; }
#footer{width:420px;overflow:hidden;background:url(../images/sep-footer.gif) no-repeat 50% 0;margin:20px auto 0;padding:10px 0 20px;display:none !important}
#footer p{text-align:center;margin:0;}
#footer p a{padding:0 10px;}
.canvas{padding:10px 20px 0;}
#fader{position:absolute;top:0;left:0;display:none;z-index:999;background:#000;}
.popup .title{background:url(../images/bg-popup-top.png);width:512px;height:43px;overflow:hidden;}.popup .title .close{float:right;text-indent:-9999px;overflow:hidden;background:url(../images/btn-close.gif);width:15px;height:16px;margin:13px 16px 0 0;}.popup .m{background:url(../images/bg-popup.png);overflow:hidden;width:474px;padding:10px 16px 22px 22px;}.popup .b{display:block;overflow:hidden;width:100%;background:url(../images/bg-popup-b.png);height:8px;}.popup .inp-hold3{background:url(../images/bg-inp3.gif);overflow:hidden;width:339px;height:14px;margin:0 0 15px;padding:8px 13px;}
.popup .inp-hold3 input{border:0;width:339px;height:14px;padding:0;}
.popup .wrap{overflow:hidden;height:334px;width:475px;position:relative;}
.popup .check-list li{width:100%;overflow:hidden;padding:0 0 16px;}
.popup .check-list label{float:left;line-height:22px;margin:0 0 0 6px;}
.popup .btn-save{float:left;overflow:hidden;background:url(../images/btn-save.gif);height:32px;color:#fff;line-height:32px;text-decoration:none;font-size:18px;margin:16px 0 0;}.popup .btn-save span{float:left;cursor:pointer;background:url(../images/btn-save.gif) no-repeat 100% -32px;padding:0 27px;}
.scrollable{height:334px;overflow:hidden;}
.scroll-content{top:0!important;height:334px!important;width:475px!important;left:0!important;}
.vscroll-bar{position:absolute;width:12px!important;height:334px!important;top:0!important;margin:0;padding:0;}
.vscroll-line{width:11px!important;overflow:hidden;background:url(../images/scroll-line.gif);}.vscroll-slider{background:url(../images/slider.gif)!important;width:12px!important;cursor:pointer;height:12px!important;overflow:hidden;}
.box-hide .box{margin-top:-230px;position:relative;}
.box-hide .active-box{margin-top:0;}
.ac_results li{display:block;font:menu;font-size:11px;line-height:16px;overflow:hidden;color:#FFF;border-top:1px solid #1fa2e7;border-bottom:1px solid #0088d0;white-space:nowrap;cursor:pointer;margin:0;padding:4px 5px;}
.ac_results .grey, .aj_inf{color:#9ff8ff;}
.ac_loading{background:url(../images/indicator.gif) right no-repeat!important;background-color:#FFF;}
.ac_over{background-color:#5ec1f7;color:#FFF;}
input[type=text],input[type=password],input[type=input],select, .location_select{position:relative;line-height:20px;height:20px;border:1 solid #CCC;background:#FFF /*url(../images/inp-shadow.gif) repeat-x*/;border-right:1px solid #b7b7b7;border-left:1px solid #b7b7b7;border-top:1px solid #AAA;border-bottom:1px solid #E9E9E9;padding:0; overflow:hidden;}
.loc{width:100%;border-style:none !important;background-image:none!important;padding:0!important;margin:0!important;height:18px!important;}
.location_select{cursor:pointer;}
.location_select span div, .location_select input{width:99%; cursor:pointer;}
.location_select .grey, .location_select .aj_inf{color:#DDD;float:right !important;}
input.hasDatepicker{background:url(../images/cal-bg.png) top right no-repeat;padding-right:20px;}
.inp-hold1{float:left;}
#tooltip{background:url(../images/bg-tooltip.png);background-color:none;opacity:0.85;position:absolute;z-index:3000;padding:17px 6px 6px 17px;}
#tooltip h3,#tooltip div{font-size:.9em;color:#FFF;margin:0;}
.settings{margin-bottom:20px;clear:both; position:relative;}
#TB_secondLine{font:10px Arial, Helvetica, sans-serif;color:#666;}
#TB_overlay{position:fixed;z-index:100;top:0;left:0;height:100%;width:100%;}
.TB_overlayMacFFBGHack{background:url(images/macFFBgHack.png) repeat;}
.TB_overlayBG{background-color:#000;filter:alpha(opacity=75);-moz-opacity:0.75;opacity:0.75;}
#TB_window img#TB_Image{display:block;border-right:1px solid #ccc;border-bottom:1px solid #ccc;border-top:1px solid #666;border-left:1px solid #666;margin:15px 0 0 15px;}
#TB_closeWindow{height:25px;float:right;padding:11px 25px 10px 0;}
#TB_closeAjaxWindow{margin-bottom:1px;text-align:right;float:right;padding:12px 10px 5px 0;}
#TB_closeWindowButton{background:url(../images/btn-close.gif) no-repeat right;width:15px;height:16px;color:#FFF;margin:33px 5px 0 0;padding:12px 22px 13px;}
#TB_closeWindowButton a:link,#TB_closeWindowButton a:visited{color:#FFF;}
#TB_title{background-color:#0097e7;height:43px;}
* html #TB_overlay,* html #TB_HideSelect{
}
* html #TB_window,* html #TB_load{
}
/* FIX ME*/
.price_val{font-size:18px;text-align:center;}
.price_val_hotel{color:#48a200;
.price_detail_link a{color:#999;}
.var_num{font-size:24px;color:#38647d;width:30px;}
.map_var{background-color:#4F86A4;color:#FFF;font-weight:700;font-size:8px;padding:0 2px;}
.vendor_wl{background-color:#F5FFF5;}
.selected_flight .var_num{background:#f9b500 url(../images/sr_bg.jpg) -90px top;color:#000;}
#tools{top:0;left:30%;z-index:10;background:#ff8c00;border:2px solid #CCC;text-align:center;font-weight:700;width:auto;position:fixed;opacity:0.95;padding:10px;}
#tools a{color:#FFF;font-size:16px;padding:10px;}
.timetable_search{float:right;width:20%;text-align:right;padding-top:20px;}
.details div{display:inline;}
.bookmark{background:url(../images/star_off.png) no-repeat;width:16px;height:16px;float:right;cursor:pointer;display:none}.selected_flight .bookmark{background:url(../images/star.png);}
.dep,.arr{font-family:verdana;font-weight:700;font-size:11px;}
#sr-search-params{padding:10px;}
#matrix{margin:auto;background-color:#e6e7ec;}
#matrix td,th{border:1px solid #cecece;font-size:12px;padding:7px;}
#matrix td{background:url(../images/sr_fl_bg.png) no-repeat left -40px;}
.active_cell{background-position:left bottom!important;}
#matrix th,#matrix th .active_cell{background-image:url(../images/th_bg.jpg) ;}
.price_num{font-weight:700;}
.nav_links{float:right;width:200px;}
#back_to_search{float:right;}
/*#form_hotel_search .label{margin-top:15px;} */
.hotel{background:#d9dde2 url(../images/sr_htl_bg.png) no-repeat;font-family:Arial, Helvetica, sans-serif;font-size:11px;width:100%;}
.hotel td{vertical-align:top;}
.res_hotel_location{float:right; white-space:nowrap;padding:5px;}
.info_link{margin-left:10px;}
.hname{font-size:14px;font-weight:700;font-family:Verdana;color:#333;}
.star5,.star4,.star3,.star2,.star1{background:url(../images/stars.png);font-size:1px;width:54px;height:10px;float:left;}
.star4{background-position:left -15px;}
.star3{background-position:left -30px;}
#sr-search-params,#sr_toolbar{padding:10px;}
.search_params label{margin:0;}
.cr_out_loc{background:url(../images/arrow-right.gif) 96% 20px no-repeat;padding-right:70px!important;}
.cr_segment{padding-bottom:30px; padding-top:20px;margin-bottom:20px;}
.cr_options .col{width:300px; float:left;}
/*Seatmapping*/
.seatmap div.row_left { background: url(../images/row_left.png) no-repeat right top !important; width:154px!important;color:#FFF; text-align:right;font-size:18px;padding-right:20px;}.seatmap div.row_right { background: url(../images/row_right.png) no-repeat left top !important; width:154px!important;}.seatmap div, .seatmap_legend td { background: url(../images/seatmap.png) no-repeat top left;}
.pass_settings{margin-left: 220px; clear:both;}
.aisle, .row_left, .row_right { background-position: 0 0!important; width: 33px; height: 47px; }
.sel {background-position: -84px -47px!important; cursor:pointer;}
.seatmap div.row_left.wing {background: url(../images/row_left_wing.png) no-repeat right top !important; }.seatmap div.row_right.wing {background: url(../images/row_right_wing.png) no-repeat left top !important; }
#map_segments td.segment, #map_segments td.segment a{font-size:15px;color:#48a200;font-weight:700;}
#map_segments td.inactive_segment, #map_segments td.inactive_segment a{font-size:17px;color:#DDD;font-weight:700;}
.room_lab{font-weight:700;}
.room_lab .room_number{font-size:150%}
.delete_icon{ background: url(../images/cross_small.png) no-repeat; padding-left:20px; margin-right:20px;}.add_icon{ background: url(../images/plus_small.png) no-repeat;padding-left:20px; margin-right:20px;}
.category_table{width: 100%;}
.cmstoolbar_page:hover{height:100px;width:300px;z-index:1005}
.search_form .form-tools .row{padding:0;}
#kkdateTime {
}
.logic_record{margin:4px;}
.ac_loading {
}
.login_buttons_div{padding-left:170px}
.big_green_text{color:#48a200;
#div_reg .btn-small-g{
}
.comment{
}
.row_trip input{vertical-align: top;}
#dropoff_city_from #citiesAndCountry, #dropoff_city_from #list_ref{
}
.flag.flag-zm{background-position:-216px -168px;}
.flag.flag-zw{background-position:-234px -168px;}
</stylesyntaxhighlight></pre> В настройках агентства (если доступно) перечислите домены, на которых будет размещена легкая форма. <span style="background-color:#fff0f5;"><span style="font-size:large;"><span style="color:#ff0000;">!</span></spandiv> Легкая форма работает на сайтах с кодировкой UTF-8. == Автоэкспорт ПНР == Для автоматического получения [[ПНР]] при бронировании или аннуляции услуги, нужно указать url-адрес, на который система будет высылать интересующую информацию в '''«Настройки» - «Администрирование» - «Реквизиты подключения» - «Url стороннего скрипта для XML уведомлений»'''. <span style="background-color:#fff0f5;"><span style="font-size:large;"><span style="color:#ff0000;">!</spandiv></span> Если вы не видите в реквизитах подключения поле '''«Url стороннего скрипта для XML уведомлений»''' - значит это поле скрыто для вас администратором. В этом случае необходимо обратиться к сотрудникам технической поддержки.</span> Если url-адрес указан в настройке, то формирование и отправка [[ПНР]] на указанный адрес происходит при следующих действиях:*void - Отмена выписки;*ticket - Выписка;*update - Обновление брони;*book - Бронирование;*cancel - Отмена брони
== Фиксация оплаты внешним запросом ==
Сервис предназначен для приема информации о получении оплаты и простановки статуса '''«Оплачено»''' для определенного заказа.
Сервис вызывается следующим образом: [http://hostnameCLIENT_DOMAIN/index.php?go=payment/bill http://hostname/index.php?go=payment/bill] '''Допустимые Get-параметры:''' <table border="1"> <tr bgcolor="#cccccc"> <th>Параметр</th><th>значение</th> </tr> <tr> <td>locator</td><td>номер заказа в системе поставщика</td> </tr> <tr> <td>type</td><td>тип оплачиваемой услуги</td> </tr> <tr> <td>billing_id</td><td>номер платежной транзакции</td> </tr> <tr> <td>booking_id</td><td>номер заказа (бронирования) в системе Nemo</td> </tr> <tr> <td>user_id</td><td>ID пользователя</td> </tr> <tr> <td>sig</td><td>подпись запроса</td> </tr></table> '''Type''' может принимать следующие значения: <table border="1"> <tr bgcolor="#cccccc"> <th class="col0">Значение</th><th class="col1">Описание</th> </tr> <tr class="row1"> <td class="col0">FLIGHTS</td><td class="col1">авиабилет</td> </tr> <tr class="row2"> <td class="col0">HOTELS</td><td class="col1">отель </td> </tr> <tr class="row3"> <td class="col0">APARTMENTS</td><td class="col1">апартаменты</td> </tr> <tr class="row4"> <td class="col0">TRANSFERS</td><td class="col1"> трансфер</td> </tr> <tr class="row5"> <td class="col0">TOURS</td><td class="col1"> экскурсия</td> </tr> <tr class="row6"> <td class="col0">TOURPACK</td><td class="col1"> пакетный тур</td> </tr> <tr class="row7"> <td class="col0">DYNAPACK</td><td class="col1"> динамический пакет</td> </tr> <tr class="row8"> <td class="col0">INSURANCE</td><td class="col1"> страховка</td> </tr> <tr class="row9">
Подпись sig сверяется c <syntaxhighlight lang="text" enclose="none" style="font-size: 1.2em; padding: 0 3px; background: #F0F0F0; border: 1px dashed #2F6FAB;">md5($booking_id.$secret)</syntaxhighlight>, где:* $booking_id — Id заказа в системе {{NameSystem}};* $secret — значение настройки {{Setting|Ключ безопасности для сервиса выставления оплаты и получения XML выгрузки}} в разделе '''Подпись запросаУправление сайтом → Домены и протоколы'''.
<pre>Если какие-то из альтернативных параметров не заданы, то они не влияют на подпись.
То
sig=md5(J89RWTFLIGHTS75363333333326333012345) = 81bff1e4257435466a3245bf1040ed8ea439a4492131f4b866ed1a17d018d3a6</pre> Для получения данных о брони получается такая ссылка [http://hostname/index.php?go=booking/pnr_export_xml&locator=J89RWT&type=FLIGHTS&user_id=7536&sig=81bff1e4257435466a3245bf1040ed8e http://hostname/index.php?go=booking/pnr_export_xml&locator=J89RWT&type=FLIGHTS&user_id=7536&sig=81bff1e4257435466a3245bf1040ed8e]
<pre>-<PNR> -<Common> <id>31394</id> <Type>FLIGHTS</Type> <Service>GALILEO</Service> <Locator>TTJF5Q</Locator> <BeginDateTime>2012.01.27-17:55</BeginDateTime> <EndDateTime>2012.01.27-20http:30</EndDateTime> -<TotalPrice> <Amount>5604</Amount> <CurrencyCode>RUB<CLIENT_DOMAIN/CurrencyCode> </TotalPrice> <UserId>31875</UserId> <EEUserId>23131</EEUserId> <UserLogin>makasy</UserLogin> <GroupId>31874</GroupId> <UserStatus>Менеджер</UserStatus> <DateCreate>2011.11index.29-14:32</DateCreate> </Common> -<Payment> <Title>Инвойс</Title> <Method>Gateline</Method> <BillingId>6688</BillingId> <CreateDate>2011-11-30 13:59:23</CreateDate> <Status>booked</Status> <PenaltyDate></PenaltyDate> <Timelimit>2011-12-01 14:40:02</Timelimit> -<Charge> <Amount>100</Amount> <CurrencyCode>RUB</CurrencyCode> </Charge> -<Book> <Amount>183.9712</Amount> <CurrencyCode>USD</CurrencyCode> -</Book> -<Penalty> <Amount>0</Amount> <CurrencyCode>RUB</CurrencyCode> </Penalty> -<Total> <Amount>5604</Amount> <CurrencyCode>RUB</CurrencyCode> </Total> -<Commission> <Amount>0</Amount> <CurrencyCode>RUB</CurrencyCode> </Commission> </Payment> -<Client> <LastName>RTVCVBVCB</LastName> <Name>TTVCBVCVB</Name> <MiddleName>отчество</MiddleName> <SerialNumber>1234</SerialNumber> <Number>567891</Number> <Birth></Birth> <Email>makasy15@gmail.com</Email> <Phone>+79878262130</Phone> </Client> <PassengersCount>1</PassengersCount> -<Passengers> -<Passenger> <nationality>RU</nationality> <passenger_type>ADT</passenger_type> <lastname>RTVCVBVCB</lastname> <name>TTVCBVCVB</name> <passport_series></passport_series> <passport_number>1234567891</passport_number> <date_of_birth>26.11.1981</date_of_birth> <currency_of_passport>17.05.2012</currency_of_passport> -<phone> <country></country> <city></city> <number>+79878262130</number> <expansion></expansion> </phone> <doc_type>P</doc_type> <middlename></middlename> <passenger_id></passenger_id> <gender>M</gender> <meal>NONE</meal> </Passenger> </Passengers> <FlightType>Международный</FlightType> -<OrderInfo> -<Info> <Company>Эйр Берлин</Company> <CompanyCode>AB</CompanyCode> <StartDate>2012.01.27</StartDate> <StartTime>17:55</StartTime> <StartDayOfWeek>Friday</StartDayOfWeek> <FlightNumber>8353 (AB8353)</FlightNumber> <StartAirportCode>DME</StartAirportCode> <StartAirportName>Домодедово (Москва)</StartAirportName> <StartCountry>Россия</StartCountry> <StartCountryCode>RU</StartCountryCode> <EndAirportCode>TXL</EndAirportCode> <EndAirportName>Тегэль (Берлин)</EndAirportName> <EndCountry>Германия</EndCountry> <EndCountryCode>DE</EndCountryCode> <Time>2:55</Time> -<Equip> <Name>Эрбас 320</Name> <Type>320</Type> </Equip> <ClassType>economy</ClassType> <ClassTypeCode>P</ClassTypeCode> <Meal>S</Meal> </Info> -<Info> <Company>Эйр Берлин</Company> <CompanyCode>AB</CompanyCode> <StartDate>2012.01.27</StartDate> <StartTime>18:45</StartTime> <StartDayOfWeek>Friday</StartDayOfWeek> <FlightNumber>8156 (AB8156)</FlightNumber> <StartAirportCode>TXL</StartAirportCode> <StartAirportName>Тегэль (Берлин)</StartAirportName> <StartCountry>Германия</StartCountry> <StartCountryCode>DE</StartCountryCode> <EndAirportCode>ORY</EndAirportCode> <EndAirportName>Париж, Орли</EndAirportName> <EndCountry>Франция</EndCountry> <EndCountryCode>FR</EndCountryCode> <Time>1:45</Time> -<Equip> <Name>Эрбас 320</Name> <Type>320</Type> </Equip> <ClassType>economy</ClassType> <ClassTypeCode>Q</ClassTypeCode> <Meal>S</Meal> </Info> </OrderInfo> <php?go=payment/PNR>bill&booking_id=263330&sig=a439a4492131f4b866ed1a17d018d3a6</pre>
== FastSearch - — передача параметров в форму ==
В системе Nemo {{NameSystem}} имеется возможность перенаправлять пользователей на страницу с уже заполненными параметрами поиска или сразу напрямую на результаты поиска.
Эта технология может использоваться, к примеру, для формирования ссылок с баннеров, при клике на которые [[пользователь]] попадает на форму, в которой уже могут быть заполнены пункты назначения, даты, количество пассажиров и прочие параметры.
Также при указании всех необходимых параметров пользователя можно перебрасывать сразу на процесс поиска авиабилетов с указанными критериями.
Для использования заполнения формы из URL следует включить опцию: '''Администрирование → Настройки агентства → '''{{Setting|Включить FastSearch (передачу параметров поиска)}} в разделе '''Управление сайтом → Домены и протоколы'''.
После этого можно использовать ссылки на форму поиска вида:
<pre>http://DOMAIN/?trip_type=OW&out_iata=MOW&in_iata=BER&departure_date=21.10.2009&adults=1&children=0&input_vendors=SU,PS¶m_by_get=on</pre>
'''Имена полей''' - — такие же как имена инпутов на поисковой форме.
Если вы указываете все необходимые для поиска параметры, то для того чтобы отправить пользователя сразу на результаты поиска нужно указать непустой параметр fast_search. Например, &fast_search=true.
'''Сценарий успешной авторизации:'''# Если авторизация пользователя в системе пытается авторизоваться субагент агентстваСС прошла успешно, которое ещё не создано то идёт проверка, есть ли в базе данных пользователей {{NameSystem}} пользователь с таким ID.# Если такой пользователь существует в системебазе {{NameSystem}}, то данные о пользователе и агентстве обновляются, исходя из информации, содержащейся в регистрации ему будет отказано, тответе на авторизацию.Обновляется логин и пароль.к# Логин пользователя {{NameSystem}} может быть обновлен на актуальный. родительское агентство # Если в {{NameSystem}} отсутствуетпользователь с данным ID — то происходит добавление пользователя.
== Синхронизация данных о пользователях и компаниях ==
Назначение данного модуля — обеспечение взаимодействия между сторонней программой (например, «САМО-тур») и системой Nemo {{NameSystem}} в части синхронизации списка B2B-пользователей.
Модуль является компонентом, включаемым/отключаемым из административной части.
Все B2B-пользователи, загруженные через модуль взаимодействия со сторонней программой, будут иметь случайным образом сгенерированный криптостойкий пароль. Механизм авторизации работает следующим образом:
Регистрация неудачных попыток входа производится только в двух случаях:
*Компонент взаимодействия выключен.*Компонент взаимодействия включен и провалены обе попытки авторизации (внутренней и внешней).
Для сторонней авторизации пользователей в системе Nemo {{NameSystem}} сторонняя программа должна иметь веб-службу, основанную на WSDL определенного формата. Ссылка на веб-службу прописывается в настройках системы Nemo {{NameSystem}} на странице конфигурации интеграции с внешней системой.
Для импортированных пользователей в Nemo {{NameSystem}} имеется поле '''«Идентификатор внешней системы»''', который отвечает за сопоставление с ID пользователя в сторонней системе. Для менеджеров агентств оно равно номеру партнера (агента) во внешней системе, для пользователей — номеру пользователя в «САМО-туре».
Для пользователей, имеющих какое-либо значение в поле '''«Идентификатор во внешней системе»''', запрещен функционал смены пароля или его восстановления по электронной почте.
<pre><?xml version="1.0" encoding="utf-8"?>
Сервис реализует функцию «getAuthorization», на вход которой передается конструкция «getAuthorizationRequest»:
*login (строка) - — введенный пользователем логин*pass (строка) - — введенный пользователем пароль
Функция должна отдавать системе конструкцию getAuthorizationResponse:
*session_id (строка) - — пустое значение*user_id (строка) - — идентификатор менеджера в системе «САМО-тур»*login (строка) - — логин пользователя (для контроля)*status (строка) - — может иметь значения:** oadm - — администратор** omgr - — менеджер** ousr - — пользователь (возвращается всегда это значение)
Со стороны внешней системы должно быть приложение, отправляющее в формате XML данные по учетным записям B2B-клиентов (агентств и пользователей). Со стороны Nemo {{NameSystem}} имеется скрипт, который принимает XML в формате, приведенном в описании документов, передаваемых в Nemo {{NameSystem}} с ключом авторизации, определенным в Nemo {{NameSystem}} в административной части модуля.
Передаваемые элементы с описанием учетных записей и партнеров имеют аккаунт (Account ID) во внешней системе и атрибут action, который может быть в состоянии update или delete, т.е. обновления/добавления и удаления соответственно.
В административной части модуля в Nemo {{NameSystem}} задается ключ авторизации для защиты от несанкционированного доступа. Значение не должно быть пустым.
Скрипт получает данные об обновлении, добавлении (проходят как одно и то же действие) или удалении информации по аккаунту. XML-данные могут содержать несколько элементов, например:
<item id=9 partnerId=30 action="delete" />
</accounts>
<partners> - — список изменений по партнерам
<item id=140 action="update">
<name>Название агентства</name>
При импорте информации об '''Агентствах''' будут возвращаться следующие значения:
<pre><item id=[идентификатор] action="delete" /></pre>
В административной части Nemo {{NameSystem}} надо создать отдельную страницу, на которой можно сопоставить имеющиеся группы в Nemo {{NameSystem}} номерам групп в САМО-тур (поле group в XML). Выводится список существующих групп для текущего (корневого) агентства.
== См. также ==
* [[Пользователь]]<br>* [[Авторизованный пользователь]]<br>* [[Авторизация пользователей из внешних систем]]* [[Пароль]]<br>* [[Агентство]]<br>* [[Веб-сайт]]<br>* [[ПНРPassenger Name Record (PNR)]]<br>* [[Бронирование]]<br>* [[Войдирование]] [[Category:Функции]]<br/>[[Category:Интеграция]]