用于与ThisData API交互的PHP客户端。

v0.2.0 2016-10-26 23:11 UTC

README

使用此客户端消费ThisData.com的REST API。需要至少PHP5.5。

安装

使用composer

composer require thisdata/api

快速开始

使用工厂返回配置为默认设置的ThisData\Api\ThisData实例。

use ThisData\Api\ThisData;

$apiKey = '<API_KEY>';

$thisData = ThisData::create($apiKey);

⚠️ 不要将API密钥提交到源代码控制!请使用环境变量,或者您可能有一个配置解决方案,允许您在本地配置中存储秘密而不共享。

每个端点将根据端点提供的功能具有不同的方法。例如,事件端点可以跟踪成功的登录尝试。

API文档

API端点的文档可以在此找到

跟踪事件

使用$thisData实例获取事件端点的实例。

$endpoint = $thisData->getEventsEndpoint();

然后跟踪事件

$ip = $_SERVER['REMOTE_ADDR'];
$user = [
    'id' => 'johntitor',
    'name' => 'John Titor',
    'email' => 'john.titor@thisdata.com',
    'mobile' => '+64270000001'
];
$userAgent = $_SERVER['HTTP_USER_AGENT'];

$endpoint->trackLogIn($ip, $user, $userAgent);

$verb = 'my-custom-verb';
$endpoint->trackEvent($verb, $ip, $user, $userAgent);

当登录尝试失败时

$ip = $_SERVER['REMOTE_ADDR'];
$user = [
    'id' => 'johntitor',
    'authenticated' => false
];
$userAgent = $_SERVER['HTTP_USER_AGENT'];
$endpoint->trackEvent(EventsEndpoint::VERB_LOG_IN_DENIED, $ip, $user, $userAgent);

当您使用多租户应用程序时

$ip = $_SERVER['REMOTE_ADDR'];
$user = [
    'id' => 'johntitor'
];
$userAgent = $_SERVER['HTTP_USER_AGENT'];
$source = [
    'name' => 'SubCustomer 1'
]
$endpoint->trackLogIn($ip, $user, $userAgent, $source);

验证用户

当即将发生敏感操作时,例如在完成登录过程之前,您可以验证用户是否是他们所说的那个人,并检查其账户被攻击者冒充的风险。如果他们呈现中等或高风险,则强制他们提供双因素认证代码。

$endpoint = $thisData->getVerifyEndpoint();

$ip = $_SERVER['REMOTE_ADDR'];
$user = [
    'id' => 'johntitor'
];
$userAgent = $_SERVER['HTTP_USER_AGENT'];

$response = $endpoint->verify($ip, $user, $userAgent);

if ($response['risk_level'] != "green") {
    # Ask for Two Factor Authentication code
} else {
    # Everything is OK
}

获取事件列表(审计日志)

您可以从API获取分页、可过滤的事件数组。该方法接受任何在文档中描述的参数:http://help.thisdata.com/docs/v1getevents

例如,返回用户最近的10个登录事件

$endpoint = $thisData->getEventsEndpoint();
$events = $endpoint->getEvents(["verb" => "log-in", "user_id" => 112233, "limit" => 10]);

高级

有几个配置选项可以修改库的行为方式。通过使用Builder,您可以设置这些配置选项。

use ThisData\Api\Builder;
$builder = new Builder($apiKey);

// Configure the builder here. See below for more details.
// ...
// e.g. $builder->setAsync(false);
// $builder->setExpectJsCookie(true);
// ...

$thisData = $builder->build();

同步请求

默认情况下,请求是异步发送到服务器的。如果不需要此操作,或者更喜欢同步通信,则配置Builder以使用同步请求。

$builder->setAsync(false);

ThisData的JavaScript库

ThisData的JavaScript跟踪代码是可选的,但如果包含在页面中,将添加一个名为__tdli的cookie。如果您正在使用可选的JavaScript库,此库将自动获取该cookie。您还应该告诉API每个请求都应包含一个cookie

$builder->setExpectJsCookie(true);

网络配置

如果您需要更多控制网络设置,例如使用代理,则在构建时配置客户端设置。

$builder->setClientOption('proxy', 'tcp://:8125');

如果您想看到HTTP请求的详细输出,请在Guzzle中启用调试模式。

$builder->setClientOption('debug', true);

此处可以配置Guzzle HTTP客户端支持的所有设置,包括curl选项

直接访问HTTP客户端

如果您需要直接与Guzzle HTTP客户端交互以发送自定义请求,则可以从端点检索配置的实例。

/** @var GuzzleHttp\Client $guzzle */
$guzzle = $events->getClient();

或者,您可以手动实例化客户端,而无需添加端点抽象层。

$client = new ThisData\Api\Client('<API_KEY>'); // An extension of the GuzzleHttp\Client class
$client->post('events', ['body' => '{"ip":"127.0.0.1"}']);

贡献

感谢您的帮助!首先,通过派生存储库开始。然后确保测试通过。

composer install
./vendor/bin/phpunit

进行您的更改,添加测试覆盖率,并检查测试是否仍然通过。然后提交一个PR!:)