Sift Bindings 
Installation
With Composer
- Add siftscience/sift-php as a composer dependency
composer require siftscience/sift-php
- Now
SiftClient
will be autoloaded into your project.
require 'vendor/autoload.php';
$sift = new SiftClient([
'api_key' => 'my_api_key',
'account_id' => 'my_account_id'
]);
// or
Sift::setApiKey('my_api_key');
Sift::setAccountId('my_account_id');
$sift = new SiftClient();
Manually
-
Download the latest release.
-
Extract into a folder in your project root named "sift-php".
-
Include
SiftClient
in your project like this:require 'sift-php/lib/SiftRequest.php'; require 'sift-php/lib/SiftResponse.php'; require 'sift-php/lib/SiftClient.php'; require 'sift-php/lib/Sift.php'; $sift = new SiftClient([ 'api_key' => 'my_api_key', 'account_id' => 'my_account_id' ]);
Usage
Track an event
Here's an example that sends a $transaction
event to sift.
$sift = new SiftClient(['api_key' => 'my_api_key', 'account_id' => 'my_account_id']);
$response = $sift->track('$transaction', [
'$user_id' => '23056',
'$user_email' => 'buyer@gmail.com',
'$seller_user_id' => '2371',
'$transaction_id' => '573050',
'$currency_code' => 'USD',
'$amount' => 15230000,
'$time' => 1327604222,
'seller_user_email' => 'seller@gmail.com',
'trip_time' => 930,
'distance_traveled' => 5.26,
]);
Label a user as good/bad
$sift = new SiftClient(['api_key' => 'my_api_key', 'account_id' => 'my_account_id']);
$response = $sift->label('23056', [
'$is_bad' => true,
'$abuse_type' => 'promotion_abuse'
]);
Unlabel a user
$sift = new SiftClient(['api_key' => 'my_api_key', 'account_id' => 'my_account_id']);
$response = $sift->unlabel('23056', ['abuse_type' => 'content_abuse']);
Get a user's score
$sift = new SiftClient(['api_key' => 'my_api_key', 'account_id' => 'my_account_id']);
$response = $sift->score('23056');
$response->body['scores']['payment_abuse']['score']; // => 0.030301357270181357
Get the status of a workflow run
$sift = new SiftClient(['api_key' => 'my_api_key', 'account_id' => 'my_account_id']);
$response = $sift->getWorkflowStatus('my_run_id');
$response->body['state']; // => "running"
Get the latest decisions for a user
$sift = new SiftClient(['api_key' => 'my_api_key', 'account_id' => 'my_account_id']);
$response = $sift->getUserDecisions('example_user');
$response->body['decisions']['account_abuse']['decision']['id']; // => "ban_user"
Get the latest decisions for an order
$sift = new SiftClient(['api_key' => 'my_api_key', 'account_id' => 'my_account_id']);
$response = $sift->getOrderDecisions('example_order');
$response->body['decisions']['payment_abuse']['decision']['id']; // => "ship_order"
Get the latest decisions for a session
$sift = new SiftClient(['api_key' => 'my_api_key', 'account_id' => 'my_account_id']);
$response = $sift->getSessionDecisions('example_user', 'example_session');
$response->body['decisions']['account_takeover']['decision']['id']; // => "session_decision"
List of configured Decisions
Optional Params
entity_type
:user
ororder
orsession
abuse_types
:["payment_abuse", "content_abuse", "content_abuse", "account_abuse", "legacy", "account_takeover"]
$sift = new SiftClient(['api_key' => 'my_api_key', 'account_id' => 'my_account_id']);
$response = $this->client->getDecisions(['entity_type' => 'example_entity_type','abuse_types' => 'example_abuse_types']);
$response->isOk()
Apply decision to a user
$sift = new SiftClient(['api_key' => 'my_api_key', 'account_id' => 'my_account_id']);
$response = $sift->applyDecisionToUser('example_user','example_decision','example_source',['analyst' => 'analyst@example.com']
$response->isOk()
Apply decision to an order
$sift = new SiftClient(['api_key' => 'my_api_key', 'account_id' => 'my_account_id']);
$response = $sift->applyDecisionToOrder('example_user','example_order','example_decision','example_source',['analyst' => 'analyst@example.com']
$response->isOk()
Apply decision to a session
$sift = new SiftClient(['api_key' => 'my_api_key', 'account_id' => 'my_account_id']);
$response = $sift->applyDecisionToSession('example_user','example_session','example_decision','example_source',['analyst' => 'analyst@example.com']
$response->isOk()
Contributing
Run the tests from the project root with PHPUnit like this:
composer update
composer exec phpunit -v -- --bootstrap vendor/autoload.php test
Updating Packagist
-
Update
composer.json
to reflect the new version, as well as any new requirements then merge changes into master. -
Create a new release with the version number and use it as the description. Packagist will automatically deploy a new package via the configured webhook.
HTTP connection pooling
You can substantially improve the performance of SiftClient
by using HTTP connection pooling.
Because standard PHP/fastcgi deployments don't have a mechanism for persisting connections between
requests, the easiest way to pool connections is by routing requests through a proxy like Apache httpd or nginx.
Listen 8081
...
LoadModule proxy_module .../mod_proxy.so
LoadModule proxy_http_module .../mod_proxy_http.so
LoadModule ssl_module .../mod_ssl.so
<VirtualHost localhost:8081>
ServerName api.sift.com
SSLProxyEngine on
SSLProxyVerify require
SSLProxyVerifyDepth 3
SSLProxyCACertificateFile ...
ProxyPass / https://api.sift.com/
</VirtualHost>
# Read more about nginx keepalive: https://www.nginx.com/blog/tuning-nginx/#keepalive
upstream sift {
server api.sift.com:443;
keepalive 16;
}
server {
listen localhost:8081;
server_name api.sift.com;
location / {
proxy_pass https://sift;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_ssl_verify on;
proxy_ssl_verify_depth 3;
proxy_ssl_trusted_certificate ...;
proxy_ssl_name api.sift.com;
proxy_ssl_server_name on;
}
}
For Debian-based distributions, the certificate file is /etc/ssl/certs/ca-certificates.crt
Then, instantiate SiftClient
to route requests through the proxy:
$sift = new SiftClient([
'api_key' => 'my_api_key',
'account_id' => 'my_account_id',
'api_endpoint' => 'http://api.sift.com',
'curl_opts' => [CURLOPT_CONNECT_TO => ['api.sift.com:80:localhost:8081']],
]);
License
MIT