Download the PHP package sdekkers/exact-php-client without Composer
On this page you can find all versions of the php package sdekkers/exact-php-client. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download sdekkers/exact-php-client
More information about sdekkers/exact-php-client
Files in sdekkers/exact-php-client
Package exact-php-client
Short Description A PHP Client for the Exact API
License MIT
Homepage http://github.com/picqer/exact-php-client
Informations about the package exact-php-client
exact-php-client
PHP client library to use the Exact Online API.
Note: For Guzzle 6 use v3, for Guzzle 3 use v1.
Direct link to Exact Online docs
https://support.exactonline.com/community/s/knowledge-base#All-All-DNO-Content-getting-started
Composer install
Installing this Exact client for PHP can be done through Composer.
Usage
- Set up app at Exact App Center to retrieve credentials
- Authorize the integration from your app
- Parse callback and finish connection set up
- 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 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
The code below is an example authorize()
function.
This will redirect the user to Exact to login and authorize your integration with their account.
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.
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.
Rate limits
Exact uses a minutely and daily rate limit. There are a maximum number of calls per day you can do per company, and to prevent bursting they have also implemented a limit per minute. This PR stores this information in the Connection
and adds methods to read the rate limits so you can handle these as appropriate for your app.
Exact documentation on rate limits is found here: https://support.exactonline.com/community/s/knowledge-base#All-All-DNO-Simulation-gen-apilimits
If you hit a rate limit, an ApiException
will be thrown with code 429. At that point you can determine whether you've hit the minutely or the daily limit. If you've hit the minutely limit, try again after 60 seconds. If you've hit the daily limit, try again after the daily reset.
You can use the following methods on the Connection
, which will return the limits after your first API call (based on the headers from Exact).
Use the library to do stuff (examples)
Connect to other Exact country than NL
Choose the right base URL according to Exact developers guide
Check src/Picqer/Financials/Exact for all available entities.
Webhooks
Managaging webhook subscriptions is possible through the WebhookSubscription entitiy.
For authenticating incoming webhook calls you can use the Authenticatable trait. Supply the authenticate method with the full JSON request and your Webhook secret supplied by Exact, it will return true or false.
Troubleshooting
'Picqer\Financials\Exact\ApiException' with message 'Error 400: Please add a $select or a $top=1 statement to the query string.'
In specific instances, sadly not documented in the API documentation of Exact this is a requirement. Probably to prevent overflooding requests. What you have to do when encountering this error is adding a select or top. The select is used to provide a list of fields you want to extract, the $top=1 limits the results to one item.
Examples:
Return only the EntryID and FinancialYear.
The $top=1 is added like this:
Authentication error
'Fatal error: Uncaught Exception: Could not connect to Exact: Client error:POST https://start.exactonline.nl/api/oauth2/token resulted in a 400 Bad Request response: Bad Request in /var/www/html/oauth_call_connect.php:61 Stack trace: #0 {main} thrown in /var/www/html/oauth_call_connect.php on line 61`'
This error occurs because the code you get in your redirect URL is only valid for one call. When you call the authentication-process again with a "used" code. You get this error. Make sure you use the provided code by Exact Online only once to get your access token.
Code example
See for example: example/example.php
TODO
- Current entities do not contain all available properties. Feel free to submit a PR with added or extended entities if you require them. Use the in greasemonkey or tampermonkey to generate entities consistently and completely.