一个用于与CrowdHandler交互的PHP库

1.0.7 2022-12-23 10:16 UTC

README

用于与CrowdHandler公共和私有API交互的PHP SDK。提供检查和排队用户的广泛功能

实例化公共API客户端

$api = new CrowdHandler\PublicClient($yourPublicKey);

实例化一个新的门卫对象

请求细节隐式(经典PHP)

$gatekeeper = new CrowdHandler\GateKeeper($api);

门卫类是用于与用户请求和CrowdHandler API交互并采取适当行动的控制器。

使用PSR7请求

$request = new \Psr\Http\Message\ServerRequestInterface;
$gatekeeper = new CrowdHandler\GateKeeper($api, request);

默认情况下,门卫将检查超全局变量以获取URL、IP、代理等。但如果您愿意,或者您的框架更喜欢,您可以传递一个PSR请求。

选项

调试模式

$gatekeeper->setDebug(true);

将记录一些操作到PHP错误日志中,并且也会跳过重定向,这样您就可以在不被频繁重定向的情况下查看正在发生的事情。检查 $gatekeeper->getRedirectUrl() 来查看您将被重定向到何处。

忽略URL

$gatekeeper->setIgnoreUrls($regexp);

默认情况下,常见资产(png jpg等)将不被API检查,并自动升级。如果您愿意,可以传递自己的正则表达式。这将 覆盖 现有的RegExp,因此您可能需要根据需要包含资产。

故障转移等候室

$gatekeeper->setSafetyNetSlug('yourslug');

默认情况下,如果API调用失败,或收到畸形响应,您将被重定向到CrowdHandler的终极通配符等候室,直到API响应更多信息。如果您更喜欢在这种情况下将用户重定向到自己的、已知的、通配符等候室(推荐),您可以在此处设置slug。

走自己的路

$gatekeeper->setToken($_SESSION['token']);

默认情况下,门卫将检查并设置cookie以保留用户在您的网站上的CrowdHandler会话。如果您想以其他方式管理会话,您可以自己设置令牌。

IP检测出错?自己设置

$gatekeeper->setIP($_SERVER['X-MY-WEIRD-LOADBALANCER-FORWARDS-THE-REAL-IP-LIKE-THIS']);

跟踪用户的IP应该是简单的事情,但在负载均衡或云托管环境中,有时您会得到负载均衡器的IP而不是用户的IP。门卫尝试常见的模式来检测IP,包括常见的负载均衡器模式,但您可以明确设置以覆盖它,如果您的设置更特殊。跟踪IP的准确性很重要。如果同一个用户通过两个IP被跟踪,他们可能会被错误地阻止,或者同时被阻止和未被阻止,这取决于他们是在等待还是交易。

检查当前请求

$gatekeeper->checkRequest();

这是类的心脏。它查看用户的请求,与API进行交互,并检索一个结果,该结果指示用户是否应该被授予访问权限或被发送到等候室。

设置cookie

自动

我们自动设置cookie,以便用户在每个请求中都携带他们的令牌。

走自己的路

$_SESSION['ch-id'] = $gatekeeper->result->token;

如果您不想使用标准cookie,您可以自己处理。请注意,我们实际上不建议使用PHP会话来存储令牌,因为它通常在20分钟后超时。用户可能在等候室中待数小时,然后在新标签页中尝试点击您的网站上的url,这可能导致您向他们发出新的位置在队列的末尾。因此,会话或永久cookie通常更可取。

如果用户应该等待,则重定向用户

自动

$gatekeeper->redirectIfNotPromoted()

如果这个用户应该等待,他们将被发送到正确的等候室。您不需要进行条件检查。

自己动手做

if (!$gatekeeper->result->promoted) {
    header('location: '.$gatekeeper->getRedirectUrl(), 302);
    exit;    
}

如果您需要进行条件检查,这是您应该进行的检查,以及如何找到重定向URL的方法。

实例化私有API客户端

$api = new CrowdHandler\PrivateClient($yourPrivateKey);

获取对象数组

所有

$rs = $api->rooms->get();

带有参数

$rs = $api->rooms->get(['domainID'=>'dom_y0urk3y']);

迭代

foreach($rs as $room) print $room;

获取对象

$room = $api->rooms->get('room_your1d');

更新对象

$api->domains->put('dom_y0ur1d', ['rate'=>50, 'autotune'=>true]);

发布对象

$api->templates->post(['name'=>'My Template', 'url'=>'https://mysite.com/wait.html']);

删除对象

$api->groups->delete('grp_y0ur1d')

更多信息

知识库和API

https://support.crowdhandler.com

电子邮件

support@crowdhandler.com