toskadv/recaptcha

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

v2.2.1 2020-01-09 12:55 UTC

This package is auto-updated.

Last update: 2024-09-09 23:41:38 UTC


README

这是Google PHP ReCAPTCHA客户端的一个分支,允许您传递cURL选项,例如通过Tor代理请求。

$curl = new ReCaptcha\RequestMethod\CurlPost(null, null, [
    CURLOPT_PROXY => 'http://127.0.0.1:9050/',
    CURLOPT_PROXYTYPE => CURLPROXY_SOCKS5
]);
$recaptcha = new \ReCaptcha\ReCaptcha($secret, $curl);
$resp = $recaptcha->verify($gRecaptchaResponse, $remoteIp);
if ($resp->isSuccess()) {
    // verified!
} else {
    $errors = $resp->getErrorCodes();
}

reCAPTCHA PHP客户端库

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为v2 reCAPTCHA获取适当的密钥或在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 弹性环境中,地址为 https://recaptcha-demo.appspot.com/。这是通过 app.yaml 配置的,您也可以使用它来 部署到您自己的 AppEngine 项目

贡献

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