0

我正在为我的网站使用谷歌网站验证 recaptcha API。

$json = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secret."&response=".$response."&remoteip=".$ip);

当我打印echo $json;它显示正确的响应时

{ "success": true, "challenge_ts": "2018-08-23T12:43:42Z", "hostname": "staging.my.com" }

但是当我尝试

$data = json_decode($json,true); echo $data->success;

它什么也没显示

谁能告诉我我错过了什么?

4

2 回答 2

1
$json = '{ "success": true, "challenge_ts": "2018-08-23T12:43:42Z", "hostname": "staging.my.com" }';
$data = json_decode($json,true);

这会从您的示例 JSON 字符串生成一个关联数组,而不是一个对象(用于var_dump($data);查看您实际存储的内容)。只需使用正确的语法来访问数组值:

echo $data["success"]; // prints '1'

或者:

echo ($data["success"])?'success':'failure'; // prints 'success'
于 2018-08-23T19:21:52.430 回答
0

根据 PHP doc,如果将第二个参数设置assoc为 true,则函数返回关联数组而不是 std 类。

 mixed json_decode ( string $json [, bool $assoc = FALSE [, int $depth = 512 [, int $options = 0 ]]] )

协会

当 TRUE 时,返回的对象将被转换为关联数组。

所以要么尝试$data['success']要么更改json_decode($json, true)json_decode($json).

于 2018-08-23T19:15:21.267 回答