Расшифровка возвращаемых значений

1

У меня работает служба 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 )

Чем отличается json reCaptcha? (и/или что я не понимаю?)

Я предполагаю, что дальнейшая путаница здесь:

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

то я получаю

boolean
1
1

Как можно проверить true и false как вернуть true?!

Дополнительная информация

Еще более смутно (по крайней мере для меня), я тоже пробовал var_dump:

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

который возвращается

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

почему json-представление в var_dump false когда echo показывает, что это true?!

  • 0
    лично я использовал эту библиотеку: github.com/google/recaptcha
  • 0
    @Dagon спасибо, это выглядит интересно. Мне все еще любопытно, почему возвращенный json не декодируется так же, как моя обычная текстовая версия!
Показать ещё 1 комментарий
Теги:
recaptcha

2 ответа

0
Лучший ответ

В моем вопросе я должен был, наверное, сказать, что я использовал код, вдохновленный этим ответом, и что мой звонок в службу проверки Google был завернут в функцию. Я понял, что вы можете только однажды называть эту услугу один раз, но я вызывал ее каждый раз, когда я вызывал функцию, и поэтому во второй раз, когда я вызывал эту функцию (то есть во второй раз, когда я вызывал эту услугу), служба проверки return false

Я не уверен, что это явно документировано где угодно, хотя, возможно, это должно было быть немного более очевидным!

1

Я думаю, ваша главная проблема заключалась в том, что JSON вернулся из recaptcha и сохранил в $result было { "success": false } а не { "success": true }.

Это объясняет, почему вы получили Array ( [success] => ) а не Array ( [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);

И я получил это в случае успеха:

Изображение 174551

И это в случае отказа:

Изображение 174551

  • 0
    Да, это так далеко, как я получил! Я не мог понять, почему я тоже получил false значение. Я узнал почему (это было действительно глупо) и добавил это как ответ

Ещё вопросы

Сообщество Overcoder
Наверх
Меню