root / drupal7 / sites / all / modules / recaptcha / recaptcha-php / examples / example-captcha.php @ be58a50c
1 |
<?php
|
---|---|
2 |
/**
|
3 |
* Working sample code to accompany the library. The instructions here assume
|
4 |
* you've just cloned the repo. If you've installed via composer, you will want
|
5 |
* to adjust the path to the autoloader.
|
6 |
*
|
7 |
* 1. Run the server. For example, under Linux you can probably use:
|
8 |
* /usr/bin/php -S "localhost:8000" "examples/example-captcha.php"
|
9 |
* 2. Point your browser at http://localhost:8000
|
10 |
* 3. Follow the instructions
|
11 |
*
|
12 |
* @copyright Copyright (c) 2015, Google Inc.
|
13 |
* @link http://www.google.com/recaptcha
|
14 |
*
|
15 |
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
16 |
* of this software and associated documentation files (the "Software"), to deal
|
17 |
* in the Software without restriction, including without limitation the rights
|
18 |
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
19 |
* copies of the Software, and to permit persons to whom the Software is
|
20 |
* furnished to do so, subject to the following conditions:
|
21 |
*
|
22 |
* The above copyright notice and this permission notice shall be included in
|
23 |
* all copies or substantial portions of the Software.
|
24 |
*
|
25 |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
26 |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
27 |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
28 |
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
29 |
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
30 |
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
31 |
* THE SOFTWARE.
|
32 |
*/
|
33 |
// Initiate the autoloader. The file should be generated by Composer.
|
34 |
// You will provide your own autoloader or require the files directly if you did
|
35 |
// not install via Composer.
|
36 |
require_once __DIR__ . '/../vendor/autoload.php'; |
37 |
|
38 |
// Register API keys at https://www.google.com/recaptcha/admin
|
39 |
$siteKey = ''; |
40 |
$secret = ''; |
41 |
|
42 |
// reCAPTCHA supported 40+ languages listed here: https://developers.google.com/recaptcha/docs/language
|
43 |
$lang = 'en'; |
44 |
?>
|
45 |
<html>
|
46 |
<head>
|
47 |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> |
48 |
<title>reCAPTCHA Example</title> |
49 |
<link rel="shortcut icon" href="//www.gstatic.com/recaptcha/admin/favicon.ico" type="image/x-icon"/> |
50 |
<style type="text/css"> |
51 |
body {
|
52 |
margin: 1em 5em 0 5em;
|
53 |
font-family: sans-serif;
|
54 |
}
|
55 |
fieldset {
|
56 |
display: inline;
|
57 |
padding: 1em;
|
58 |
}
|
59 |
</style>
|
60 |
</head>
|
61 |
<body>
|
62 |
<h1>reCAPTCHA Example</h1> |
63 |
<?php if ($siteKey === '' || $secret === ''): ?> |
64 |
<h2>Add your keys</h2> |
65 |
<p>If you do not have keys already then visit <tt> |
66 |
<a href = "https://www.google.com/recaptcha/admin"> |
67 |
https://www.google.com/recaptcha/admin</a></tt> to generate them. |
68 |
Edit this file and set the respective keys in <tt>$siteKey</tt> and |
69 |
<tt>$secret</tt>. Reload the page after this.</p> |
70 |
<?php
|
71 |
elseif (isset($_POST['g-recaptcha-response'])): |
72 |
// The POST data here is unfiltered because this is an example.
|
73 |
// In production, *always* sanitise and validate your input'
|
74 |
?>
|
75 |
<h2><tt>POST</tt> data</h2> |
76 |
<tt><pre><?php var_export($_POST); ?></pre></tt> |
77 |
<?php
|
78 |
// If the form submission includes the "g-captcha-response" field
|
79 |
// Create an instance of the service using your secret
|
80 |
$recaptcha = new \ReCaptcha\ReCaptcha($secret); |
81 |
|
82 |
// If file_get_contents() is locked down on your PHP installation to disallow
|
83 |
// its use with URLs, then you can use the alternative request method instead.
|
84 |
// This makes use of fsockopen() instead.
|
85 |
// $recaptcha = new \ReCaptcha\ReCaptcha($secret, new \ReCaptcha\RequestMethod\SocketPost());
|
86 |
|
87 |
// Make the call to verify the response and also pass the user's IP address
|
88 |
$resp = $recaptcha->verify($_POST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']); |
89 |
|
90 |
if ($resp->isSuccess()): |
91 |
// If the response is a success, that's it!
|
92 |
?>
|
93 |
<h2>Success!</h2> |
94 |
<p>That's it. Everything is working. Go integrate this into your real project.</p> |
95 |
<p><a href="/">Try again</a></p> |
96 |
<?php
|
97 |
else:
|
98 |
// If it's not successfull, then one or more error codes will be returned.
|
99 |
?>
|
100 |
<h2>Something went wrong</h2> |
101 |
<p>The following error was returned: <?php |
102 |
foreach ($resp->getErrorCodes() as $code) { |
103 |
echo '<tt>' , $code , '</tt> '; |
104 |
} |
105 |
?></p> |
106 |
<p>Check the error code reference at <tt><a href="https://developers.google.com/recaptcha/docs/verify#error-code-reference">https://developers.google.com/recaptcha/docs/verify#error-code-reference</a></tt>. |
107 |
<p><strong>Note:</strong> Error code <tt>missing-input-response</tt> may mean the user just didn't complete the reCAPTCHA.</p> |
108 |
<p><a href="/">Try again</a></p> |
109 |
<?php
|
110 |
endif;
|
111 |
else:
|
112 |
// Add the g-recaptcha tag to the form you want to include the reCAPTCHA element
|
113 |
?>
|
114 |
<p>Complete the reCAPTCHA then submit the form.</p> |
115 |
<form action="/" method="post"> |
116 |
<fieldset>
|
117 |
<legend>An example form</legend> |
118 |
<p>Example input A: <input type="text" name="ex-a" value="foo"></p> |
119 |
<p>Example input B: <input type="text" name="ex-b" value="bar"></p> |
120 |
|
121 |
<div class="g-recaptcha" data-sitekey="<?php echo $siteKey; ?>"></div> |
122 |
<script type="text/javascript" |
123 |
src="https://www.google.com/recaptcha/api.js?hl=<?php echo $lang; ?>"> |
124 |
</script> |
125 |
<p><input type="submit" value="Submit" /></p> |
126 |
</fieldset>
|
127 |
</form>
|
128 |
<?php endif; ?> |
129 |
</body>
|
130 |
</html>
|