在转发到开放式互联网之前,我需要帮助解决我在我的电脑上开发的网站中的Google Recaptcha问题(所以localhost)。
我注册了Google Recaptcha并获得了一对密钥。我在php页面中创建了这个表单:
.htaccess
而不是提交按钮我调用JS文件来验证用户输入,如果一切正常我将数据提交到另一个检查验证码的php页面。这个php页面的来源是:
DocumentRoot
问题在于:我什么都没得到!我试过了
<div>
<form action="" method="POST" name="formEmail">
<section>
<ul class="formMail" id="ulMsg">
<li>
<label for="msg">Messagge</label>
</li><li>
<textarea class="datoForm autoExpand" name="msg" id="msg" placeholder="Type Msg" rows='3' data-min-rows='3'></textarea>
</li>
</ul>
</section>
<div class="formMail" id="captchaContainer">
<div class="g-recaptcha" data-sitekey="[Public_Key]"></div>
</div>
<br/><input type="button" value="Invia" onclick="formSubmit();">
</form>
</div>
但我得到的只是NULL。我没有得到任何其他错误,验证码在表单中显示正常,似乎经常工作。我在localhost工作,所以我的IP是127.0.0.1,这应该有帮助但是没用。我没有“开放”的网站来粘贴它并尝试,我做错了什么?
答案 0 :(得分:1)
根据Google recaptcha documentation:
方法:POST
但您要在此行发送GET
请求:
$response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secretKey."&response=".$captcha."&remoteip=".$ip);
已经提出了一个解决方案here。
答案 1 :(得分:1)
刚遇到同样的问题。这是导致问题的<div>
标记。
我的表单位于用于格式化表单总体布局的主<div>
内。 <form>
标记不必位于我用于表单布局的主<div>
中。我在表单布局<form>
标记之前移动了<div>
标记,它开始完美运行。
<table>
标记也会发生同样的情况。您需要在用于格式化表单的任何表之前启动<form>
标记。
所以问题是<div>
之前的<form>
:
<div>
<form action="" method="POST" name="formEmail">
只需反转2个标签即可正常使用:
<form action="" method="POST" name="formEmail">
<div>
答案 2 :(得分:0)
内部HTML标记:
<head>
<script src="https://www.google.com/recaptcha/api.js"></script>
</head>
<body>
<form action="" method="POST">
<div class="g-recaptcha" data-sitekey="PublicKey"></div>
<input type="submit" name="submit" value="Post comment">
</form>
</body>
PHP内部标签:
<?php
if(isset($_POST['submit'])) {
if( isset($_POST['g-recaptcha-response']) && !empty( $_POST['g-recaptcha-response'] ) ) {
$secret = 'PrivateKey';
$verifyResponse=file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$_POST['g-recaptcha-response']);
$responseData = json_decode($verifyResponse);
var_dump($responseData); //this line returns Null Value
if($responseData->success) {
// Logical Code
}
else {
echo 'Robot verification failed, please try again.';
}
}
}
?>