I stand up for children in need. Please join me in helping this family.
In today's digital landscape, protecting your web forms from spam and abuse is crucial. Google's reCAPTCHA is a popular tool for this purpose, but integrating it into your PHP projects can sometimes be a bit cumbersome. Today, we'll create a simple, reusable PHP wrapper class for Google reCAPTCHA that you can easily incorporate into your projects.
The ReCaptchaWrapper Class
Let's dive into the code for our ReCaptchaWrapper
class:
<?php
class ReCaptchaWrapper
{
private static $siteKey = 'default_site_key';
private static $secretKey = 'default_secret_key';
public static function init($siteKey = null, $secretKey = null)
{
if ($siteKey !== null) {
self::$siteKey = $siteKey;
}
if ($secretKey !== null) {
self::$secretKey = $secretKey;
}
}
public static function displayWidget()
{
echo '<div class="g-recaptcha" data-sitekey="' . self::$siteKey . '"></div>';
echo '<script src="https://www.google.com/recaptcha/api.js" async defer></script>';
}
public static function verifyResponse($response)
{
$url = 'https://www.google.com/recaptcha/api/siteverify';
$data = [
'secret' => self::$secretKey,
'response' => $response
];
$options = [
'http' => [
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data),
],
];
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
$resultJson = json_decode($result);
return $resultJson->success;
}
}
Key Features
Static Methods: The class uses static methods, allowing you to call them without instantiating the class.
Default Keys: It includes default values for the site key and secret key.
Flexible Initialization: The
init()
method allows you to override the default keys if needed.Simple Display: The
displayWidget()
method outputs the necessary HTML and JavaScript for the reCAPTCHA widget.Easy Verification: The
verifyResponse()
method handles the server-side verification of the reCAPTCHA response.
How to Use the Wrapper
In Your HTML Form
Here's how you can use the wrapper in your HTML form:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Form with reCAPTCHA</title>
</head>
<body>
<form action="verify.php" method="post">
<input type="text" name="name" placeholder="Enter your name" required>
<?php
require_once 'ReCaptchaWrapper.php';
// Optionally override default keys
ReCaptchaWrapper::init('your_site_key', 'your_secret_key');
ReCaptchaWrapper::displayWidget();
?>
<input type="submit" value="Submit">
</form>
</body>
</html>
Verifying the Response
In your PHP script that handles the form submission:
<?php
require_once 'ReCaptchaWrapper.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Optionally override default keys
ReCaptchaWrapper::init('your_site_key', 'your_secret_key');
$response = $_POST['g-recaptcha-response'];
if (ReCaptchaWrapper::verifyResponse($response)) {
echo 'Form submission successful!';
// Process form data...
} else {
echo 'reCAPTCHA verification failed. Please try again.';
}
}
Conclusion
This simple PHP wrapper for Google reCAPTCHA provides an easy and flexible way to integrate reCAPTCHA into your web forms. By using static methods and allowing for default keys with the option to override, it offers a balance of simplicity and customization.
Remember to replace the default keys in the class with your actual reCAPTCHA keys for production use. Happy coding, and keep those bots at bay!
More posts
Navigating Beliefs: The Quest for True Meaning
Inspired by Chuck Palahniuk's quote, this post explores the challenge of believing in the right things and finding true meaning. It offers insights on critical thinking, questioning beliefs, and the importance of accurate interpretation in our quest for understanding.
How to Safely Update Your WordPress Site: A Step-by-Step Guide
Learn how to safely update your WordPress site using a staging environment. Backup your site, update plugins and themes, test for issues, troubleshoot common problems, and ensure smooth performance on the live site.
The Companionship of Books: Finding Life's Meaning Between the Pages
Inspired by Christopher Paolini's quote, this post explores the deep connection between readers and books. It highlights how books serve as friends, emotional catalysts, and sources of life's meaning, encouraging a deeper appreciation for literature.