Google ReCaptcha 2 Fatal error: Class 'ReCaptcha\RequestMethod\Post' not found

Google ReCaptcha 2 Fatal error: Class 'ReCaptcha\RequestMethod\Post' not found

我是本地计算机 运行 wamp 上的 google recaptcha v2。一切看起来都很好,除了在它应该验证表单时它一直在死去

我收到此错误:

Fatal error: Class 'ReCaptcha\RequestMethod\Post' not found in C:\wamp\www\php\contactForm\Captcha\ReCaptcha.php on line 73

我几乎 copy/pasted 来自 google 的示例代码:

if (!empty($human)) {
    require_once('Captcha\ReCaptcha.php');
    $recaptcha = new \ReCaptcha\ReCaptcha($secret);
    $resp = $recaptcha->verify($human, $remoteIp);
   if ($resp->isSuccess()) {
    // verified!

我已经从 google github (https://github.com/google/recaptcha/tree/master/src/ReCaptcha) 下载了文件,并且只使用了文件夹/文件名。我的验证文件在上面一个文件夹中,但我也尝试将这些文件复制到与验证脚本相同的文件夹中以防万一。

有什么想法吗?

似乎 google 每个人都使用 composer 安装他们的存储库这一事实。老实说,这是他们在 github repo readme.md https://github.com/google/recaptcha

上提供的唯一安装方法

当您使用 composer 安装诸如 google recaptcha 之类的软件包时,该软件包可以选择在 https://github.com/google/recaptcha/blob/master/composer.json

中使用自动加载器注册
"autoload": {
    "psr-4": {
        "ReCaptcha\": "src/ReCaptcha"
    }
},

通过这种方式,您必须在脚本中包含才能访问所有包 classes 是 composer 在安装包时生成的 autoload.php。

第 34 行:https://github.com/google/recaptcha/blob/master/examples/example-captcha.php

// Initiate the autoloader.
require_once __DIR__ . '/../vendor/autoload.php';

自动加载器是一种函数,它在请求 php 时尝试加载 class。在这种情况下,它将命名空间映射到磁盘上的目录结构。

更多关于 php 自动加载器的信息:http://php.net/autoload and here: http://www.php-fig.org/psr/psr-4/examples/

如果您不想使用 composer 及其自动加载功能,您可能会发现这很有用:https://github.com/abraham/twitteroauth 它有一个 autoload.php,您可以借用它来加载 classes没有作曲家。

  1. 将其副本放入您的 recaptcha 顶级文件夹(其中包含 README.md 的文件夹)
  2. 将第 12 行替换为 $prefix = 'ReCaptcha\';
  3. 将第 15 行替换为 $base_dir = __DIR__ . '/src/ReCaptcha/';
  4. 在您的代码某处需要 autoloader.php(此文件)
  5. 在你的代码中像这样实例化你的 ReCaptcha 对象 new ReCaptcha\ReCaptcha($RECAPTCHASECRETKEY);

我希望我不会被猛烈抨击,但我发现如果您需要所有文件,它可以在不使用自动加载器或作曲家的情况下按设计工作。

//GOOGLE RECAPTCH CODE
require_once('/cgi-bin/src/ReCaptcha/ReCaptcha.php');
require_once('/cgi-bin/src/ReCaptcha/RequestMethod.php');
require_once('/cgi-bin/src/ReCaptcha/RequestParameters.php');
require_once('/cgi-bin/src/ReCaptcha/Response.php');
require_once('/cgi-bin/src/ReCaptcha/RequestMethod/Post.php');
require_once('/cgi-bin/src/ReCaptcha/RequestMethod/Socket.php');
require_once('/cgi-bin/src/ReCaptcha/RequestMethod/SocketPost.php');
$gRecaptchaResponse = $_POST['g-recaptcha-response'];
$secret = 'YOUR SECRET KEY';

$recaptcha = new \ReCaptcha\ReCaptcha($secret);
$resp = $recaptcha->verify($gRecaptchaResponse, $remoteIp);
if ($resp->isSuccess()) {
    //DO ACTION IF SUCCESSFUL
} else {
    $errors = $resp->getErrorCodes();
}
//END OF GOOGLE RECAPTCHA CODE