PHPackages                             ixoplan/ixoplan-sdk - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. ixoplan/ixoplan-sdk

ActiveLibrary[API Development](/categories/api)

ixoplan/ixoplan-sdk
===================

Client library for Ixoplan APIs

1.0.52(4y ago)34004[1 PRs](https://github.com/ixoplan/ixoplan-sdk/pulls)4MITPHPCI failing

Since Feb 28Pushed 2y ago7 watchersCompare

[ Source](https://github.com/ixoplan/ixoplan-sdk)[ Packagist](https://packagist.org/packages/ixoplan/ixoplan-sdk)[ RSS](/packages/ixoplan-ixoplan-sdk/feed)WikiDiscussions master Synced 1w ago

READMEChangelogDependencies (9)Versions (55)Used By (4)

ixoplan-sdk
===========

[](#ixoplan-sdk)

PHP SDK for the Ixoplan API

Installation
------------

[](#installation)

Simply add `ixolit/ixoplan-sdk` and a provider of `ixolit/ixoplan-sdk-http` (e.g. ixolit/ixoplan-sdk-http-guzzle) to your composer.json, e.g:

```
{
    "name": "myvendor/myproject",
    "description": "Using ixoplan-sdk",
    "require": {
        "ixolit/ixoplan-sdk": "*",
        "ixolit/ixoplan-sdk-http-guzzle": "*"
    }
}
```

Usage
-----

[](#usage)

### Instantiate the Client

[](#instantiate-the-client)

The client is designed for different transport layers. It needs a RequestClient interface (e.g. HTTPRequestClient) to actually communicate with Ixoplan.

```
use Ixolit\Dislo\Client;
use Ixolit\Dislo\HTTP\Guzzle\GuzzleHTTPClientAdapter;
use Ixolit\Dislo\Request\HTTPRequestClient;

$httpAdapter = new GuzzleHTTPClientAdapter();

$httpClient = new HTTPRequestClient(
    $httpAdapter,
    $host,
    $apiKey,
    $apiSecret
);

$apiClient = new Client($httpClient);
```

Most methods related to user data can be used with either a user ID, a `\Ixolit\Dislo\WorkingObjects\User` object or an authentication token. However, the less secure options have to be requested explicitely by passing `$forceTokenMode = false` to the constructor. Don't use this option unless you really need it, e.g. for implementing administrative functionality.

### Login

[](#login)

Authenticate user, retrieve token and user data:

```
$apiClient = new \Ixolit\Dislo\Client($httpClient);

try {
    $authResponse = $apiClient->userAuthenticate(
        $userEmail,
        $password,
        $ipAddress
    );

    $authToken = $authResponse->getAuthToken();
    setcookie('authToken', $authToken);

    $user = $response->getUser();
    echo $user->getLastLoginDate();
}
catch (\Ixolit\Dislo\Exceptions\AuthenticationInvalidCredentialsException $e) {
    // invalid credentials
    echo $e->getMessage();
}
```

Get user from token:

```
$token = getcookie('authToken');

$apiClient = new \Ixolit\Dislo\Client($httpClient);

try {
    $user = $apiClient->userGet($token);
}
catch (\Ixolit\Dislo\Exceptions\InvalidTokenException $e) {
    // token invalid, e.g. expired
    setcookie('authToken', null, -1);
}
catch (\Ixolit\Dislo\Exceptions\DisloException $e) {
    // other, e.g. missing arguments
}
```

A token's expiry time is extended automatically on usage.

Verify a token, explicitly extend its expiry time and optionally change its lifetime:

```
$token = getcookie('authToken');

$apiClient = new \Ixolit\Dislo\Client($httpClient);

try {
    $response = $apiClient->userExtendToken($token, $ipAdress, 3600);
    $authToken = $response->getAuthToken();
    echo $authToken->getValidUntil()->format('c');
}
catch (\Ixolit\Dislo\Exceptions\InvalidTokenException $e) {
    // token invalid, e.g. expired
    setcookie('authToken', null, -1);
}
catch (\Ixolit\Dislo\Exceptions\DisloException $e) {
    // other, e.g. missing arguments
}
```

Deauthenticate:

```
$apiClient->userDeauthenticate($token);
setcookie('authToken', null, -1);
```

### Packages

[](#packages)

Retrieve a list of packages, optionally filtered by service ID:

```
$apiClient = new \Ixolit\Dislo\Client($httpClient);

$response = $apiClient->packagesList("1");

foreach ($response->getPackages() as $package) {
    echo $package->getDisplayNameForLanguage('en')->getName(), "\n";
}
```

### Subscriptions

[](#subscriptions)

Retrieve a list of subscriptions for a user:

```
$apiClient = new \Ixolit\Dislo\Client($httpClient);

$response = $apiClient->subscriptionGetAll($token);

foreach ($response->getSubscriptions() as $subscription) {
    print_r([
        'status' => $subscription->getStatus(),
        'active' => $subscription->isActive(),
        'startedAt' => $subscription->getStartedAt()->format('c'),
        'package' => $subscription->getCurrentPackage()->getDisplayNameForLanguage('en')->getName(),
        'price (EU)' => $subscription->getCurrentPeriod()->getBasePriceForCurrency('EUR')->getAmount(),
        'metaData' => $subscription->getProvisioningMetaData(),
    ]);
}
```

### Search API

[](#search-api)

Run a parametrized query against the search database in Ixoplan, pass a file resource to stream the returned data to.

```
$apiClient = new \Ixolit\Dislo\Client($httpClient);

$date = date('Y-m-d');
$file = fopen('/path/to/file', 'w');

$apiClient->exportStreamQuery(
    'select * from users where last_indexed_at > :_last(date)',
    ['last' => $date],
    $file
);
```

###  Health Score

37

—

LowBetter than 83% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity18

Limited adoption so far

Community23

Small or concentrated contributor base

Maturity77

Established project with proven stability

 Bus Factor2

2 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~34 days

Recently: every ~64 days

Total

53

Last Release

1588d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/46bbd588ed5a4fe4e764216167901bd3090692166b21872f0dc0a3bd757342bc?d=identicon)[friegler](/maintainers/friegler)

---

Top Contributors

[![mmarchewa](https://avatars.githubusercontent.com/u/24267522?v=4)](https://github.com/mmarchewa "mmarchewa (102 commits)")[![SPie](https://avatars.githubusercontent.com/u/2544853?v=4)](https://github.com/SPie "SPie (90 commits)")[![frieglerixo](https://avatars.githubusercontent.com/u/14271959?v=4)](https://github.com/frieglerixo "frieglerixo (8 commits)")[![rbreitschopfixo](https://avatars.githubusercontent.com/u/35692802?v=4)](https://github.com/rbreitschopfixo "rbreitschopfixo (3 commits)")[![doebi](https://avatars.githubusercontent.com/u/1591457?v=4)](https://github.com/doebi "doebi (2 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/ixoplan-ixoplan-sdk/health.svg)

```
[![Health](https://phpackages.com/badges/ixoplan-ixoplan-sdk/health.svg)](https://phpackages.com/packages/ixoplan-ixoplan-sdk)
```

###  Alternatives

[algolia/algoliasearch-client-php

API powering the features of Algolia.

69433.0M114](/packages/algolia-algoliasearch-client-php)[swisnl/json-api-client

A PHP package for mapping remote JSON:API resources to Eloquent like models and collections.

211473.2k12](/packages/swisnl-json-api-client)[php-heroku-client/php-heroku-client

A PHP client for the Heroku Platform API

24404.8k4](/packages/php-heroku-client-php-heroku-client)[yoti/yoti-php-sdk

Yoti SDK for quickly integrating your PHP backend with Yoti

27539.9k1](/packages/yoti-yoti-php-sdk)[trycourier/courier

Courier PHP SDK

16643.9k](/packages/trycourier-courier)[commercetools/commercetools-sdk

The official PHP SDK for the commercetools Composable Commerce APIs

19281.5k](/packages/commercetools-commercetools-sdk)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
