【发布时间】:2017-12-09 19:03:28
【问题描述】:
之后我尝试实现一个简单的代码以在我的网站上使用 reCAPTCHA,但即使是这个简单的代码也不起作用。
问题是验证函数总是返回一个布尔值(假)。 我已经检查了几次密钥,但它们是正确的
<head>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
</head>
<body>
<?php require_once "recaptchalib.php"; ?>
<?php
if(isset($_POST['new_comment']) && !empty($_POST['new_comment'])):
if(isset($_POST['g-recaptcha-response']) && !empty($_POST['g-recaptcha-response'])) :
$secret = "mysecretkey";
var_dump ($_POST['g-recaptcha-response']);
$ip = $_SERVER['REMOTE_ADDR'];
$verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$_POST['g-recaptcha-response'].'&remoteip='.$ip);
echo ("verifyresponse");
var_dump ($verifyResponse);
$responseData = json_decode($verifyResponse, true);
echo ("responseData");
var_dump ($ResponseData);
if ($response != null && $response->success) :
echo 'Form info successfully submitted';
else:
$errMsg = 'Robot verification failed, please try again.';
echo $errMsg ;
endif;
else:
$errMsg = 'Please click on the reCAPTCHA box.';
echo $errMsg ;
endif;
else:
$errMsg = '';
$succMsg = '';
endif;
?>
<form name="form1" action="thisfile.php" method="post">
Enter Comment :<br />
<textarea name="new_comment" cols="75" rows="10"></textarea><br />
<div class="g-recaptcha" data-sitekey="mysitekey"></div>
<input type="submit" value="Envoyer" />
</form>
</body>
</html>
var_dump ($_POST['g-recaptcha-response']) 给出了预期的长链字符,但 var_dump ($verifyResponse) 给出了 bool(false) 值,而我从未见过 var_dump ($ResponseData)。
谁能帮我弄清楚这段代码有什么问题?
我已将问题缩小到file_get_content 调用返回“假”值而不是预期的事实
{ “成功”:是的, "challenge_ts": "2017-12-10T15:09:12Z", “主机名”:“我的域名” }
让我抓狂的是,如果回显完整的字符串并直接在浏览器中复制它,那么我会得到正确的答案(上图),所以我不知道出了什么问题......
这是我的代码的当前“精简”版本(我已经删除了 json_decode 调用以及之后的所有内容,因为只要我得到错误的返回值,我就知道其余的都行不通)
<!doctype html>
<html>
<head>
<script src="https://www.google.com/recaptcha/api.js" async defer>
</script>
</head>
<body>
<?php
define('GOOGLE_RECAPTCHA_KEY','xxx');
define('GOOGLE_RECAPTCHA_SECRET_KEY','yyy');
$message = false;
if ( isset( $_POST['new_comment'], $_POST['g-recaptcha-response'] ) && !empty( $_POST['new_comment'] ) && !empty( $_POST['g-recaptcha-response'] ) ){
echo 'Sauvegarde du commentaire' ;
$secret = GOOGLE_RECAPTCHA_SECRET_KEY;
$ip = $_SERVER['REMOTE_ADDR'];
var_dump($_POST['g-recaptcha-response']);
$getResponse = 'https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$_POST['g-recaptcha-response'];
var_dump($getResponse);
$GoogleResponse = file_get_contents($getResponse) ;
var_dump($GoogleResponse) ;
}
?>
<form method='post'>
Enter Comment :<br />
<textarea name='new_comment' cols='75' rows='10'></textarea>
<?php
if( !empty( $message ) )echo $message;
?>
<br />
<div class='g-recaptcha' data-sitekey='<?php echo GOOGLE_RECAPTCHA_KEY;?>'></div>
<input type='submit' value='Envoyer' />
</form>
</body>
</html>
【问题讨论】:
-
我知道这听起来可能很愚蠢,但大概您实际上使用的是有效密钥而不是
$secret = "mysecretkey";? -
感谢您的提问。但实际上,我正在使用有效的密钥(用于密钥和数据站点密钥
-
您能分享一下您在发布上述代码后所做的任何更改吗?