tests test coverage type coverage Latest Stable Version License
PHP: >= 8.1
Extensions:
composer:
composer require sysix/lex-office-api
Search for the official API Documentation.
You need an API Key for that.
// 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);
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::create(); $stack->push(new \Kevinrob\GuzzleCache\CacheMiddleware(), 'cache'); $stack->push(\Spatie\GuzzleRateLimiterMiddleware\RateLimiterMiddleware::perSecond(2)); $httpClient = \GuzzleHttp\Client(['handler' => $stack]); $api = new \Sysix\LexOffice\Api($apiKey, $httpClient);
/** @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);
$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);
$response = $api->country()->getAll();
$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
$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
$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
$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
$response = $api->event()->get($entityId); $response = $api->event()->create($data); $response = $api->event()->delete($entityId); $response = $api->event()->getAll();
$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)
$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)
$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
$response = $api->payment()->get($entityId);
$response = $api->paymentCondition()->getAll();
$response = $api->postingCategory()->getAll();
$response = $api->printLayout()->getAll();
$response = $api->profile()->get();
$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
$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);
$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);
$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);
// 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