与recaptcha 2.0 php服务器端的问题

时间:2017-03-01 17:09:50

标签: php recaptcha

我拼命想让自己的形式发挥作用。

但是我在验证recaptcha服务器端时遇到了问题 我一直在四处寻找,并在我的表格上进行了一千次测试,我知道它没有通过重新接收的步骤,但无法弄明白。

这是我的代码:

//variable :
$recaptcha = $_POST['g-recaptcha-response'];

//test captcha
if($recaptcha != '')
{
    $secret = " MY KEY HERE";
    $ip = $_SERVER['REMOTE_ADDR'];
    $var = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secret."&response=".$recaptcha."&remoteip=".$ip);
    $array = json_decode($var,true);

    //check if captcha ok then check fields empty
    if($array['success'])

如果您发现任何错误,请告诉我。
谢谢。 (事实上​​我删除了我的安全密钥)

2 个答案:

答案 0 :(得分:1)

在我的测试中,我遇到了两个你可能遇到的问题。

  1. remoteip参数是可选的。当我删除它时,一切正常。原因如下:我在防火墙后面的私有IP上使用客户端和服务器计算机进行测试,因此我服务器上的$_SERVER['REMOTE_ADDR']值为192.168.x.x. Google看到了我的NAT防火墙的公共IP,因此这是siteverify试图匹配的内容。

  2. 您只能检查给定的response一次。如果您尝试再次检查,它将始终失败。因此,在测试过程中,您需要每次都使用新的。

  3. 此外,您可以使用以下方法简化PHP代码:
        "...siteverify?secret=$secret&response=$recaptcha");

答案 1 :(得分:0)

试试这个: $ secret =“YOUR-SECRET-KEY”;

$verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret=' . $secret . '&response=' . $_POST['g-recaptcha-response']);
$googleResponse = json_decode($verifyResponse);
if ($googleResponse->success)
{
    $captchaVerified = true;
}