crowdhandler / sdk
一个用于与CrowdHandler交互的PHP库
Requires
- php: >= 5.3
- ext-curl: *
- ext-json: *
This package is not auto-updated.
Last update: 2024-09-25 05:43:18 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