битрикс24 коробка Задача: сделать воронку мероприятий с QR-кодом для входа |
- https://helpdesk.bitrix24.ru/open/16314660/
- https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=57&LESSON_ID=12605
2 воронки
- мероприятие с данными по мероприятию
- заявки на посещение
- для ранней регистрации в скрытом (автозаполнение) поле указывается ID мероприятия и при создании заявки подтягиваются все данные по мероприятию в заявку (через БП).
- для регистрации на мероприятии (в туже воронку, но переходит сразу на нужную стадию)
Ниже формирование qr-кодов, ссылок
|
функция для БП
//генерация QR кода для прохождения на мероприятия /page/meropriyatie/registratsiya_na_meropriyatie/ //запускается из БП /crm/configs/bp/CRM_DYNAMIC_173/edit/341/ function generateQRcodeForEvents($id){ require_once($_SERVER['DOCUMENT_ROOT'] .'/eventcode/phpqrcode/qrlib.php'); if(CModule::IncludeModule('crm')){ $smartTypeId = 173; //регистрация на мероприятие $factory = \Bitrix\Crm\Service\Container::getInstance()->getFactory($smartTypeId); $item = $factory->getItem($id); if(!empty($item)){ $link = "https://nikaverro.ru/eventcode/?id=".$id."&c=".hash_hmac('sha256', $id, '_SECRET_KEY_'); //ссылка, которую зашиваем в QR код $fileName = '173_'.$id.'.png'; //имя файла $pngAbsoluteFilePath = $_SERVER["DOCUMENT_ROOT"]."/upload/qr_event/".$fileName; //путь на сервере if (!file_exists($pngAbsoluteFilePath)) { QRcode::png($link, $pngAbsoluteFilePath,QR_ECLEVEL_L, 7); } $fields = [ 'UF_CRM_8_1724504387273' => CFile::MakeFileArray($pngAbsoluteFilePath), //поле типа файл c QR кодом ]; $item->setFromCompatibleData($fields); $item->set("UF_CRM_8_1724504373103", $link); //ссылка, которую зашиваем в QR код $operation = $factory->getUpdateOperation($item); $operation->disableAllChecks(); $result = $operation->launch(); $fileId = $item->getUfCrm_8_1724504387273(); if(!empty($fileId)){ $code = substr(hash_hmac('sha256', $fileId, '_SECRET_KEY_'),0,8); $item->set("UF_CRM_8_1725458779", "https://nikaverro.ru/eventcode/qr/?id=".$fileId."&c=".$code); //ссылка на QR код для мобильных $operation = $factory->getUpdateOperation($item); $operation->disableAllChecks(); $result = $operation->launch(); } } } } |
страница для мобильных с QR кодом (ссылку отправляем через смс)
/eventcode/qr/index.php
<? require_once($_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/include/prolog_before.php"); ?> <!DOCTYPE html> <html lang="ru"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Билет для входа</title> <link rel="stylesheet" href="style.css"> </head> <body> <div id='qr'> <img src="/eventcode/logo.png" alt='logo'> <br> <?if( !empty($_GET['id']) && !empty($_GET['c']) && ($_GET['c']==substr(hash_hmac('sha256', $_GET['id'], '_SECRET_KEY_'),0,8)) ): $arFile = CFile::GetFileArray($_GET['id']); if(!empty($arFile["SRC"]) && (strpos($arFile["SRC"],"/upload/qr_event/")!==false)):?> <img src="<?=$arFile["SRC"]?>" alt='qr'> <?endif; else:?> <h1>Неправильная ссылка</h1> <?endif;?> </div> </body> </html> |
страница, на которую ведет QR код
/eventcode/index.php
<?require_once($_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/include/prolog_before.php");?> <!DOCTYPE html> <html lang="ru"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Билет для входа</title> <link rel="stylesheet" href="styles/style.css"> </head> <body> <?global $USER; if(!$USER->IsAuthorized()):?> <h1>Покажите билет сотруднику</h1> <br><br> <a href='https://nikaverro.ru/'>Авторизация</a> <?else: $arGroups = $USER->GetUserGroupArray(); if($USER->IsAdmin() || in_array(23,$arGroups)): if(!empty($_GET['id'])&& !empty($_GET['c']) && ($_GET['c']==hash_hmac('sha256', $_GET['id'], 'hellonika'))): $id = $_GET['id']; if(CModule::IncludeModule("crm")): $smartTypeId = 173; //регистрация на мероприятие $arResult = []; $factory = \Bitrix\Crm\Service\Container::getInstance()->getFactory($smartTypeId); $item = $factory->getItem($id); $dateEvent = new DateTime($item->getUfCrm_8_1695216356047()); $stageId = $item->getStageId(); if(in_array($stageId,["DT173_11:UC_DX6KLM","DT173_11:SUCCESS","DT173_11:FAIL"])):?> <h1>Такая регистрация уже существует, зарегистрируйтесь еще раз</h1> <?else: $today = new DateTime("+6 hours"); //время амурской области if($dateEvent->modify("-2 hours") > $dateEvent): $item->setStageId("DT173_11:UC_DX6KLM"); $item->save();?> <h1>Регистрация <?=$id?> успешно пройдена </h1> <?else:?> <h1>Пройти на мероприятие можно за 2 часа</h1> <div>Провести билет можно с: <b><?=$dateEvent->format("d.m.Y H:i:s")?></b></div> <div>сейчас: <?=$today->format("d.m.Y H:i:s")?></div> <?endif;?> <?endif;?> <?else:?> <h1>Билет <?=$id?>. У сотрудника нет прав.</h1> <?endif;?> <?else:?> <h1>Недействительный билет</h1> <?endif;?> <?else:?> <h1>Привет, <?=$USER->GetFirstName()?>!</h1> <div>Не хватает прав доступа для работы с билетами. Обратитесь к администратору портала</div> <?endif;?> <?endif;?> </body> </html> |