解码recaptcha返回值

时间:2015-11-15 19:58:58

标签: php recaptcha

我有一个reCaptcha服务正在运行,但是通过PHP的json_decode函数传递返回值会给出一些我不明白的结果。

如果reCaptcha有效,则服务返回{ "success": true } - 我期望。

致电

print_r(json_decode($result, $assoc = true)); //where $result is the service call

给出

Array ( [success] => )

...但我期待Array ( [success] => 1)(或类似),表示true值。

事实上,print_r(json_decode('{"success": true}', $assoc = true)); 确实返回Array ( [success] => 1 )

reCaptcha返回的json有什么不同? (和/或我未能理解的是什么?!)

我想这就是进一步的混乱:

echo(gettype($a->success));
echo($a->success === true);
echo($a->success === false);

然后我得到

boolean
1
1

truefalse的检查如何返回true?!

更多信息

更令人困惑的是(至少对我而言),我也试过了var_dump

echo($a);
var_dump($a);

返回

{ "success": true }
string(22) "{ "success": false }"

var_dump显示false时,为什么echo true中的json表示?{!

2 个答案:

答案 0 :(得分:1)

我认为,您的主要问题是从recaptcha返回并保存在$result中的JSON是{ "success": false }而不是{ "success": true }

这可以解释为什么Array ( [success] => )而非Array ( [success] => 1)echo false returns an empty string,但echo true返回1;

我尝试使用以下代码重现recaptcha中的响应:

<html>
<head>
    <script src='https://www.google.com/recaptcha/api.js'></script>
</head>
<body>
<form>
    <div class="g-recaptcha" data-sitekey="FILL_IN_YOUR_KEY"></div>
    <input type="submit">
</form>
</body>
</html>
<?php
$url = 'https://www.google.com/recaptcha/api/siteverify';
$data = ['secret' => 'FILL_IN_YOUR_SECRET', 'response' => $_GET['g-recaptcha-response']];

$options = ['http' => ['method' => 'POST', 'content' => http_build_query($data),],];
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);

echo '$result var_dump:<br>';
var_dump($result);
echo '$result print_r:<br>';
print_r($result);
$object = json_decode($result);
echo '<br><br><br>$object var_dump:<br>';
print_r($object);
echo '<br>$object print_r:<br>';
var_dump($object);

我得到的是成功案例:

In case of success

这是在失败的情况下:

In case of failure

答案 1 :(得分:0)

在我的问题中,我应该说我正在使用受this answer启发的代码,并且我对Google验证服务的调用包含在一个函数中。我已经意识到你只能调用一次这个服务,但每次调用该函数时我都会调用它,所以第二次调用函数(即第二次调用服务)时,验证服务< em>做了返回false

我不确定这在任何地方是明确记录的,尽管可能它应该更明显一些!