wowe/recaptcha

PHP 对 Google reCAPTCHA API 的实现。

v1.0.0 2014-12-07 22:12 UTC

This package is auto-updated.

Last update: 2024-09-06 09:12:25 UTC


README

PHP Recaptcha 提供了 Google reCAPTCHA API 的完整 PHP 实现,以及一些用于其他流行包的有用适配器。它特别使用了 2014 年 12 月发布的 "无 CAPTCHA" 版本。

安装

通过 Composer:
composer require wowe/recaptcha:1.*

配置

使用此包只需要两个值

  • secret:用于认证的 API 密钥对的组成部分。
  • siteKey:唯一标识您的网站的 API 密钥对的组成部分。

这两个值都必须从 Google 获取。有关获取方式的说明,请参阅这里

使用

设置

为了使用此包,创建一个新的 Recaptcha 类实例,传入 secretsiteKey 值。

require 'vendor/autoload.php';
use \Wowe\Recaptcha\Recaptcha;

$recaptcha = new Recaptcha('secret', 'siteKey');

可用方法

  • script($onload = null, $render = null, $hl = null, $attributes = array())
    基于选项生成一个 script 标签。
    • $onload string:在加载时调用的 JavaScript 函数的名称。
    • $render string:何时渲染小部件('明确' 或 'onload')。
    • $hl string:小部件使用的语言。
    • $attributes array:标签的附加属性。
    • 返回 string
  • widget($theme = null, $type = null, $callback = null, $attributes = array())
    基于选项生成一个 div 标签用于小部件。
    • $theme string:小部件的颜色主题('深色' 或 '浅色')。
    • $type string:提供的服务 CAPTCHA 类型('音频' 或 '图像')。
    • $callback string:当用户提交成功的 CAPTCHA 响应时执行的 JavaScript 回调函数的名称。
    • $attributes array:放置在 div 上的附加属性。
    • 返回 string
  • verify($response, $remoteIp = null)
    查询 Google API 以确定 CAPTCHA 是否有效。
    • $response string:用户响应令牌。
    • $remoteIp string:用户的 IP 地址。
    • 返回 boolean
  • errors()
    最后验证查询的错误列表。
    • 返回 array

验证错误代码

调用 verify 后,您可以调用 errors 获取可能遇到的任何错误列表。如果返回空数组,则没有错误!如果有错误,它们通常是 Google API 返回的 错误代码。除了这些,它还可能返回

  • transfer-error:尝试连接到 API 时遇到异常。
  • api-error:API 返回的 HTTP 状态码不是 200。
  • response-error:无法读取 API 返回的响应格式。

适配器

Twig

网站 | GitHub
通过在 Twig 模板中添加所包含的 TwigExtension 类的一个实例到 Twig 环境中,可以将 scriptwidget 方法公开。必须使用 Recaptcha 类的一个实例初始化 TwigExtension 实例。script 映射到名为 recaptchaScript 的函数,而 widget 映射到名为 recaptchaWidget 的函数。所有参数与 上面 的定义相同。

// index.php
require 'vendor/autoload.php';
use \Wowe\Recaptcha\Recaptcha;
use \Wowe\Recaptcha\Adapters\TwigExtension;

$recaptcha = new Recaptcha('secret', 'siteKey');
$loader = new Twig_Loader_Filesystem(__DIR__ . '/views');
$twig = new Twig_Environment($loader);
$twig->addExtension(new TwigExtension($recaptcha)));
echo $twig->render('index.html');

// views/index.html
<!doctype html>
<html>
    <head>
        {{ recaptchaScript() }}
    </head>
    <body>
        <form method="POST">
            {{ recaptchaWidget() }}
            <input type="submit" />
        </form>
    </body>
</html>

Slim 框架

网站 | GitHub
可以通过运行 SlimManager::register 方法自动将 Recaptcha 类注册为 Slim 容器中的单例,该方法有三个可选参数

  • register($registerViewExtension = false, $recaptcha = null, $appName = null)
    将 Recaptcha 实例注册到应用容器中。
    • $registerViewExtension 布尔值:是否同时注册视图扩展(如果可用)。
    • $recaptcha \Wowe\Recaptcha\Recaptcha:要绑定到的 Recaptcha 实例。
    • $appName 字符串:要注册的应用程序名称。
    • 返回空值

如果您想自己实例化 Recaptcha 类(为了获取自定义的配置值),可以这样做,然后只需将其传递给 register 方法。如果没有传递 Recaptcha 实例,它将尝试通过从 Slim 应用中获取配置值来创建一个。为了利用这个功能,将配置值 recaptcha 设置为一个包含 secretsiteKey 值的数组,如下例所示

require 'vendor/autoload.php';
use \Slim\Slim;
use \Wowe\Recaptcha\Adapters\SlimManager;

$app = new Slim([
    'recaptcha' => [
        'secret' => 'secret',
        'siteKey' => 'siteKey'
    ]
]);

SlimManager::register();

$app->get('/', function () use ($app) {
    return $app->render('index.html');
});

$app->post('/', function () use ($app) {
    $recaptchaResponse = $app->request->post('g-recaptcha-response');
    var_dump($app->recaptcha->verify($recaptchaResponse), $app->recaptcha->errors());
});

$app->run();

如果 registerViewExtension 的值为 true,并且正在使用具有可用扩展的视图引擎(例如 Twig),它将注册相应的扩展到视图引擎。

发布说明

更多详细信息可以在 CHANGELOG.md 文件中找到

  • v1.0.0 - 初次发布

版本兼容性

许可

Recaptcha for PHP 包是开源软件,许可协议为 MIT 许可