google recaptcha响应为null [PHP,localhost]

时间:2017-02-05 16:30:24

标签: php forms validation recaptcha

在转发到开放式互联网之前,我需要帮助解决我在我的电脑上开发的网站中的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,这应该有帮助但是没用。我没有“开放”的网站来粘贴它并尝试,我做错了什么?

3 个答案:

答案 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.';
        } 
    }
}

?>