Xero Accounting API Laravel 5 Wrapper
A Laravel 5 wrapper for calcinai/xero-php (a custom API for integrating with Xero)., (*1)
Installation via Composer
Require the package, (*2)
composer require byrontudhope/xerolaravel "1.0.*"
Publish the configuration file, (*3)
php artisan vendor:publish
This will create a xero/config.php
within your config
directory. (Note: Ensure that you have generated the
necessary tokens and have generated the RSA keys required by Xero for authentication.) Edit the relevant values in the
config.php
file., (*4)
Ensure that the location of the RSA keys matches the required format (file://absolutepath)
, (*5)
Add the Service Provider to your config/app.php
under providers
, (*6)
'ByronTudhope\XeroLaravel\Providers\XeroServiceProvider',
**Register the Facades within config/app.php
under aliases
, (*7)
'XeroPrivate'=> 'ByronTudhope\XeroLaravel\Facades\XeroPrivate',
Dependencies and Requirements
This Service Provider current wraps the calcinai/xero-php version 1.1.* package., (*8)
Additionally, you must have PHP installed with the following extensions:, (*9)
- php_curl (7.30+)
- php_openssl
Usage
There are two ways to use the classes: via the IoC container, or via a Facade. They both offer the same functionality, so use each
depending on your preference., (*10)
Get all invoices
Facade, (*11)
$invoices = XeroPrivate::load('Accounting\\Invoice')->execute();
IoC Container, (*12)
// Create an instance of the class, resolved out of the IoC container
$xero = $this->app->make('XeroPrivate');
$invoices = $xero->load('Accounting\\Invoice')->execute();
Get a single invoice via GUID or invoice number
Facade, (*13)
$invoice = XeroPrivate::loadByGUID('Accounting\\Invoice', 'inv-0004);
IoC Container, (*14)
$xero = $this->app->make('XeroPrivate');
$invoice = $xero->loadByGUID('Accounting\\Invoice', 'inv-0004);
Update an existing invoice
Facade, (*15)
$invoice = XeroPrivate::loadByGUID('Accounting\\Invoice', 'inv-0004);
$invoice->setStatus('Paid');
XeroPrivate::save($invoice);
IoC Container, (*16)
$xero = $this->app->make('XeroPrivate');
$invoice = $xero->loadByGUID('Accounting\\Invoice', 'inv-0004);
$invoice->setStatus('Paid');
$xero->save($invoice);
Creating a new invoice
/*
* Resolve instances of Xero, XeroInvoice, XeroContact
* and XeroInvoiceLine out of the IoC container.
*/
$xero = $this->app->make('XeroPrivate');
$invoice = $this->app->make('XeroInvoice');
$contact = $this->app->make('XeroContact');
$line1 = $this->app->make('XeroInvoiceLine');
$line2 = $this->app->make('XeroInvoiceLine');
// Set up the invoice contact
$contact->setAccountNumber('DMA01');
$contact->setContactStatus('ACTIVE');
$contact->setName('Amo Chohan');
$contact->setFirstName('Amo');
$contact->setLastName('Chohan');
$contact->setEmailAddress('amo.chohan@gmail.com');
$contact->setDefaultCurrency('GBP');
// Assign the contact to the invoice
$invoice->setContact($contact);
// Set the type of invoice being created (ACCREC / ACCPAY)
$invoice->setType('ACCREC');
$dateInstance = new DateTime();
$invoice->setDate($dateInstance);
$invoice->setDueDate($dateInstance);
$invoice->setInvoiceNumber('DMA-00001');
$invoice->setReference('DMA-00001');
// Provide an URL which can be linked to from Xero to view the full order
$invoice->setUrl('http://yourdomain/fullpathtotheorder');
$invoice->setCurrencyCode('GBP');
$invoice->setStatus('Draft');
// Create some order lines
$line1->setDescription('Blue tshirt');
$line1->setQuantity(1);
$line1->setUnitAmount(99.99);
$line1->setTaxAmount(0);
$line1->setLineAmount(99.99);
$line1->setDiscountRate(0); // Percentage
// Add the line to the order
$invoice->addLineItem($line1);
// Repeat for all lines...
$xero->save($invoice);
Creating Attachments
$xero = $this->app->make('XeroPrivate');
$attachment = $this->app->make('XeroAttachment')
->createFromLocalFile(storage_path('your_file.pdf'));
$invoice = $xero->loadByGUID('Accounting\\Invoice', 'AMO-00002');
$invoice->addAttachment($attachment);