PHP code example of mfadul24 / kount-commerce

1. Go to this page and download the library: Download mfadul24/kount-commerce library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

mfadul24 / kount-commerce example snippets


use Kount\KountCommerceApi;
use Kount\Models\Components\OrderPostBody;
use Kount\Models\Components\Item;

$kount = KountCommerceApi::builder()
    ->setOAuth('your-client-id', 'your-client-secret')
    ->build();

$result = $kount->orders->evaluate(
    OrderPostBody::for('ORDER-4711')
        ->withDeviceSession($deviceSessionId) // unique for >= 30 days
        ->addItem(new Item(name: 'Widget', quantity: 2)),
    riskInquiry: true,
);

$decision = $result->order?->riskInquiry?->decision;   // enum: Approve | Decline | Review
$omniscore = $result->order?->riskInquiry?->omniscore; // float 0-99

$kount = KountCommerceApi::builder()
    ->setApiKey('bXktY2xpZW50LWlkOm15LWNsaWVudC1zZWNyZXQ=')
    ->build();

$kount = KountCommerceApi::builder()
    ->setApiKey($apiKey, tokenCache: new FilesystemAdapter())
    ->useSandbox()
    ->build();

use Kount\Auth\ClientCredentialsTokenProvider;

ClientCredentialsTokenProvider::fromApiKey($apiKey, $tokenUrl);                    // pre-encoded key
ClientCredentialsTokenProvider::fromClientCredentials($id, $secret, $tokenUrl);   // id + secret pair

use Symfony\Component\Cache\Adapter\FilesystemAdapter;

$kount = KountCommerceApi::builder()
    ->setOAuth('your-client-id', 'your-client-secret', tokenCache: new FilesystemAdapter())
    ->build();

use Symfony\Component\HttpClient\Psr18Client;
use Symfony\Component\HttpClient\HttpClient;

$kount = KountCommerceApi::builder()
    ->setClient(new Psr18Client(HttpClient::create(['timeout' => 10])))
    ->setOAuth('your-client-id', 'your-client-secret')
    ->build();

use Kount\Http\SensitiveDataRedactor;
use Psr\Http\Client\ClientInterface;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;

final class TracingClient implements ClientInterface
{
    public function __construct(
        private readonly ClientInterface $inner,
        private readonly YourTraceRecorder $recorder,
        private readonly SensitiveDataRedactor $redactor = new SensitiveDataRedactor(),
    ) {}

    public function sendRequest(RequestInterface $request): ResponseInterface
    {
        $requestBody = (string) $request->getBody(); // (string) rewinds a seekable stream

        $start = microtime(true);
        $response = $this->inner->sendRequest($request);
        $durationSeconds = microtime(true) - $start;

        $this->recorder->record(
            method: $request->getMethod(),
            uri: (string) $request->getUri(),
            requestHeaders: $this->redactor->redactHeaders($request->getHeaders()),
            requestBody: $this->redactor->redactBody($requestBody),
            statusCode: $response->getStatusCode(),
            responseBody: $this->redactor->redactBody((string) $response->getBody()),
            durationSeconds: $durationSeconds,
        );

        return $response;
    }
}

$kount = KountCommerceApi::builder()
    ->setClient(new TracingClient($inner, $recorder))
    ->setOAuth('your-client-id', 'your-client-secret')
    ->build();

$kount = KountCommerceApi::builder()
    ->setOAuth('sandbox-client-id', 'sandbox-client-secret')
    ->useSandbox()
    ->build();

use Kount\Exception\ApiException;
use Kount\Exception\KountException;

try {
    $result = $kount->orders->evaluate($body);
} catch (ApiException $e) {
    $log->warning('Kount rejected the call', [
        'status' => $e->statusCode,
        'correlationId' => $e->errorDetails?->correlationId,
        'rpcMessage' => $e->rpcStatus?->message,
    ]);
} catch (KountException $e) {
    // transport / auth / decoding problems
}

use Kount\Legacy\Inquiry;
use Kount\Legacy\RisClient;

$ris = new RisClient($kount);

$response = $ris->process(
    (new Inquiry())
        ->setSessionId($deviceSessionId)
        ->setOrderNumber('ORDER-4711')
        ->setEmail('[email protected]')
        ->setTotal(1999)          // cents, as in legacy RIS
        ->setCurrency('EUR'),
);

$response->getDecision();  // 'A' | 'D' | 'R'
$response->getOmniscore(); // float