zeatool/recaptcha

reCAPTCHA 客户端库,这是一个免费的服务,用于保护网站免受垃圾邮件和滥用。

1.2.6 2019-12-12 08:54 UTC

This package is auto-updated.

Last update: 2024-09-12 20:04:17 UTC


README

Build Status Coverage Status Latest Stable Version Total Downloads

reCAPTCHA 是一个免费 CAPTCHA 服务,用于保护网站免受垃圾邮件和滥用。这是一个 PHP 库,封装了从 reCAPTCHA 服务处理响应所需的服务器端验证步骤。此客户端支持 v2 和 v3。

安装

Composer(推荐)

使用 Composer 从 Packagist 安装此库:google/recaptcha

从您的项目目录中运行以下命令以添加依赖项

composer require google/recaptcha "^1.2"

或者,直接将依赖项添加到您的 composer.json 文件中

"require": {
    "google/recaptcha": "^1.2"
}

直接下载

下载 ZIP 文件 并将其提取到您的项目中。在 src/autoload.php 中提供了一个自动加载脚本,您可以在脚本中引入它。例如

require_once '/path/to/recaptcha/src/autoload.php';
$recaptcha = new \ReCaptcha\ReCaptcha($secret);

项目中的类根据 PSR-4 标准组织,因此您也可以使用自己的自动加载器或在代码中直接引入所需文件。

使用方法

首先,在 https://www.google.com/recaptcha/admin 获取您要集成的 reCAPTCHA 类型的适当密钥(对于 v2)或在 https://g.co/recaptcha/v3 获取 v3 的密钥。

然后,按照开发者网站上 集成指南 将 reCAPTCHA 功能添加到您的前端。

当您需要验证用户的响应时,此库就派上用场了。在 PHP 端,您需要从 reCAPTCHA 服务获取响应以及从您的凭据中获取密钥。使用您的密钥实例化 ReCaptcha 类,指定任何其他验证规则,然后使用 reCAPTCHA 响应和用户的 IP 地址调用 verify()。例如

<?php
$recaptcha = new \ReCaptcha\ReCaptcha($secret);
$resp = $recaptcha->setExpectedHostname('recaptcha-demo.appspot.com')
                  ->verify($gRecaptchaResponse, $remoteIp);
if ($resp->isSuccess()) {
    // Verified!
} else {
    $errors = $resp->getErrorCodes();
}

以下方法可用

  • setExpectedHostname($hostname):确保主机名匹配。如果您已禁用凭据的“域名/包名验证”,则必须这样做。
  • setExpectedApkPackageName($apkPackageName):如果您正在验证来自 Android 应用程序的响应。同样,如果您已禁用凭据的“域名/包名验证”,则必须这样做。
  • setExpectedAction($action):确保动作与 v3 API 匹配。
  • setScoreThreshold($threshold):为 v3 API 的响应设置分数阈值
  • setChallengeTimeout($timeoutSeconds):设置用户通过 reCAPTCHA 和您的服务器处理它之间的超时时间

set*()方法每次都返回ReCaptcha实例,因此您可以链式调用它们。例如

<?php
$recaptcha = new \ReCaptcha\ReCaptcha($secret);
$resp = $recaptcha->setExpectedHostname('recaptcha-demo.appspot.com')
                  ->setExpectedAction('homepage')
                  ->setScoreThreshold(0.5)
                  ->verify($gRecaptchaResponse, $remoteIp);

if ($resp->isSuccess()) {
    // Verified!
} else {
    $errors = $resp->getErrorCodes();
}

您可以在ReCaptcha类的常量中找到库的错误码常量,例如:ReCaptcha::E_HOSTNAME_MISMATCH

有关使用和结构详情,请参阅架构文档

示例

您可以在examples/中查看每种reCAPTCHA类型的示例。您可以通过使用Composer脚本来本地运行这些示例

composer run-script serve-examples

这利用了内置的PHP开发服务器,在https://:8080/上托管示例

这些示例还托管在Google AppEngine Flexible环境中,网址为https://recaptcha-demo.appspot.com/。这是通过app.yaml配置的,您也可以使用它来将代码部署到您自己的AppEngine项目中

贡献

工程师永远都不够用,所以我们非常乐意通过Pull Requests接受贡献。有关详情,请参阅贡献指南