Last active
December 8, 2018 18:12
-
-
Save ondrique/831b7728f10ef6f9660f6deecd84f56d to your computer and use it in GitHub Desktop.
Bootstrap ReCaptcha form - PHP part
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// require ReCaptcha class | |
require('recaptcha-master/src/autoload.php'); | |
// configure | |
// an email address that will be in the From field of the email. | |
$from = 'Demo contact form <demo@domain.com>'; | |
// an email address that will receive the email with the output of the form | |
$sendTo = 'Demo contact form <demo@domain.com>'; | |
// subject of the email | |
$subject = 'New message from contact form'; | |
// form field names and their translations. | |
// array variable name => Text to appear in the email | |
$fields = array('name' => 'Name', 'surname' => 'Surname', 'phone' => 'Phone', 'email' => 'Email', 'message' => 'Message'); | |
// message that will be displayed when everything is OK :) | |
$okMessage = 'Contact form successfully submitted. Thank you, I will get back to you soon!'; | |
// If something goes wrong, we will display this message. | |
$errorMessage = 'There was an error while submitting the form. Please try again later'; | |
// ReCaptch Secret | |
$recaptchaSecret = '6LfKURIUAAAAAKEPdFXGUiRsQYtEYUnH1-OB5Mgx'; | |
// let's do the sending | |
// if you are not debugging and don't need error reporting, turn this off by error_reporting(0); | |
error_reporting(E_ALL & ~E_NOTICE); | |
try { | |
if (!empty($_POST)) { | |
// validate the ReCaptcha, if something is wrong, we throw an Exception, | |
// i.e. code stops executing and goes to catch() block | |
if (!isset($_POST['g-recaptcha-response'])) { | |
throw new \Exception('ReCaptcha is not set.'); | |
} | |
// do not forget to enter your secret key from https://www.google.com/recaptcha/admin | |
$recaptcha = new \ReCaptcha\ReCaptcha($recaptchaSecret, new \ReCaptcha\RequestMethod\CurlPost()); | |
// we validate the ReCaptcha field together with the user's IP address | |
$response = $recaptcha->verify($_POST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']); | |
if (!$response->isSuccess()) { | |
/* | |
Uncomment this to see the error codes if you have troubles with the implementation. | |
I recommend not to display the error codes on production, though. | |
$errors = $response->getErrorCodes(); | |
throw new \Exception('ReCaptcha returned error: ', implode(',', $errors)); | |
*/ | |
throw new \Exception('ReCaptcha was not validated.'); | |
} | |
// everything went well, we can compose the message, as usually | |
$emailText = "You have a new message from your contact form\n=============================\n"; | |
foreach ($_POST as $key => $value) { | |
// If the field exists in the $fields array, include it in the email | |
if (isset($fields[$key])) { | |
$emailText .= "$fields[$key]: $value\n"; | |
} | |
} | |
// All the neccessary headers for the email. | |
$headers = array('Content-Type: text/plain; charset="UTF-8";', | |
'From: ' . $from, | |
'Reply-To: ' . $from, | |
'Return-Path: ' . $from, | |
); | |
// Send email | |
mail($sendTo, $subject, $emailText, implode("\n", $headers)); | |
$responseArray = array('type' => 'success', 'message' => $okMessage); | |
} | |
} catch (\Exception $e) { | |
$responseArray = array('type' => 'danger', 'message' => $e->getMessage()); | |
} | |
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { | |
$encoded = json_encode($responseArray); | |
header('Content-Type: application/json'); | |
echo $encoded; | |
} else { | |
echo $responseArray['message']; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment