NoCaptcha返回错误invalid-json

tom*_*gun 18 php json recaptcha

我将Googles funky ReCaptcha NoCaptcha整合到一个简单的html5表单中.在localhost上它正在工作,但在线测试它总是返回错误'invalid-json'.这是我的代码的一部分:

$secret = 'TEHSEHCRET';
$recaptcha = new \ReCaptcha\ReCaptcha($secret);
$resp = $recaptcha->verify($_POST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']);
if ($resp->isSuccess()) {
// do some
}
else {
print_r($errors = $resp->getErrorCodes());
}
Run Code Online (Sandbox Code Playgroud)

返回 Array ( [0] => invalid-json )

我用谷歌搜索了一些帮助,但没有发现真有帮助.

由于代码在线和离线是相同的,我真的无能为力.问题来自哪里.https://developers.google.com/recaptcha/docs/verify对错误代码一无所知.猜猜解决方案太简单了.

小智 47

我有同样的问题,并使用cURL作为请求方法而不是POST修复它.

$recaptcha = new \ReCaptcha\ReCaptcha($secret, new \ReCaptcha\RequestMethod\CurlPost());
Run Code Online (Sandbox Code Playgroud)

  • 它必须是`$ recaptcha = new\ReCaptcha\ReCaptcha($ secret,new\ReCaptcha\RequestMethod\CurlPost());` (2认同)

tom*_*gun 7

解决方案的关键是简单地打开php错误(我知道,这很令人尴尬).这导致了让我苦苦挣扎的错误,同时也提供了解决方案:

PHP在连接到谷歌的https验证页面时遇到问题.这只是因为php.ini中的一个选项:allow_url_fopen

php.net说明:

allow_url_fopen布尔值

此选项启用支持URL的fopen包装器,以便访问URL对象(如文件).提供了默认包装器,用于使用ftp或http协议访问远程文件,某些扩展(如zlib)可能会注册其他包装器.

将其值从0更改为1解决了我的问题.显示开发时打开php错误的重要性(我是php编程的超级菜鸟)

希望这能帮助某人一些时间!

  • 谢谢你,兄弟.它帮助我意识到实际上是错的.我使用https://github.com/google/recaptcha和套接字方法.再次感谢 (2认同)
  • 你是绝对正确的.`allow_url_fopen`必须是真的.或者你可以使用`$ recaptcha = new\ReCaptcha\ReCaptcha($ secret,new\ReCaptcha\RequestMethod\CurlPost());` - >这总是有效的. (2认同)