Google reCAPTCHA

Google reCAPTCHA полезная вещь на сайте. Реально спасает от спама)

В Joomla есть плагин reCAPTCHA. Также reCAPTCHA можно использовать в ChronoForms. В этих случаях достаточно будет ввести в нужные поля ключи для сайта и секретный ключ.

Но давайте посмотрим как можно самому добавить Google reCAPTCHA на сайт.

Добавим сначала reCAPTCHA в нужную нам форму.

Добавляем скрипт:

<script src="https://www.google.com/recaptcha/api.js" async defer></script>

Добавляем тэг в форму:

<div class="g-recaptcha" data-sitekey="sitekey"></div>

Для атрибута data-sitekey задаем ключ для сайта, его копируем из админ консоли гугла.

Теперь добавим код для серверной части.

В общем случае этот код будет вышлядеть так:

if($_SERVER["REQUEST_METHOD"] == "POST")
{
  $recaptcha = $_POST['g-recaptcha-response'];
    if(!empty($recaptcha))
    {
 
        $google_url = "https://www.google.com/recaptcha/api/siteverify";
        $secret = 'Секретный ключ для серверной стороны';
        $ip = $_SERVER['REMOTE_ADDR'];
        $url = $google_url."?secret=".$secret."&response=".$recaptcha."&remoteip=".$ip;
        $res = SiteVerify($url);
        $res = json_decode($res, true);
 
    
        if($res['success'])
        {
            // Проверка каптчи пройдена успешно, продолжаем дальше выполнение проверки формы и т.д.
        }
        else
        {
          // Проверка не пройдена
        }
 
    }
    else
    {
          // Проверка не пройдена
    }
 
}

Можно использовать API Joomla. 

$jinput = JFactory::getApplication()->input;
$recaptcha = $jinput->get('g-recaptcha-response', '', 'string');

Добавляем в PHP скрипт функцию SiteVerify()

function SiteVerify($url)
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_TIMEOUT, 15);
    curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36");
    $curlData = curl_exec($curl);
    curl_close($curl);
    return $curlData;
}