Php 解码recaptcha返回值

Php 解码recaptcha返回值,php,recaptcha,Php,Recaptcha,我有一个服务正在工作,但是通过PHP的json\u decode函数传递返回值会产生一些我不理解的结果 如果reCaptcha有效,那么服务将返回{“success”:true}——这是我所期望的 召唤 print_r(json_decode($result, $assoc = true)); //where $result is the service call 给予 …但我希望数组([success]=>1)(或类似值)表示true值 事实上,print_r(json_decode('{“

我有一个服务正在工作,但是通过PHP的
json\u decode
函数传递返回值会产生一些我不理解的结果

如果reCaptcha有效,那么服务将返回
{“success”:true}
——这是我所期望的

召唤

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

…但我希望
数组([success]=>1)
(或类似值)表示
true

事实上,
print_r(json_decode('{“success”:true}',$assoc=true))
返回
数组([success]=>1)

reCaptcha返回的json有什么不同?(和/或我不明白的是什么?!)

我想这就是进一步混淆的地方:

echo(gettype($a->success));
echo($a->success === true);
echo($a->success === false);
然后我得到

boolean
1
1
true
false
的检查如何都返回
true

进一步信息

更令人困惑的是(至少对我来说),我也尝试了
var\u dump

echo($a);
var_dump($a);
返回

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

echo
显示json表示为
true
时,为什么在
var\u dump
中json表示为false

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

这可以解释为什么您得到
数组([success]=>)
而不是
数组([success]=>1)
作为
echo false
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);


在我的问题中,我应该说我使用的代码灵感来自,我对谷歌验证服务的调用被包装在一个函数中。我意识到,您只能调用此服务一次,但我每次调用函数时都会调用它,因此在我第二次调用函数(即第二次调用服务)时,验证服务确实返回了
false


我不确定这是否在任何地方都有明确的记录,尽管也许它应该更明显一点

就我个人而言,我用了这个词:@Dagon谢谢,看起来很有趣。我仍然很好奇为什么返回的json没有像我的纯文本版本那样被解码!我没有得到足够的报酬去弄清楚为什么,我停在——好吧,那行得通,继续前进——这就是我所能做到的!我不明白为什么我也得到了一个
false
值。我已经找到了原因(这真的很愚蠢),并把它作为一个答案添加进去
<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);