Php 解码recaptcha返回值
我有一个服务正在工作,但是通过PHP的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('{“
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);