Google reCAPTCHA

16.03.2018 Programování #php

Ukázka implementace ověřování odesílání formulářů.


Google vydal nový modul reCAPTCHA. Použití reCAPTCHA má své výhody, Zejména pro uživatele se specifickými potřebami. Nyní lze jednoduše kliknout na ověřovací plochu bez nutnosti vyplňovat ověřovací kód. Zde je ukázka PHP skriptu pro aplikaci reCAPTCHA.

Integrační proces je velmi jednoduchý.

google-recaptcha-demo-by-codexworld

Získání reCAPTCHA API klíče:

Pro přidání pluginu do stránky, musí být zaregistrovaná vaše stránka a získán registrační klíč.
Registrace stránky se provede na url adrese – https://www.google.com/recaptcha/admin

google-recaptcha-register-new-site-by-codexworld

Registrační klíč se používá pro zobrazení pluginu reCAPTCHA.

google-recaptcha-site-key-by-codexworld

Druhý klíč je bezpečnostní. Ten se používá pro ověření vůči serveru.

google-recaptcha-secret-key-by-codexworld

HTML kód:

V první řadě se musí vložit knihovna reCAPTCHA API.

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

Před odesílací tlačítko se musí vložit Google reCAPTCHA. Změňte atribut data-sitekey, který obsahuje registrační klíč (Site key).

<form action="" method="POST">
    <input type="text" name="name" value="" />
    <input type="text" name="email" value="" />
    <textarea type="text" name="message"></textarea>
    <div class="g-recaptcha" data-sitekey="9LDDpf0eVtMZY6kdJnGhsYYY-5ksd-W"></div>
    <input type="submit" name="submit" value="SUBMIT">
</form>

PHP kód:

v PHP kódu se musí změnit bezpečnostní klíč - Google Secret Key.

<?php
if(isset($_POST['submit']) && !empty($_POST['submit'])):
    if(isset($_POST['g-recaptcha-response']) && !empty($_POST['g-recaptcha-response'])):
        //your site secret key
        $secret = '9LuDh9kyetYYYYdT0jsVckScsH8Ks3KA';
        //get verify response data
        $verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$_POST['g-recaptcha-response']);
        $responseData = json_decode($verifyResponse);
        if($responseData->success):
            //contact form submission code
            $name = !empty($_POST['name'])?$_POST['name']:'';
            $email = !empty($_POST['email'])?$_POST['email']:'';
            $message = !empty($_POST['message'])?$_POST['message']:'';
            
            $to = 'contact@codexworld.com';
            $subject = 'New contact form have been submitted';
            $htmlContent = "
                <h1>Contact request details</h1>
                <p><b>Name: </b>".$name."</p>
                <p><b>Email: </b>".$email."</p>
                <p><b>Message: </b>".$message."</p>
            ";
            // Always set content-type when sending HTML email
            $headers = "MIME-Version: 1.0" . "\r\n";
            $headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
            // More headers
            $headers .= 'From:'.$name.' <'.$email.'>' . "\r\n";
            //send email
            @mail($to,$subject,$htmlContent,$headers);
            
            $succMsg = 'Your contact request have submitted successfully.';
        else:
            $errMsg = 'Robot verification failed, please try again.';
        endif;
    else:
        $errMsg = 'Please click on the reCAPTCHA box.';
    endif;
else:
    $errMsg = '';
    $succMsg = '';
endif;
?>