Добрый день,
Подскажите, пожалуйста, как проверить, что 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; ?>
|
init.php (у формы № 9)
| Код |
|---|
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
);
|