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
-
AuthorPosts
-
July 15, 2020 at 10:37 pm #10033840
Support2
KeymasterImportant: 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.
-
This topic was modified 2 years, 10 months ago by
-
AuthorPosts
This topic is marked as "RESOLVED" and can not rceive new replies.