Обновление решения, приглашаем на бета-тестирование версии 0.2.0. Динамическое замена капчи битрикс в js-скриптах(работает в комментариях и заказе). Автообновление при изменениях на странице, фиксы обхода через стандартную капчу битрикс. Замена текста описаний полей и ошибок капчи. Теперь не требуется поддержки "curl" или "file_get_contents", запросы идут через API Битрикс.
Внимание модуль работает только с версией reCaptcha 2Капча (каптча, CAPTCHA) — система защиты от ботов, которая отделяет хороших пользователей от спамеров. Корпорация Google представила новую систему защиты от спамеров и ботов, которая отличается от того, что мы видели до сих пор - reCaptcha 2.0. Система анализирует, человек поставил отметку или робот, если проверка не пройдена, то предлагается визуальный отбор картинок, прослушивание аудио или классическую капчу
Требования к серверу:
openssl;
extension=php_openssl.dll для windows |
запросы идут через "
curl" или "
file_get_contents"(если нет curl), параметры необходимые при этом в php.ini;
allow_url_include = On
allow_url_fopen = On |
Данный модуль заменяет стандартную капчу Битрикс, для инициализацию необходимо или использовать стандартный вызов капчи или инициализировать вручную. Проверка так же осуществляется через стандартную функцию Битрикс
<input type="hidden" name="captcha_sid" value="<?=$arResult["capCode"]?>">
<img src="/bitrix/tools/captcha.php?captcha_sid=<?=$arResult["capCode"]?>" width="140" height="30" alt="CAPTCHA">
<input type="text" name="captcha_word" size="30" maxlength="50" value="" > |
Для работы капчи, необходимо установить модуль и перейти в настройки модуля, в настройках, для каждого сайта, указать:
1) ключ;
2) секретный ключ;
3) тема;
4) активность.
Для получения ключей необходимо перейти
www.google.com/recaptcha, зарегистрироваться, и добавить Ваш сайт(домен).
для обновления рекапчи после
ajax или после
открытия popup-окон, необходимо вызвать функцию
так же доступны все виджеты на страницы, массив
id виджетовДля
обновления рекапчи в
Композитном режиме, необходимо вызвать обновление, пример
<sc ript type="text/javascript">
if (window.frameCacheVars !== undefined)
{
BX.addCustomEvent("onFrameDataReceived" , function(json) {
Recaptchafree.reset();
});
}
</sc ript> |
Маска исключения(в конце списка не должно быть ";"), будет отключена замена на установленных страницах, так же для данных страниц возможна ручная установка рекапчи, для этого нужно скрыть стандартные поля капчи Битрикс и поле name="captcha_word" указать value="*****" - произвольный набор из 5 символов и установить <div class="g-recaptcha" data-sitekey="****"></div>, где **** - Ваш ключ.
Доступна проверка стандартной капчи, через api, если в запросе нет вызова рекапчи.
$APPLICATION->CaptchaCheckCode($captcha_word, $captcha_sid)
Для браузеров
Opera Mobile, Android Native Broweser ниже 4.0 будет показана стандартная капча
Invisible reCaptcha и настройка:
Доступна I
nvisible reCaptcha. Для ее работы необходимо в настройках указать параметр "Размер"="Невидимый". При этом можно указать положение логотипа reCaptcha на странице.
Внимание, для работы в режиме "Invisible", необходимо обновить ключи.
При режиме Invisible reCaptcha, на событие формы "submit" будет вызывать проверку и возвращать callback функцию, которая будет отправлять веб-форму методом submit. Поэтому, если у Вас есть проверки на submit() или отправка форм ajax, необходимо переопределить функцию "RecaptchafreeSubmitForm". Обратите внимание, что функция будет вызываться для всех форм, где стоит рекапча, а в функцию передается только ссылка на форму текущую.
ссылка на веб-форму, которая прошла проверку ReCaptcha
Recaptchafree.form_submit |
шаблон костомизации:
var _RecaptchafreeSubmitForm = RecaptchafreeSubmitForm;
RecaptchafreeSubmitForm = function(token){
if(Recaptchafree.form_submit !== undefined){
// если ссылка есть на форму
//token - ключ ответа, который необходимо передать для текущей формы, имя переменной g-recaptcha-response
далее действия: отправка ajax или/и вызов события
$(Recaptchafree.form_submit).trigger("submit_ajax"); // пример вызова костомного события для проверки и отправки веб-формы ajax
}
}; |
Пример:
var _RecaptchafreeSubmitForm = RecaptchafreeSubmitForm;
RecaptchafreeSubmitForm = function(token){
if(Recaptchafree.form_submit !== undefined){ // если ссылка существует на форму
var x = document.createElement("INPUT"); // создаем поле hidden
x.setAttribute("type", "hidden");
x.name = "g-recaptcha-response"; // имя поля g-recaptcha-response
x.value = token; // значение token
Recaptchafree.form_submit.appendChild(x); // добавляем в текущую форму
var elements = Recaptchafree.form_submit.elements; // список элементов формы
for (var i = 0; i < elements.length; i++) { // получаем submit и берем ее имя и значение, чтобы передать,
//к примеру веб-формы Битрикс требуют обязательно при передачи ajax значения submit
if(elements[i].getAttribute("type") === "submit") {
var submit_hidden = document.createElement("INPUT"); // create submit input hidden
submit_hidden.setAttribute("type", "hidden");
submit_hidden.name = elements[i].name;
submit_hidden.value = elements[i].value;
Recaptchafree.form_submit.appendChild(submit_hidden); // append current form
}
}
$(Recaptchafree.form_submit).trigger("submit_ajax"); // вызов события для веб-формы
}
};
// по событию отправка формы
$(document).on("submit_ajax", "#feedback", function(){
$.ajax({
type: $(this).attr("method"),
url: $(this).attr("action"),
data: $(this).serialize() + "&ajax=y",
cache: false,
dataType: "html",
success: function(data){
//data - ответ
},
error: function(msg){
alert( "Ошибка отправки, попробуйте позже" );
},
complete:function(){
Recaptchafree.reset(); // сброс рекапчи, для повторного ввода
}
});
return false;
}); |
Модуль бесплатный, техническая поддержка не оказывается. Для настройки внимательно прочитайте инструкцию.