| битрикс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> |