Ticketland iframe


Что такое Iframe

Iframe - специальная выделенная область на странице вашего сайта, в которой отображается часть сайта ticketland.ru. Благодаря этому пользователи могут выбрать и оплатить билет в нашей системе, оставаясь на вашем сайте. Также можно использовать отдельные страницы (например, схема зала и корзина) в случае интеграции в ваш сайт.

Ticketland предоставляет скрипт, автоматически отображающий iframe, настроенный на заданную страницу сайта www.ticketland.ru. Навигация и покупка билетов будет происходить в рамках iframe без взаимодействия со страницей, в которой он встроен.


Регистрация Iframe

В backstage.ticketland.ru вы получите доступ к странице http://backstage.ticketland.ru/frame#/ (на начальной странице кнопка «Настроить продажу билетов на сайте театра»)

Домен указывается согласно используемому протоколу ( http/https ), на главную страницу, например https://site.ru

На той же странице генерируется скрипт для вставки на страницу вашего сайта. Пример такого скрипта:

<div id="tlFrameContainer"></div>
            <script type="text/javascript"></script>
            var TLConf = {
                accessHash: '1111112223334444555',
                start: '/teatry/building',
                containerId: 'tlFrameContainer',
                baseDomain: 'https://www.ticketland.ru'
            };
            var script = document.createElement('script');
            script.type = 'text/javascript';
            script.src = TLConf.baseDomain + '/site/getLiteFrameJS/';
            document.body.appendChild(script);
            </script>

Установка фрейма

Для установки фрейма нужно разместить код на вашем сайте. Можно изменить параметр start чтобы открывать в фрейме нужную страницу с сайта ticketland.ru.

Возможные места для установки фрейма:

:!:Важные моменты:


Расширенный Iframe

Навигация пользователя может начинаться не со страницы площадки, а сразу со страницы мероприятия. Это подходит тем организаторам, у которых на сайте уже есть афиша со списком мероприятий. Для этого необходимо подставлять параметр start в скрипте. Можно жестко привязать этот параметр в коде страниц или записать необходимый url в базе вашего сайта. Для полной автоматизации можно воспользоваться нашим API, по которому можно получить информацию о мероприятиях.

Адрес API: http://backstage.ticketland.ru/frame/api/shows

Пример данных API:

        {
            "hall_id": "2244567",
            "hall_name": "Зал",
            "performance_id": 9999,
            "performance_basis_id": 123456, // Если передан GET параметр ?extended=1
            "reveal_dt": "2001-01-01 00:00:00",
            "script": "<script> var TLConf = {
                accessHash: '1111112223334444555',
                start: '/teatry/building/show/20170303_1900-11112222/',
                containerId: 'tlFrameContainer',
                baseDomain: 'https://www.ticketland.ru'
            };
            var script = document.createElement('script');script.type = 'text/javascript';
            script.src = TLConf.baseDomain + '/site/getLiteFrameJS/';
            document.body.appendChild(script); 
        </script>",
            "show_full_url": "https://www.ticketland.ru/teatry/building/show/",
            "show_id": 111222,
            "show_name": "Название шоу",
            "start_date": "2017-03-03 19:00:00",
            "total_ticket_count": 20
        }

Пример PHP – кода для обращения к API – Ticketland:

     if (!ini_get('allow_url_fopen')) {
        error_log("set allow_url_fopen to true or change script to use curl" . PHP_EOL);
        die();
     }
     $url = 'https://backstage.ticketland.ru/login';
            $api = 'https://backstage.ticketland.ru/frame/api/shows';                                                                                                                                                                                       
            $params = array(                                                                                                                                                                                                                              
               'username' => '',  // указать логин                                                                                                                                                                                                                       
               'password' => '', // указать пароль                                                                                                                                                                                                                          
               'remember' => 'True',                                                                                                                                                                                                                     
            );                                                                                                                                                                                                                                            
            $result = file_get_contents($url, false, stream_context_create(array(                                                                                                                                                                         
               'http' => array(                                                                                                                                                                                                                          
                   'method'  => 'POST',                                                                                                                                                                                                                  
                   'header'  => 'Content-type: application/x-www-form-urlencoded',                                                                                                                                                                       
                   'content' => http_build_query($params)                                                                                                                                                                                                
               )                                                                                                                                                                                                                                         
            )));                                                                                                                                                                                                                                          
 
            $session;                                                                                                                                                                                                                                     
 
            foreach ($http_response_header as $string) {                                                                                                                                                                                                  
               if (preg_match('/^Set\-Cookie: .*?session=([^;]+)/', $string, $matches)) {                                                                                                                                                                
                   $session = $matches[1];                                                                                                                                                                                                               
                   break;                                                                                                                                                                                                                                
               }                                                                                                                                                                                                                                         
            }                                                                                                                                                                                                                                            
 
            $result = file_get_contents($api, false, stream_context_create(array(                                                                                                                                                                         
               'http' => array(                                                                                                                                                                                                                          
                   'method'  => 'GET',                                                                                                                                                                                                                   
                   'header'  => 'Cookie: session=' . $session,                                                                                                                                                                                           
               )                                                                                                                                                                                                                                         
            )));                                                                                                                                                                                                                                          
 
            print $result . PHP_EOL;

