Добрый день,
Подскажите, пожалуйста, как проверить, что google recaptcha v3 правильно отрабатывает.
Форма уходит, всё ок, но у меня пустые массивы в init.php, если я пытаюсь посмотреть $result или $_POST.
Прикладываю код.
component_epilog.php
template.php (сокращен)
init.php (у формы № 9)
Вывод самой формы:
Подскажите, пожалуйста, как проверить, что google recaptcha v3 правильно отрабатывает.
Форма уходит, всё ок, но у меня пустые массивы в init.php, если я пытаюсь посмотреть $result или $_POST.
Прикладываю код.
component_epilog.php
| Код |
|---|
<sc ript src="https://www.google.com/recaptcha/api.js?render=ключ&onload=onloadCallback" async defer></sc ript>
<sc ript>
function onloadCallback() {
grecaptcha.ready(function () {
grecaptcha.execute('ключ', { action: 'homepage' }).then(function (token) {
var recaptchaResponse = document.getElementById('recaptchaResponse');
recaptchaResponse.value = token;
});
});
}
</sc ript> |
template.php (сокращен)
| Код |
|---|
<?
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
?>
<?if ($arResult["isFormNote"] == "Y"):?>
<div class="success-banner-form">
</div>
<?endif;?>
<?if ($arResult["isFormNote"] != "Y"):?>
<?=$arResult["FORM_HEADER"]?>
<input type="hidden" name="g-recaptcha-response" id="recaptchaResponse">
<div class="catalog-form__wrapper">
<?= $arResult["QUESTIONS"]["phone"]["HTML_CODE"] ?>
<div class="catalog-form__btn">
<input class="btn-autopark" type="submit" name="web_form_submit"
value="<?=htmlspecialcharsbx(strlen(trim($arResult["arForm"]["BUTTON"])) <= 0 ? GetMessage("FORM_ADD") : $arResult["arForm"]["BUTTON"]);?>" />
</div>
<div class="catalog-form__errors">
<? if ($arResult["isFormErrors"] == "Y"): ?>
<?=$arResult["FORM_ERRORS_TEXT"]; ?>
<? endif; ?>
</div>
</div>
</div>
<?=$arResult["FORM_FOOTER"] ?>
<? endif; ?>
|
| Код |
|---|
function my_onBeforeResultAdd($WEB_FORM_ID, &$arFields, &$arrVALUES)
{
global $APPLICATION;
global $USER;
$response = '';
if ($_POST['g-recaptcha-response']) {
$response = htmlspecialcharsbx(substr($_POST['g-recaptcha-response'], 0, 3000));
}
if ($WEB_FORM_ID == 9) {
if (isset($_POST['g-recaptcha-response'])) {
$httpClient = new \Bitrix\Main\Web\HttpClient;
$result = $httpClient->post(
'https://www.google.com/recaptcha/api/siteverify',
array(
'secret' => 'ключ',
'response' => $_POST['g-recaptcha-response'],
'remoteip' => $_SERVER['HTTP_X_REAL_IP']
)
);
$result = json_decode($result, true);
if ($result['success'] !== true || $result['score'] < 0.5) {
$APPLICATION->throwException("Произошла ошибка, попробуйте перезагрузить страницу!");
return false;
}
} else {
$APPLICATION->ThrowException('Произошла ошибка, попробуйте перезагрузить страницу!');
return false;
}
}
}
AddEventHandler('form', 'onBeforeResultAdd', 'my_onBeforeResultAdd'); |
Вывод самой формы:
| Код |
|---|
$APPLICATION->IncludeComponent( "bitrix:form.result.new", "autopark_form", array( "CACHE_TIME" => "3600", "CACHE_TYPE" => "N", "CHAIN_ITEM_LINK" => "", "CHAIN_ITEM_TEXT" => "", "COLOR_TEMPLATE" => "orange", "EDIT_URL" => "", "IGNORE_CUSTOM_TEMPLATE" => "N", "LIST_URL" => "", "SEF_MODE" => "N", "SUCCESS_URL" => "", "USE_EXTENDED_ERRORS" => "Y", "WEB_FORM_ID" => "9", "AJAX_MODE" => "Y", "AJAX_OPTION_SHADOW" => "N", "AJAX_OPTION_JUMP" => "N", "AJAX_OPTION_STYLE" => "Y", "AJAX_OPTION_HISTORY" => "N", "COMPONENT_TEMPLATE" => "autopark_form", "VARIABLE_ALIASES" => array( "WEB_FORM_ID" => "WEB_FORM_ID", "RESULT_ID" => "RESULT_ID", ) ), false ); |