Доброго времени суток. Расширил схему правил антибота
// my_changes/schemas/security/antibot_rules.post.php
<?php
$schema['gift_certificates']['confirm'] = [
'request_method' => 'POST',
'verification_scenario' => 'confirm',
'save_post_data' => [
'gift_cert_data',
],
'rewrite_controller_status' => [
CONTROLLER_STATUS_DENIED,
],
];
return $schema;
Инициализировал хук и создал функцию.
// my_changes/init.php
<?php
if (!defined('BOOTSTRAP')) {
die('Access denied');
}
fn_register_hooks(
'settings_variants_image_verification_use_for'
);
// my_changes/func.php
function fn_my_changes_settings_variants_image_verification_use_for(&$objects)
{
$objects['confirm'] = __('gift_certificate');
}
Включил настройку для данной страницы и добавил в шаблон image_verification.tpl
// views/gift_certificates/view.tpl
{capture name="gift_certificate"}
{include file="common/image_verification.tpl" option="confirm" align="left" sidebox=true}
<button id="gift_cert_confirm">test</button>
<div id="gift_cert_envelope">
{include file="addons/gift_certificates/components/envelope.tpl" gift_cert_data=$gift_cert_data}
<!--gift_cert_envelope--></div>
<script>
(function(_, $) {
document.addEventListener("DOMContentLoaded", function() {
$("#gift_cert_confirm").on('click', function(event) {
let token = "{$token}";
// var recaptchaToken = $("input#recaptcha-token").val();
console.log([
token,
recaptchaToken
]);
$.ceAjax('request', '{fn_url('gift_certificates.confirm')}', {
data: {
token: token,
// "g-recaptcha-response": recaptchaToken
},
result_ids: 'gift_cert_envelope',
method: 'post'
});
});
});
}(Tygh, Tygh.$));
</script>
{/capture}
{$smarty.capture.gift_certificate nofilter}
{capture name="mainbox_title"}{__("gift_certificate")}{/capture}
<?php
use Tygh\Registry;
if (!defined('BOOTSTRAP')) {
die ('Access denied');
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
fn_trusted_vars('gift_cert_data');
if ($mode == 'confirm') {
$token = $_REQUEST['token'];
$gift_cert_data = fn_my_changes_get_gift_certificate_info_by_token($token);
fn_print_die($_REQUEST);
if (defined('AJAX_REQUEST')) {
Tygh::$app['view']->assign('gift_cert_data', $gift_cert_data);
Tygh::$app['view']->display('addons/my_changes/views/gift_certificates/view.tpl');
}
}
}
Но при выполнении confirm запроса выдает ошибку “К сожалению, не удалось пройти антибот проверку. Попробуйте ещё раз.”
Как я понял в запросе должна присутствовать переменная “g-recaptcha-response” с токеном из iframe’a для валидации и сохранения результата валидации в сессии, но она отсутствует. Пожалуйста, подскажите в чем проблема?