Расширенный Iframe (новая версия)

Теперь, используя каналы продаж, вы сможете получать заранее список мероприятий, которые еще не вышли в продажу, но дата выхода указана в системе для МДТЗК.

Ссылка для подключения к новому API: https://backstage.ticketland.ru/frame/api/shows?get_future_performances=1 Формат авторизации не изменился и остается актуальным, чтобы получать новые данные достаточно указать для существующих обращений к API параметр «?get_future_performances=1».

Отличия в следующем:

При подключении к новому API необходимо начать учитывать передаваемые в параметре reveal_dt дату и время. Параметр будет говорить, доступны ли сейчас продажи по конкретному мероприятию с установленным каналом продаж. То есть, если текущая дата и время больше указанных в reveal_dt, то продажи по мероприятию активны и клиенту можно давать страницу с виджетом.

Возможны 2 механики:

  1. Выводить на сайте мероприятия, чья дата продаж в будущем с неактивной кнопкой и информацией о старте продаж.
  2. Не выводить на сайте мероприятие, чья дата старта продаж еще не началась.

Ниже возможная схеме регулировки отображения кнопок:


Параметры TLConf

идентификатор счетчика, если на сайте используется несколько счетчиков google аналитики значение по умолчанию '' (пустая строка)

использовать для передачи данных функцию ga значение по умолчанию true

использовать для передачи данных функцию gtag значение по умолчанию false,

указать callback функцию в которую будет передан объект ecommerce по умолчанию function(ecommerce){ window.dataLayer = window.dataLayer || []; window.dataLayer.push(ecommerce); }

Данные для ecommerce

Для получения данных электронной торговли есть два способа

  1. подписаться на событие передаваемое из «фрейма» через механизм postMessage. Пример window.addEventListener('message', function(event){try{var json = JSON.parse(event.data)} catch(){}}, false); Документация https://developer.mozilla.org/ru/docs/Web/API/EventTarget/addEventListener
  2. в конфиге переопределить функцию.
    TLConf.ecommerceCallback = function(ecommerce){};

    ecommerce это объект с данными в формате расширенной электронной торговли https://developers.google.com/tag-manager/enhanced-ecommerce

Покупка

{
  "ecommerce":
    {
      "purchase":
        {
          "actionField":
            {"id":"52346890","revenue":"600"},
          "products":[
            {
              "id":"1353580",
              "name":"Юные таланты Бразилии, 2020-10-31 19:00:00",
              "brand":"Театр имени",
              "category":"Юные таланты Бразилии",
              "variant":"eticket",
              "quantity":1,
              "price":"600"
            }
          ]
        }
    }
}

Фрейм в Вконтакте

Для организации продаж в социальной сети вконтакте нужно
  1. Запросите у саппорта личный iframe-hash(1) для vk.com
  2. Перейдите на страницу создания приложения https://vk.com/editapp?act=create
    1. Введите название вашего приложения, например «Купить билет»
    2. Выберите платформу: Встраиваемое приложение
    3. Нажмите кнопку «Перейти к настройке приложения»
  3. Выполните Подтверждение действия через SMS
  4. В разделе 'Информация' поля 'Название', 'Описание', 'Краткое описание', 'Категория' заполнить на свое усмотрение. Иконку можете использовать свою, или нашу (если такая имеется)
  5. После этого смело нажимайте на кнопку 'Сохранить изменения' (не имеет значения под каким из блоков вы нажмете, сохранять все изменения во всех блоках)
  6. Далее переходим во вкладку настройки. Поле 'Состояние' выставить в 'Приложение включено и видно всем'
  7. Во всех блоках, где есть поле 'Url' вставить урл формата https://www.ticketland.ru/site/internalFrame/?iframe-internal=1&lite-layout=1&iframe-hash='iframe-hash(1)'в этом месте должен быть access hash фрейма, который вы запросили у саппорта&start-url=тут относительный урл на мероприятие на сайте тикетленда. Нажимаем 'Сохранить изменения'
  8. Переходим в сообщество, где вы являетесь администратором и нажимаем на кнопку 'Управление'
  9. Переходим во вкладку 'Приложения' и листаем в самый вниз, где видим наше приложение. Добавляем его и настраиваем так, как нам нужно. Не забываем нажать кнопку Сохранить.

После этого все готово и все работает