siftscience / sift-php
Sift Science PHP library
Installs: 2 163 959
Dependents: 5
Suggesters: 0
Security: 0
Stars: 20
Watchers: 88
Forks: 35
Open Issues: 4
Requires
- php: >=7.1.0
- ext-json: *
Requires (Dev)
- phpunit/phpunit: 7.*
- dev-master
- 4.8.0
- 4.7.0
- 4.6.0
- 4.5.1
- 4.5.0
- 4.4.0
- 4.3.1
- 4.3.0
- 4.2.0
- 4.1.0
- 4.0.1
- 4.0.0
- 3.3.0
- 3.0.1
- 3.0.0
- 2.2.0
- 2.1.1
- 2.1.0
- 2.0.1
- 2.0.0
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.1.0
- 1.0.4
- v1.0.3
- v1.0.2
- 1.0.0
- dev-test
- dev-CI-15481-sift-php
- dev-release-4.7.0
- dev-API-7365-ci-for-testing-app
- dev-release-4.6.0
- dev-release-4.5.1
- dev-release-4.5.0
- dev-release-4.4.0
- dev-MSUE-168-pr-template
- dev-abarabash/test
- dev-CI-10268-build-failure
- dev-API-6557_composer
- dev-API-6557
- dev-dehrmann_codesniffer
This package is auto-updated.
Last update: 2024-10-21 21:17:20 UTC
README
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
To learn more about the Events API visit our developer docs.
Optional Params
return_score
::true
or:false
return_action
::true
or:false
return_workflow_status
::true
or:false
return_route_info
::true
or:false
force_workflow_run
::true
or:false
include_score_percentiles
::true
or:false
warnings
::true
or:false
abuse_types
:["payment_abuse", "content_abuse", "content_abuse", "account_abuse", "legacy", "account_takeover"]
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()
Creates a new webhook with a specified URL.
$sift = new SiftClient(['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()
Retrieves a webhook when given an ID.
$sift = new SiftClient(['api_key' => 'my_api_key', 'account_id' => 'my_account_id']); $response = $sift->retrieveWebhook('webhook_id'); $response->isOk()
List All Webhooks
$sift = new SiftClient(['api_key' => 'my_api_key', 'account_id' => 'my_account_id']); $response = $sift->listAllWebhooks(); $response->isOk()
Update a Webhook
$sift = new SiftClient(['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()
Deletes a webhook when given an ID.
$sift = new SiftClient(['api_key' => 'my_api_key', 'account_id' => 'my_account_id']); $response = $sift->deleteWebhook('webhook_id'); $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']], ]);
Integration testing app
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
How to run it locally
- Add env variable
ACCOUNT_ID
with the valid account id - Add env variable
API_KEY
with 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
License
MIT