PHPackages                             ffogarasi/exact-php-client - 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. ffogarasi/exact-php-client

ActiveLibrary[API Development](/categories/api)

ffogarasi/exact-php-client
==========================

A PHP Client for the Exact API

v3.1.5(7y ago)09142MITPHPPHP &gt;=5.5.0

Since Nov 4Pushed 4y ago1 watchersCompare

[ Source](https://github.com/ffogarasi/exact-php-client)[ Packagist](https://packagist.org/packages/ffogarasi/exact-php-client)[ Docs](http://github.com/ffogarasi/exact-php-client)[ RSS](/packages/ffogarasi-exact-php-client/feed)WikiDiscussions master Synced 4w ago

READMEChangelogDependencies (1)Versions (45)Used By (0)

exact-php-client
================

[](#exact-php-client)

PHP client library to use the Exact Online API.

Note: For Guzzle 6 use v2, for Guzzle 3 use v1.

Composer install
----------------

[](#composer-install)

Installing this Exact client for PHP can be done through Composer.

```
composer require picqer/exact-php-client

```

Usage
-----

[](#usage)

1. Set up app at Exact App Center to retrieve credentials
2. Authorize the integration from your app
3. Parse callback and finish connection set up
4. Use the library to do stuff

Steps 1 - 3 are only required once on set up.

### Set up app at Exact App Center to retrieve credentials

[](#set-up-app-at-exact-app-center-to-retrieve-credentials)

Set up an App at the Exact App Center to retrieve your `Client ID` and `Client Secret`. You will also need to set the correct `Callback URL` for the oAuth dance to work.

### Authorize the integration from your app

[](#authorize-the-integration-from-your-app)

The code below is an example `authorize()` function.

```
$connection = new \Picqer\Financials\Exact\Connection();
$connection->setRedirectUrl('CALLBACK_URL'); // Same as entered online in the App Center
$connection->setExactClientId('CLIENT_ID');
$connection->setExactClientSecret('CLIENT_SECRET');
$connection->redirectForAuthorization();
```

This will redirect the user to Exact to login and authorize your integration with their account.

### Parse callback and finish connection set up

[](#parse-callback-and-finish-connection-set-up)

Exact will redirect back to the `callback url` you provided. The callback will receive a `code` param. This is the authorization code for oAuth. Store this code.

Make a new connection to Exact so the library can exchange codes and fetch the `accesstoken` and `refreshtoken`. The `accesstoken` is a temporary token which allows for communication between your app and Exact. The `refreshtoken` is a token which is used to get a new `accesstoken` which also refreshes the `refreshtoken`. The library will settle all of this for you. The code below could be an general `connect()` function, which returns the api connection.

```
$connection = new \Picqer\Financials\Exact\Connection();
$connection->setRedirectUrl('CALLBACK_URL');
$connection->setExactClientId('CLIENT_ID');
$connection->setExactClientSecret('CLIENT_SECRET');

if (getValue('authorizationcode')) // Retrieves authorizationcode from database
	$connection->setAuthorizationCode(getValue('authorizationcode'));

if (getValue('accesstoken')) // Retrieves accesstoken from database
	$connection->setAccessToken(unserialize(getValue('accesstoken')));

if (getValue('refreshtoken')) // Retrieves refreshtoken from database
	$connection->setRefreshToken(getValue('refreshtoken'));

if (getValue('expires_in'))  // Retrieves expires timestamp from database
	$connection->setTokenExpires(getValue('expires_in'));

// Make the client connect and exchange tokens
try {
	$connection->connect();
} catch (\Exception $e)
{
	throw new Exception('Could not connect to Exact: ' . $e->getMessage());
}

// Save the new tokens for next connections
setValue('accesstoken', serialize($connection->getAccessToken()));
setValue('refreshtoken', $connection->getRefreshToken());

// Optionally, save the expiry-timestamp. This prevents exchanging valid tokens (ie. saves you some requests)
setValue('expires_in', $connection->getTokenExpires());
```

### About divisions (administrations)

[](#about-divisions-administrations)

By default the library will use the default administration of the user. This means that when the user switches administrations in Exact Online. The library will also start working with this administration.

### Use the library to do stuff (examples)

[](#use-the-library-to-do-stuff-examples)

```
// Optionally set administration, otherwise use the current administration of the user
$connection->setDivision(123456);

// Create a new account
$account = new Account($connection);
$account->AddressLine1 = $customer['address'];
$account->AddressLine2 = $customer['address2'];
$account->City = $customer['city'];
$account->Code = $customer['customerid'];
$account->Country = $customer['country'];
$account->IsSales = 'true';
$account->Name = $customer['name'];
$account->Postcode = $customer['zipcode'];
$account->Status = 'C';
$account->save();

// Add a product in Exact
$item = new Item($connection);
$item->Code = $productcode;
$item->CostPriceStandard = $costprice;
$item->Description = $name;
$item->IsSalesItem = true;
$item->SalesVatCode = 'VH';
$item->save();

// Retrieve an item
$item = new Item($connection);
$item->find(ID);

// List items
$item = new Item($connection);
$item->get();

// List items with filter (using a filter always returns a collection)
$item = new Item($connection);
$items = $item->filter("Code eq '$productcode'"); // Uses filters as described in Exact API docs (odata filters)

// Create new invoice with invoice lines
$items[] = [
	'Item'      => $itemId,
	'Quantity'  => $orderproduct['amount'],
	'UnitPrice' => $orderproduct['price']
];

$salesInvoice = new SalesInvoice($this->connection());
$salesInvoice->InvoiceTo = $customer_code;
$salesInvoice->OrderedBy = $customer_code;
$salesInvoice->YourRef = $orderId;
$salesInvoice->SalesInvoiceLines = $items;
```

Connect to other Exact country than NL
--------------------------------------

[](#connect-to-other-exact-country-than-nl)

Choose the right base URL according to [Exact developers guide](https://developers.exactonline.com/#Exact%20Online%20sites.html)

```
