hCaptcha, Google Recaptcha'ya alternatif olarak kullanabileceğimiz servislerden birisi. hCaptcha sayesinde formlarımıza gelen spam mesajları en aza indirebiliriz.

 

Öncelikle hCaptcha kullanabilmemiz için hCaptcha üyeliğimizin olması gerekiyor. Bu adresten kayıt olabilirsiniz: https://www.hcaptcha.com/signup-interstitial adrese tıkladığınızda karşınıza birden fazla çeşit üyeliğin ve işlemlerin olduğunu göreceksiniz. Ben bu yazımda formlardan gelen botları engellemeyi anlatacağım için ücretsiz olan yöntem “Add hCaptcha to your service (free)”  bağlantısına tıklayacağım. 

 

 

Kayıt olduktan sonra bizi karşılayan dashboard ekranından sağ üst bölümdeki Yeni Site butonuna tıklıyoruz.

 

Aşağıdaki alanları doldurduktan sonra sağ üstteki kayıt ol butonuna tıklıyoruz.

 

Daha sonra dashboard ekranında siteler sekmesinde eklemiş olduğumuz captcha görünecektir.

 

Burada oluşturmuş olduğumuz captchayı kullanabilmek için Ayarlar butonuna tıklamamız gerekiyor. Tıkladıktan sonra karşımıza gelen ekrandaki key bizim site keyimiz. (bu key formun içinde kullanılacak olan key.)

 

Bir de formu gönderdiğimiz bölümde kullanacağımız secret keye ihtiyacımız olacak. Bu keyi elde etmek için menüdeki ayarlar butonuna tıklıyoruz.

 

Burada yazan keyi backend tarafında formu gönderirken kullanacağız.

 

 

Artık captchamızı projemizde kullanabiliriz. Öncelikle mevcut projemizin içerisinde kullandğımız script dosyaların altına hcaptcha'yı dahil edelim.

// contact.blade.php (blade dosyamız scriptleri çektiğimiz bölüm) 

<script src='https://www.hCaptcha.com/1/api.js' async defer></script>

 

Ben robot değilim butonunu formun içine hangi alana dahil etmek istiyorsak o bölüme gerekli kod satırlarını ekliyoruz. (data-sitekey bölümüne kendi keyinizi yazın.)

<div class="h-captcha" data-sitekey="c46200ef-eac4-44db-b051-2c513064b628"></div> 

 

View kısmı için yapmamız gereken kısımlar bu kadar. Şimdi bunu controller tarafında kontrol etme işlemi kaldı. Formumuzu gönderdiğimiz controller methodu içerisinde bu işlemi yapalım.

 

// HomeController.php


// Curl isteğinin atıldığı fonksiyon

function url_get_contents ($url) {
    if (!function_exists('curl_init')){
        die('CURL is not installed!');
    }
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $output = curl_exec($ch);
    curl_close($ch);
    return $output;
}


// Formun gönderildiği method

public function mesajGonder(Request $request)
    {
        $request->validate([
            'name' => 'required|max:191',
            'phone' => 'required|max:15',
            'message' => 'required|max:1200'
        ]);
        
        // Elde ettiğimiz secret key
        $secret = '0x510913af6BCB250086C456B84c8fd8Ed99F57C6f';
        $verifyResponse = $this->url_get_contents('https://hcaptcha.com/siteverify?   secret='.$secret.'&response='.$_POST['h-captcha-response'].'&remoteip='.$_SERVER['REMOTE_ADDR']);
        $responseData = json_decode($verifyResponse);
        if($responseData->success)
        {
            // FORM GÖNDERME İŞLEMİ
            return redirect()->back()
                ->with('success', 'Form gönderme işlemi başarılı!');
        }else{
            return redirect()->back()
                ->with('error', 'Lütfen insan olduğunuzu doğrulayın.')
                ->withInput();
        }

    }

 

Form hCaptcha kullanımı işte bu kadar basit. Ben burada isteği CURL ile farklı bir methodda yaptım, siz daha farklı bir şekilde yapabilirsiniz. Sizin farklı kullandığınız yöntemler varsa lütfen yorumda belirtin. 

 

Herkese iyi kodlamalar! 🤠