hash_hmac('sha256', BOT_TOKEN, 'WebAppData', true);
// $input — то, что приходит от телеги строкой
parse_str($input, $initData);
$data = [];
foreach ($initData as $name => $item) {
if ($name === 'hash') continue;
$data[] = $name . '=' . $item;
}
sort($data);
$hashKey = hash_hmac('sha256', BOT_TOKEN, 'WebAppData', true);
$hash = hash_hmac('sha256', implode("\n", $data), $hashKey);
echo $hash !== $initData['hash'] ? 'BAD' : 'OK';
<head>
или в самое начало <body>
, чтобы он выполнился при парсинге этого места браузером; и не ссылкой, а напрямуюlet close = same.querySelector('.close__popup')
if (e.target == same){
script
, его содержимое не выполняется, универсальным способом будет пройтись по добавленному куску разметки, найти все такие элементы и потом пересоздать их заменив новыми оригиналы:element.innerHTML = /* разметка */
for (const sourceElement of element.querySelectorAll('script')) {
const resultElement = document.createElement('script');
resultElement.textContent = sourceElement.textContent;
for (const attribute of sourceElement.getAttributeNames()) {
resultElement.setAttribute(attribute, sourceElement.getAttribute(attribute));
}
sourceElement.replaceWith(resultElement);
}