- Add siftscience/sift-php as a composer dependency
composer require siftscience/sift-php- Now
SiftClientwill be autoloaded into your project.
require'vendor/autoload.php';
$sift = newSiftClient([
'api_key' => 'my_api_key',
'account_id' => 'my_account_id'
]);
// or
Sift::setApiKey('my_api_key');
Sift::setAccountId('my_account_id');
$sift = newSiftClient();Download the latest release.
Extract into a folder in your project root named "sift-php".
Include
SiftClientin 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 = newSiftClient([ 'api_key' => 'my_api_key', 'account_id' => 'my_account_id' ]);
To learn more about the Events API visit our developer docs.
Optional Params
return_score::trueor:falsereturn_action::trueor:falsereturn_workflow_status::trueor:falsereturn_route_info::trueor:falseforce_workflow_run::trueor:falseinclude_score_percentiles::trueor:falsewarnings::trueor:falseabuse_types:["payment_abuse", "content_abuse", "content_abuse", "account_abuse", "legacy", "account_takeover"]
Here's an example that sends a $transaction event to Sift.
$sift = newSiftClient(['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,
]);$sift = newSiftClient(['api_key' => 'my_api_key', 'account_id' => 'my_account_id']);
$response = $sift->label('23056', [
'$is_bad' => true,
'$abuse_type' => 'promotion_abuse'
]);$sift = newSiftClient(['api_key' => 'my_api_key', 'account_id' => 'my_account_id']);
$response = $sift->unlabel('23056', ['abuse_type' => 'content_abuse']);$sift = newSiftClient(['api_key' => 'my_api_key', 'account_id' => 'my_account_id']);
$response = $sift->score('23056');
$response->body['scores']['payment_abuse']['score']; // => 0.030301357270181357$sift = newSiftClient(['api_key' => 'my_api_key', 'account_id' => 'my_account_id']);
$response = $sift->getWorkflowStatus('my_run_id');
$response->body['state']; // => "running"$sift = newSiftClient(['api_key' => 'my_api_key', 'account_id' => 'my_account_id']);
$response = $sift->getUserDecisions('example_user');
$response->body['decisions']['account_abuse']['decision']['id']; // => "ban_user"$sift = newSiftClient(['api_key' => 'my_api_key', 'account_id' => 'my_account_id']);
$response = $sift->getOrderDecisions('example_order');
$response->body['decisions']['payment_abuse']['decision']['id']; // => "ship_order"$sift = newSiftClient(['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"Optional Params
entity_type:userororderorsessionabuse_types:["payment_abuse", "content_abuse", "content_abuse", "account_abuse", "legacy", "account_takeover"]
$sift = newSiftClient(['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()$sift = newSiftClient(['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()$sift = newSiftClient(['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()$sift = newSiftClient(['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()$sift = newSiftClient(['api_key' => 'my_api_key', 'account_id' => 'my_account_id']);
$response = $sift->postWebhooks(["payload_type" => "ORDER_V1_0",
"status"=> "active",
"url"=> "https://example1.com/",
"enabled_events" => ['$create_order'],
"name"=> "My webhook name",
"description"=> "This is a webhook!"]);
$response->isOk()$sift = newSiftClient(['api_key' => 'my_api_key', 'account_id' => 'my_account_id']);
$response = $sift->retrieveWebhook('webhook_id');
$response->isOk()$sift = newSiftClient(['api_key' => 'my_api_key', 'account_id' => 'my_account_id']);
$response = $sift->listAllWebhooks();
$response->isOk()$sift = newSiftClient(['api_key' => 'my_api_key', 'account_id' => 'my_account_id']);
$response = $sift->updateWebhook('webhook_id', ["payload_type" => "ORDER_V1_0",
"status"=> "active",
"url"=> "https://example1.com/",
"enabled_events" => ['$create_order'],
"name"=> "My webhook name update",
"description"=> "This is a webhook! update"]);
$response->isOk()$sift = newSiftClient(['api_key' => 'my_api_key', 'account_id' => 'my_account_id']);
$response = $sift->deleteWebhook('webhook_id');
$response->isOk()Run the tests from the project root with PHPUnit like this:
composer update
composer exec phpunit -v -- --bootstrap vendor/autoload.php testUpdate
composer.jsonto 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.
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.
Listen8081
...
LoadModule proxy_module .../mod_proxy.so
LoadModule proxy_http_module .../mod_proxy_http.so
LoadModule ssl_module .../mod_ssl.so
<VirtualHostlocalhost:8081>
ServerName api.sift.com
SSLProxyEngineonSSLProxyVerify require
SSLProxyVerifyDepth3SSLProxyCACertificateFile ...
ProxyPass / https://api.sift.com/
</VirtualHost># Read more about nginx keepalive: https://www.nginx.com/blog/tuning-nginx/#keepaliveupstream sift {server api.sift.com:443;keepalive16;}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 = newSiftClient([
'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']],
]);For testing the app with real calls it is possible to run the integration testing app, it makes calls to almost all our public endpoints to make sure the library integrates well. At the moment, the app is run on every merge to master
- Add env variable
ACCOUNT_IDwith the valid account id - Add env variable
API_KEYwith the valid Api Key associated from the account - Run the following under the project root folder
# install the lib from the local source code
composer install -n
# run the app
php test_integration_app/main.php
MIT