我正在建立一个带有reCAPTCHA检查表单的网站。根据{{3}}的要求,我已经为目标域创建了一个密钥。然后,我创建了一个包含reCAPTCHA部分的表单
HTML表单
<form method="post" action="index.php">
<div class="g-recaptcha" data-sitekey="PUBLIC_KEY"></div>
<input type="submit" name="submit" />
</form>
PHP响应检查
提交表单后,会验证reCAPTCHA响应(在此示例中,它只是打印出来)。
$recaptcha = filter_input(INPUT_POST, 'g-recaptcha-response', FILTER_SANITIZE_STRING);
$googleurl = "https://www.google.com/recaptcha/api/siteverify";
$privatekey = "PRIVATE_KEY";
$remoteip = $_SERVER['REMOTE_ADDR'];
$curl = new Curl($googleurl."?secret=".$privatekey."&response=".$recaptcha."&remoteip=".$remoteip);
$response = json_decode($curl->exec(), true);
print_r($response);
die();
Curl是一个简单构建卷曲请求并返回结果的类。
问题
该代码段在网上正常运行,我已经通过成功和错误案例检查了$response
个值。但在开发过程中,我也必须在localhost上使用它。如Google documentation中所述,所有密钥都应在本地运行。但是当我运行代码时,没有显示任何内容。
答案 0 :(得分:1)
虽然这个问题比较老,但我发布了答案,因为很多人可能会遇到同样的问题。我认为这可能与在localhost上运行reCaptcha的一般身份验证问题有关,可以使用secure token来解决
I posted the solution here for reference
更新 - 工作代码:
为了安全令牌生成,我正在使用slushie's php implementation
PHP部分:
<?PHP
use ReCaptchaSecureToken\ReCaptchaToken as ReCaptchaToken;
require_once("libs/ReCaptchaToken.php");
//Generate recaptcha token
$config = [ 'site_key' => 'place-your-site-key-here',
'site_secret' => 'place-your-secret-key-here'
];
$recaptcha_token = new ReCaptchaToken($config);
$recaptcha_session_id = uniqid('recaptcha');
$recaptcha_secure_token = $recaptcha_token->secureToken($recaptcha_session_id);
?>
HTML:
<html>
<head>
...
<script src='//www.google.com/recaptcha/api.js'></script>
</head>
<body>
<form>
...
<div class="g-recaptcha" data-sitekey="place-your-site-key-here" data-stoken="<?PHP echo $recaptcha_secure_token; ?>"></div>
</form>
</body>
</html>