cryental/wowe-recaptcha

PHP 对 Google reCAPTCHA API 的实现。

v1.3.0 2021-01-07 13:26 UTC

This package is auto-updated.

Last update: 2024-09-07 21:48:33 UTC


README

Recaptcha for PHP 提供了 Google reCAPTCHA API 的完整 PHP 实现,以及一些对其他流行包的辅助适配器。它特别使用了 2014 年 12 月发布的 "no 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: 绘制小部件的时间('explicit' 或 'onload')。
    • $hl string: 小部件使用的语言。
    • $attributes array: 标签的附加属性。
    • 返回 string
  • widget($theme = null, $type = null, $callback = null, $attributes = array())
    基于选项生成一个 div 标签作为小部件。
    • $theme string: 小部件的颜色主题('dark' 或 'light')。
    • $type string: 要提供的服务 CAPTCHA 类型('audio' 或 'image')。
    • $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 返回的不是 200 的 HTTP 状态码。
  • response-error: 无法读取 API 返回的响应格式。

适配器

Twig

网站 | GitHub
可以通过将包含的TwigExtension类的实例添加到Twig环境中,在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许可证许可