reCAPTCHA один из самых лучших сервисов для защиты от ботов, по этому мы научимся как её включать, настраивать, использовать в своем компоненте и без компонента

Первое что нам нужно это настроить плагин reCAPTCHA в самой системе, для этого мы переходим в менеджер плагинов в административной части сайта:

Плагин reCAPTCHA в менеджере плагинов

Открываем плагин. В плагине нам нужно во первых включить его, а во вторых выбрать версию 2.0:

Первичная настройка плагина reCAPTCHA

Дальше для работы плагина нужно заполнить два обязательных поля: "Первичный ключ" и "Приватный ключ", ключи мы должны взять на сервисе google: https://www.google.com/recaptcha/intro/index.html

Если вы уже зарегистрированы в google то вам достаточно будет нажать на кнопку "Get reCAPTCHA", если ещё не зарегистрированы то вам нужно будет пройти эту процедуру, после чего вам откроется форма для регистрации сайта на котором будет работать reCAPTCHA:

Регистрация нового сайта в системе reCAPTCHA

Здесь мы вводим название нашего сайта и домен на котором будет использоваться reCAPTCHA, так как я работаю на локальном домене, то я указываю local.dev, и нажимаем на кнопку "Регистрация", и мы увидим новую страницу с разными данными, нам нужны вот эти два поля:

То что в поле ключ нам нужно внести в плагине "CAPTCHA - reCAPTCHA" в поле "Публичный ключ", то что в поле "Секретный ключ" нужно ввести в поле "Приватный ключ", в результате настройки нашего плагина будут выглядеть так:

Финальные настройки плагина

Сохраняем и закрываем плагин! Настройки его завершены, и теперь нам нужно проверить его работоспособность! Для этого мы 1. Идем в настройки менеджера пользователей; 2. Включаем опцию "Разрешить регистрацию пользователей"; 3. В поле "CAPTCHA" выбираем "CAPTCHA - reCAPTCHA":

Настройка регистрации пользователей

Далее мы переходим по адресу http://ваш-домен/index.php/component/users/?view=registration что бы посмотреть на нашу форму регистрации, если вы сделали все правильно то в форме у нас появится такое поле:

Форма регистрации пользователя с работающей рекакпчей

Если у вас появилось это поле, то поздравляю, вы все верно настроили, если не появилось, то значит на каком то шагу вы допустили ошибку, вам придется вернуться в начало и посмотреть что вы упустили!

На этом настройка капчи завершена, теперь мы рассмотрим как использовать капчу в своем компоненте используя механизм создания формы в Joomla, то есть JForm, и при условии что компонент у вас построен по MVC стандарту Joomla с использованием форм как описано в этом уроке

Здесь кажется все предельно просто, зайти в компонент com_users открыть файл: components/com_users/models/forms/registration.xml и скопировать поле c описание капчи:

<field
  name="captcha"
  type="captcha"
  label="COM_USERS_CAPTCHA_LABEL"
  description="COM_USERS_CAPTCHA_DESC"
  validate="captcha"
/>

Сохранить и вывести поле в шаблоне вида через: form->getInput( 'captcha' ); ?>! Но не тут то было ) Капча не отображается )

А все потому что надо добавить ещё один атрибут в field: plugin="recaptcha"! Как ни странно в официальной документации ничего об этом атрибуте не сказано, но я подозреваю что это скорее всего связано с тем что тип капчи можно изменить динамически, и скорее всего нужно где то в php скрипте формы задавать этот атрибут, но так как мы работаем именно с reCAPTCHA, по этому мы вручную добавляем этот атрибут:

<field
  name="captcha"
  type="captcha"
  label="Капча"
  description="Капча"
  validate="captcha"
  plugin="recaptcha"
/>

После того как появится наше поле в форме, нам нужно провести проверку его на то или пользователь прошел тест от google или он не бот. Для этого нам нужно переопределить метод validate в модели нашей формы, и сделать так:

public function validate( $form, $data, $group = null )
{
	$result = parent::validate( $form, $data, $group );
	$input = JFactory::getApplication()->input;
	if ( trim( $input->getString( 'g-recaptcha-response' ) ) === '' ) {
		$result = false;
		$this->setError( 'Вы не смогли доказать что вы не робот!' );
	}
	return $result;
}

После этого при попытке отправить форму не пройдя проверку вы получите такое сообщение:

А теперь рассмотрим случай когда мы не используем MVC и JForm и у нас простая форма! Для начала нам нужно вывести наше поле, что бы его вывести нужно написать такой код:

echo JCaptcha::getInstance( 'recaptcha' )->display( 'captcha', 'captcha', 'captcha' );

После этого вам нужно в скрипте который принимает вашу форму выполнить проверку или пользователь прошел тест, выполняется проверка точно так же как и в валидации модели:

$input = JFactory::getApplication()->input;
if ( trim( $input->getString( 'g-recaptcha-response' ) ) === '' ) {
	echo 'Ваше сообщение о том что пользователь не прошел капчу';
}