clicksports / lex-office-api
Simple API Integration for Lexoffice
Installs: 45 660
Dependents: 0
Suggesters: 0
Security: 0
Stars: 22
Watchers: 6
Forks: 8
Open Issues: 0
Requires
- php: ^8.1
- ext-json: *
- guzzlehttp/psr7: ^2.0
- psr/http-client: ^1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.57
- guzzlehttp/guzzle: ^7.8
- phpstan/phpstan: ^1.11
- phpunit/phpunit: ^10.5
- psalm/plugin-phpunit: ^0.19
- vimeo/psalm: ^5.24
Suggests
README
Requirements
PHP: >= 8.1
Extensions:
Install
composer:
composer require sysix/lex-office-api
Usage
Search for the official API Documentation.
You need an API Key for that.
Basic
// store keys in .env file $apiKey = getenv('LEXOFFICE_API_KEY'); // in this example we are using guzzlehttp/guzzle package, it can be any PSR-18 HTTP Client // see: https://packagist.org/providers/psr/http-client-implementation $httpClient = \GuzzleHttp\Client(); $api = new \Sysix\LexOffice\Api($apiKey, $httpClient);
Optimize your HTTP Client
This library only prepares the \Psr\Http\Message\RequestInterface
for the HTTP Client and returns its Response.
There are almost no error checks, no caching and no rate limiting. Your PSR-18 HTTP Client should come with a way to deal with it.
Here is a example with guzzlehttp/guzzle
, kevinrob/guzzle-cache-middleware
and spatie/guzzle-rate-limiter-middleware
:
$apiKey = getenv('LEXOFFICE_API_KEY'); $stack = \GuzzleHttp\HandlerStack(); $stack->push(new \Kevinrob\GuzzleCache\CacheMiddleware\CacheMiddleware(), 'cache'); $stack->push(\Spatie\GuzzleRateLimiterMiddleware\RateLimiterMiddleware\RateLimiterMiddleware::perSecond(2)); $httpClient = \GuzzleHttp\Client(['handler' => $stack]); $api = new \Sysix\LexOffice\Api($apiKey, $httpClient);
Endpoints
Article Endpoint
/** @var \Sysix\LexOffice\Api $api */ $client = $api->article(); // filters $client->size = 100; $client->sortDirection = 'DESC'; $client->articleNumber = 'LXW-BUHA-2024-001'; $client->gtin = '9783648170632'; $client->type = 'PRODUCT'; // get a page $response = $client->getPage(0); // other methods $response = $client->get($entityId); $response = $client->create($data); $response = $client->update($entityId, $data); $response = $client->delete($entityId);
Contact Endpoint
$client = $api->contact(); // filters $client->size = 100; $client->email = 'john.doe@example.com'; $client->name = 'John Doe'; $client->number = 123456; $client->customer = true; $client->vendor = false; // get a page $response = $client->getPage(0); // other methods $response = $client->get($entityId); $response = $client->create($data); $response = $client->update($entityId, $data);
Country Endpoint
$response = $api->country()->getAll();
Credit Notes Endpoint
$voucherList = $api->creditNote()->getVoucherListClient(); // see VoucherlistClient Documentation $response = $api->creditNote()->get($entityId); $response = $api->creditNote()->create($data); $response = $api->creditNote()->create($data, true); // finalized $response = $api->creditNote()->pursue($precedingSalesVoucherId, $data); $response = $api->creditNote()->pursue($precedingSalesVoucherId, $data, true); // finalized $response = $api->creditNote()->document($entityId); // get document ID $response = $api->creditNote()->document($entityId, true); // get file content $response = $api->creditNote()->document($entityId, true, 'image/*'); // accept only images
Deliverys Notes Endpoint
$voucherList = $api->deliveryNote()->getVoucherListClient(); // see VoucherlistClient Documentation $response = $api->deliveryNote()->get($entityId); $response = $api->deliveryNote()->create($data); $response = $api->deliveryNote()->pursue($precedingSalesVoucherId, $data); $response = $api->deliveryNote()->document($entityId); // get document ID $response = $api->deliveryNote()->document($entityId, true); // get file content $response = $api->deliveryNote()->document($entityId, true, 'image/*'); // accept only images
Down Payment Invoices Endpoint
$voucherList = $api->downPaymentInvoice()->getVoucherListClient(); // see VoucherlistClient Documentation $response = $api->downPaymentInvoice()->get($entityId); $response = $api->downPaymentInvoice()->create($data); $response = $api->downPaymentInvoice()->document($entityId); // get document ID $response = $api->downPaymentInvoice()->document($entityId, true); // get file content $response = $api->downPaymentInvoice()->document($entityId, true, 'image/*'); // accept only images
Dunnings Endpoint
$response = $api->dunning()->get($entityId); $response = $api->dunning()->pursue($precedingSalesVoucherId, $data); $response = $api->dunning()->document($entityId); // get document ID $response = $api->dunning()->document($entityId, true); // get file content $response = $api->dunning()->document($entityId, true, 'image/*'); // accept only images
Event Subscriptions Endpooint
$response = $api->event()->get($entityId); $response = $api->event()->create($data); $response = $api->event()->delete($entityId); $response = $api->event()->getAll();
File Endpoint
$response = $api->file()->upload($filePath, $voucherType); $response = $api->file()->get($entityId); // accept every file $response = $api->file()->get($entityId, 'image/*'); // accept only images $response = $api->file()->get($entityId, 'application/xml'); // get XRechung XML File (if possible)
Invoices Endpoint
$voucherList = $api->invoice()->getVoucherListClient(); // see VoucherlistClient Documentation $response = $api->invoice()->get($entityId); $response = $api->invoice()->create($data); $response = $api->invoice()->create($data, true); // finalized $response = $api->invoice()->pursue($precedingSalesVoucherId, $data); $response = $api->invoice()->pursue($precedingSalesVoucherId, $data, true); // finalized $response = $api->invoice()->document($entityId); // get document ID $response = $api->invoice()->document($entityId, true); // get file content $response = $api->invoice()->document($entityId, true, 'image/*'); // accept only images $response = $api->invoice()->document($entityId, true, 'application/xml'); // get XRechung XML File (if possible)
Order Confirmation Endpoint
$voucherList = $api->orderConfirmation()->getVoucherListClient(); // see VoucherlistClient Documentation $response = $api->orderConfirmation()->get($entityId); $response = $api->orderConfirmation()->create($data); $response = $api->orderConfirmation()->pursue($precedingSalesVoucherId, $data); $response = $api->orderConfirmation()->document($entityId); // get document ID $response = $api->orderConfirmation()->document($entityId, true); // get file content $response = $api->orderConfirmation()->document($entityId, true, 'image/*'); // accept only images
Payment Endpoint
$response = $api->payment()->get($entityId);
Payment Conditions Endpoint
$response = $api->paymentCondition()->getAll();
Posting Categories Endpoint
$response = $api->postingCategory()->getAll();
Print Layouts Endpoint
$response = $api->printLayout()->getAll();
Profile Endpoint
$response = $api->profile()->get();
Quotation Endpoint
$voucherList = $api->quotation()->getVoucherListClient(); // see VoucherlistClient Documentation $response = $api->quotation()->get($entityId); $response = $api->quotation()->create($data); $response = $api->quotation()->create($data, true); // finalized $response = $api->quotation()->document($entityId); // get document ID $response = $api->quotation()->document($entityId, true); // get file content $response = $api->quotation()->document($entityId, true, 'image/*'); // accept only images
Recurring Templates Endpoint
$client = $api->recurringTemplate(); // filters $client->size = 100; $client->sortDirection = 'DESC'; $client->sortColumn = 'updatedDate'; // get a page $response = $client->getPage(0); // other methods $response = $api->recurringTemplate()->get($entityId);
Voucher Endpoint
$response = $api->voucher()->get($entityId); $response = $api->voucher()->create($data); $response = $api->voucher()->update($entityId, $data); $response = $api->voucher()->document($entityId); // get document ID $response = $api->voucher()->document($entityId, true); // get file content $response = $api->voucher()->document($entityId, true, 'image/*'); // accept only images $response = $api->voucher()->document($entityId, true, 'application/xml'); // get XRechung XML File (if possible) $response = $api->voucher()->upload($entitiyId, $filepath);
Voucherlist Endpoint
$client = $api->voucherlist(); $client->size = 100; $client->sortDirection = 'DESC'; $client->sortColumn = 'voucherNumber'; // filters required $client->types = [ 'salesinvoice', 'salescreditnote', 'purchaseinvoice', 'purchasecreditnote', 'invoice', 'downpaymentinvoice', 'creditnote', 'orderconfirmation', 'quotation' ]; $client->statuses = [ 'draft', 'open', 'paid', 'paidoff', 'voided', //'overdue', overdue can only be fetched alone 'accepted', 'rejected' ]; // filters optional $client->archived = true; $client->contactId = 'some-uuid-string'; $client->voucherDateFrom = new \DateTime('2023-12-01'); $client->voucherDateTo = new \DateTime('2023-12-01'); $client->createdDateFrom = new \DateTime('2023-12-01');; $client->createdDateTo = new \DateTime('2023-12-01'); $client->updatedDateFrom = new \DateTime('2023-12-01'); $client->updatedDateTo = new \DateTime('2023-12-01'); // get a page $response = $client->getPage(0);
Utils
get JSON from Success and Error Response
// can be possible null because the response body can be empty $json = \Sysix\LexOffice\Utils::getJsonFromResponse($response); // as object $json = \Sysix\LexOffice\Utils::getJsonFromResponse($response, true); // as associative array