Это уже вторая статья о том,как подключить reCaptcha к CMS Bitrix. Но время идет, уже вышла новая версия reCaptcha, с новыми алгоритмами и непробиваемостью от спам ботов.
Итак, поехали, первым делом, мы добавляем сайт в личном кабинете https://www.google.com/recaptcha/admin#list , на котором у нас будет стоять защита. После регистрации система выдаст 2 ключа, ключ генерации каптчи и секретный ключ, для проверки "верно введен код или нет". После скачиваем PHP библиотеку на гитхабе. В библиотеке, из папки src копируем файлы autoload.php и папку ReCaptcha в папку php_interface предварительно создав папку include (для удобства). В файле init.php инклудим библиотеку и в нем же задаем константы: RE_SITE_KEY и RE_SEC_KEY полученные при регистрации проекта в системе.
В шаблоне сайта или компонента подключаем JS библиотеку:
Библиотека подключена, константы определены, можем использовать recaptcha в своих компонентах. Все подключается в 2 шага: Шаг 1 - в шаблоне компоненты, добавляем следующую конструкцию, где хотим вывести защитный код:
Шаг 2 - в компоненте добавляем проверку:
В 2 шага подключается проверка которая защитит ваш компонент от спам ботов.
Вылазиет вот это. Хелп!
Ошибка! Проверка не пройдена.missing-input-response
Можно в коде компонента, через print_r вывести $_REQUEST и посмотреть какие данные на входе. Или можешь выложить пример компоненты или часть кода — вместе разберемся.
На странице регистрации появилась ошибка Ошибка! Проверка не пройдена.missing-input-response
Сама форма регистрации не выводится
GetCurPageParam("register=yes", $arParamsToDelete);
}
$arResult["BACKURL"] = $APPLICATION->GetCurPageParam("", $arParamsToDelete);
$arResult["AUTH_AUTH_URL"] = $APPLICATION->GetCurPageParam("login=yes", $arParamsToDelete);
foreach ($arResult as $key => $value)
{
if (!is_array($value)) $arResult[$key] = htmlspecialcharsbx($value);
}
$arRequestParams = array(
"USER_NAME",
"USER_LAST_NAME",
"USER_LOGIN",
"USER_PASSWORD",
"USER_CONFIRM_PASSWORD",
);
foreach ($arRequestParams as $param)
{
$arResult[$param] = strlen($_REQUEST[$param]) > 0 ? $_REQUEST[$param] : "";
$arResult[$param] = htmlspecialcharsbx($arResult[$param]);
}
// ********************* User properties ***************************************************
$arResult["USER_PROPERTIES"] = array("SHOW" => "N");
$arUserFields = $USER_FIELD_MANAGER->GetUserFields("USER", 0, LANGUAGE_ID);
if (is_array($arUserFields) && count($arUserFields) > 0)
{
foreach ($arUserFields as $FIELD_NAME => $arUserField)
{
if ($arUserField["MANDATORY"] != "Y")
continue;
$arUserField["EDIT_FORM_LABEL"] = strLen($arUserField["EDIT_FORM_LABEL"]) > 0 ? $arUserField["EDIT_FORM_LABEL"] : $arUserField["FIELD_NAME"];
$arUserField["EDIT_FORM_LABEL"] = htmlspecialcharsEx($arUserField["EDIT_FORM_LABEL"]);
$arUserField["~EDIT_FORM_LABEL"] = $arUserField["EDIT_FORM_LABEL"];
$arResult["USER_PROPERTIES"]["DATA"][$FIELD_NAME] = $arUserField;
}
}
if (!empty($arResult["USER_PROPERTIES"]["DATA"]))
$arResult["USER_PROPERTIES"]["SHOW"] = "Y";
$arResult["bVarsFromForm"] = (is_array($arParams['AUTH_RESULT']) || strlen($arParams["AUTH_RESULT"]) 0 ? $_REQUEST["sf_EMAIL"] : $_REQUEST["USER_EMAIL"]);
$arResult["USE_CAPTCHA"] = COption::GetOptionString("main", "captcha_registration", "N") == "Y" ? "Y" : "N";
if ($arResult["USE_CAPTCHA"])
{
//$arResult["CAPTCHA_CODE"] = htmlspecialcharsbx($APPLICATION->CaptchaGetCode());
$recaptcha = new \ReCaptcha\ReCaptcha(RE_SEC_KEY);
$resp = $recaptcha->verify($_REQUEST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']);
if (!$resp->isSuccess()){
foreach ($resp->getErrorCodes() as $code) {
echo "Ошибка! Проверка не пройдена.";
echo $code;
return;
}
}
}
$arResult["USE_EMAIL_CONFIRMATION"] = COption::GetOptionString("main", "new_user_registration_email_confirmation", "N") == "Y" ? "Y" : "N";
$arResult["SECURE_AUTH"] = false;
if(!CMain::IshttpS() && COption::GetOptionString('main', 'use_encrypted_auth', 'N') == 'Y')
{
$sec = new CRsaSecurity();
if(($arKeys = $sec->LoadKeys()))
{
$sec->SetKeys($arKeys);
$sec->AddToForm('bform', array('USER_PASSWORD', 'USER_CONFIRM_PASSWORD'));
$arResult["SECURE_AUTH"] = true;
}
}
$this->IncludeComponentTemplate();
RE_SITE_KEY и RE_SEC_KEY определили свои?
Посмотрю,отпишусь.