How to Setup Google Recaptcha v2 on Advanced Contact Form

Home Forums Porto – Responsive HTML5 Template FAQ’s How to Setup Google Recaptcha v2 on Advanced Contact Form

  • This topic is empty. This post has been viewed 4290 times
Viewing 1 post (of 1 total)
  • Author
    Posts
  • #10033840
    Support2
    Keymaster

    Important: The instructions on this topic works for Porto 7.0.0+

    Get reCAPTCHA API keys:

    For adding reCAPTCHA to your site, you need to register your site and get reCAPTCHA API keys. Register your site at Google from here – https://www.google.com/recaptcha/admin

    – Get your Site Key. Site key is used to display the reCAPTCHA widget. The code is in the pattern of the image below

    – Get your Secret Key. Secret key helps authorizes communication between your site and the reCAPTCHA server. The code is in the pattern of the image below

     

    For Advanced Contact Form:

    – In contact-us-advanced.php: Remove and add HTML like the images below:

    CHANGE:

    TO:

    <div class="col-md-12">
    	<div class="row mb-sm">
    		<div class="col-md-12">
    			<div class="g-recaptcha" data-sitekey="YOUR_SITE_KEY"></div>
    		</div>
    	</div>
    </div>

    – Add this script like image below:

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

    – In top of contact-us-advanced.php change ALL PHP code to this below:
    IMPORTANT: Change “YOUR_SECRET_KEY” with your generated Google reCAPTCHA Secret Key.

    <?php
    namespace PortoContactForm;
    session_start();

    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\Exception;

    require 'php/simple-php-captcha/simple-php-captcha.php';
    require 'php/php-mailer/src/PHPMailer.php';
    require 'php/php-mailer/src/SMTP.php';
    require 'php/php-mailer/src/Exception.php';

    if(isset($_POST['emailSent'])) {

    if(isset($_POST['g-recaptcha-response']) && !empty($_POST['g-recaptcha-response'])) {

    // Your Google reCAPTCHA generated Secret Key here
    $secret = 'YOUR_SECRET_KEY';

    $serverError = '';

    if( ini_get('allow_url_fopen') ) {
    //reCAPTCHA - Using file_get_contents()
    $verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$_POST['g-recaptcha-response']);
    $responseData = json_decode($verifyResponse);
    } else if( function_exists('curl_version') ) {
    // reCAPTCHA - Using CURL
    $fields = array(
    'secret' => $secret,
    'response' => $_POST['g-recaptcha-response'],
    'remoteip' => $_SERVER['REMOTE_ADDR']
    );

    $verifyResponse = curl_init("https://www.google.com/recaptcha/api/siteverify");
    curl_setopt($verifyResponse, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($verifyResponse, CURLOPT_TIMEOUT, 15);
    curl_setopt($verifyResponse, CURLOPT_POSTFIELDS, http_build_query($fields));
    $responseData = json_decode(curl_exec($verifyResponse));
    curl_close($verifyResponse);
    } else {
    $arrResult = array ('response'=>'error','errorMessage'=>'You need CURL or file_get_contents() activated in your server. Please contact your host to activate.');
    $serverError = true;
    }

    if(empty($serverError)) {

    if($responseData->success) {

    // Step 1 - Enter your email address below.
    $email = '[email protected]';

    // If the e-mail is not working, change the debug option to 2 | $debug = 2;
    $debug = 0;

    // If contact form don't has the subject input change the value of subject here
    $subject = ( isset($_POST['subject']) ) ? $_POST['subject'] : 'Define subject in php/contact-form.php line 29';

    $message = '';

    foreach($_POST as $label => $value) {
    if( !in_array( $label, array( 'emailSent', 'g-recaptcha-response' ) ) ) {
    $label = ucwords($label);

    // Use the commented code below to change label texts. On this example will change "Email" to "Email Address"

    // if( $label == 'Email' ) {
    // $label = 'Email Address';
    // }

    // Checkboxes
    if( is_array($value) ) {
    // Store new value
    $value = implode(', ', $value);
    }

    $message .= $label.": " . htmlspecialchars($value, ENT_QUOTES) . "<br>\n";
    }
    }

    $mail = new PHPMailer(true);

    try {

    $mail->SMTPDebug = $debug; // Debug Mode

    // Step 3 (Optional) - If you don't receive the email, try to configure the parameters below:

    //$mail->IsSMTP(); // Set mailer to use SMTP
    //$mail->Host = 'mail.yourserver.com'; // Specify main and backup server
    //$mail->SMTPAuth = true; // Enable SMTP authentication
    //$mail->Username = '[email protected]'; // SMTP username
    //$mail->Password = 'secret'; // SMTP password
    //$mail->SMTPSecure = 'tls'; // Enable encryption, 'ssl' also accepted
    //$mail->Port = 587; // TCP port to connect to

    $mail->AddAddress($email); // Add a recipient

    //$mail->AddAddress('[email protected]', 'Person 2'); // Add another recipient
    //$mail->AddCC('pe[email protected]', 'Person 3'); // Add a "Cc" address.
    //$mail->AddBCC('pe[email protected]', 'Person 4'); // Add a "Bcc" address.

    // From - Name
    $fromName = ( isset($_POST['name']) ) ? $_POST['name'] : 'Website User';
    $mail->SetFrom($email, $fromName);

    // Repply To
    if( isset($_POST['email']) ) {
    $mail->AddReplyTo($_POST['email'], $fromName);
    }

    $mail->IsHTML(true); // Set email format to HTML

    $mail->CharSet = 'UTF-8';

    $mail->Subject = $subject;
    $mail->Body = $message;

    // Step 4 - If you don't want to attach any files, remove that code below
    if (isset($_FILES['attachment']) && $_FILES['attachment']['error'] == UPLOAD_ERR_OK) {
    $mail->AddAttachment($_FILES['attachment']['tmp_name'], $_FILES['attachment']['name']);
    }

    $mail->Send();

    $arrResult = array ('response'=>'success');

    } catch (Exception $e) {
    $arrResult = array ('response'=>'error','errorMessage'=>$e->errorMessage());
    } catch (\Exception $e) {
    $arrResult = array ('response'=>'error','errorMessage'=>$e->getMessage());
    }

    } else {
    $arrResult = array ('response'=>'error','errorMessage'=>'Robot verification failed, please try again');
    }
    }

    } else {
    $arrResult = array ('response'=>'error','errorMessage'=>'Please click on the reCAPTCHA box.');
    }

    }
    ?>

    • This topic was modified 2 years, 10 months ago by Support2.
    • This topic was modified 2 years, 10 months ago by Support2.
    • This topic was modified 2 years, 10 months ago by Support2.
    • This topic was modified 2 years, 10 months ago by Support2.
    • This topic was modified 2 years, 10 months ago by Support2.
    • This topic was modified 2 years, 10 months ago by Support2.
    • This topic was modified 2 years, 10 months ago by Support2.
    • This topic was modified 2 years, 10 months ago by Support2.
    • This topic was modified 2 years, 10 months ago by Support2.
Viewing 1 post (of 1 total)

This topic is marked as "RESOLVED" and can not rceive new replies.