jakreiter / recaptchaproxyable
reCAPTCHA客户端库,这是一个免费服务,可以保护网站免受垃圾邮件和滥用。
Requires
- php: >=5.5
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.2.20|^2.15
- php-coveralls/php-coveralls: ^2.1
- phpunit/phpunit: ^4.8.36|^5.7.27|^6.59|^7.5.11
README
reCAPTCHA是一个免费的CAPTCHA服务,可以保护网站免受垃圾邮件和滥用。这是一个PHP库,用于包装处理reCAPTCHA服务响应所需的服务器端验证步骤。此客户端支持v2和v3版本。
- reCAPTCHA: https://www.google.com/recaptcha
- 此仓库: https://github.com/google/recaptcha
- 托管演示: https://recaptcha-demo.appspot.com/
- 版本: 1.2.4
- 许可证: BSD,见LICENSE
安装
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版本或https://g.co/recaptcha/v3为v3版本获取您希望集成的reCAPTCHA类型的适当密钥。
然后,遵循开发者网站上的集成指南将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 项目中。
贡献
工程师永远都不够用,所以我们非常高兴接受通过拉取请求的贡献。有关详细信息,请参阅 贡献指南
代理支持
要通过代理向 Google 服务器发送请求,请添加环境变量 RECAPTCHA_PROXY,并包含代理地址和端口号。例如
RECAPTCHA_PROXY=192.168.1.100:3128
使用 CurlPost 请求方法。