Package Data | |
---|---|
Maintainer Username: | daursu |
Maintainer Contact: | dan@computerassistance.uk.com (Dan Ursu) |
Package Create Date: | 2014-11-06 |
Package Last Update: | 2015-10-06 |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2024-11-22 15:02:55 |
Package Statistics | |
---|---|
Total Downloads: | 299 |
Monthly Downloads: | 1 |
Daily Downloads: | 0 |
Total Stars: | 2 |
Total Watchers: | 5 |
Total Forks: | 8 |
Total Open Issues: | 4 |
This is a wrapper for the official Xero API php library, found at: https://github.com/XeroAPI/XeroOAuth-PHP
Note: I have not implemented the entire API, instead I have created the core logic which can then be extended (see the examples below).
I have tested the library only with a Private app, but it should work for the others.
Using composer simply add this to your composer.json file:
"require": {
"daursu/xero": "dev-master"
}
Use composer to install this package.
$ composer update
Register the service provider within the providers
array found in app/config/app.php
:
'providers' => array(
// ...
'Daursu\Xero\XeroServiceProvider',
)
php artisan config:publish daursu/xero
This should create a new file in app/config/packages/daursu/xero/config.php
. Update this file with your own settings and API key.
There is also a folder called certs
, where I recommend you to put your certificates.
Here is a guide how to generate your public/private key http://developer.xero.com/documentation/advanced-docs/public-private-keypair/
The syntax is very simillar to the Laravel Eloquent one.
use \Daursu\Xero\Models\Invoice;
use \Daursu\Xero\Models\Contact;
// Retrieve all the invoices
$invoices = Invoice::get();
foreach ($invoices as $invoice) {
print_r($invoice->toArray());
print_r($invoice->getId());
print_r($invoice->InvoiceID);
}
// Retrive a single invoice
$invoice = Invoice::find("0263f2bd-5825-476b-b6cf-6b76896a8cff");
var_dump($invoice);
// The get method also takes additional parameters
$contact = Contact::get(array('where' => 'Name.Contains("Dan")'));
This is pretty straight forward as well.
use \Daursu\Xero\Models\Invoice;
use \Daursu\Xero\Models\Contact;
// Initialize from an array
$invoice = new Invoice(array(
'Type' => 'ACCREC',
'Status' => 'DRAFT',
'Date' => date('Y-m-d'),
...
));
// Now you will need to attach a contact to the invoice
// Note that this time I am not passing an array to the constructor,
// this is just another way you can initialize objects
$contact = new Contact();
$contact->Name = "John Smith";
// Now you can assign it like this
$invoice->Contact = $contact;
// or
$invoice->setRelationship($contact);
// Save the invoice
$invoice->save(); // returns true or false
// Other methods
$invoice->update();
$invoice->create();
print_r($invoice->toArray()); // should have all the properties populated once it comes back from Xero
Collections are used when you need to specify multiple relationships (ie. A contact might have multiple addresses.
use \Daursu\Xero\Models\Contact;
use \Daursu\Xero\Models\Address;
$contact = new Contact;
$contact->name = "John";
// IMPORTANT: A collection can only contain a single type of model
// in this case it can only hold addresses.
$collection = Address::newCollection(array(
array('AddressType' => 'NEW', 'AddressLine1' => 'Cambridge', 'AddressLine2' => 'England'),
array('AddressType' => 'OTHER', 'AddressLine1' => 'London', 'AddressLine2' => 'England'),
));
// Push an new item
$collection->push(array('AddressType' => 'STREET', 'AddressLine1' => 'Street', 'AddressLine2' => 'England'));
// Push an existing object
$address = new Address(array('AddressType' => 'OBJECT', 'AddressLine1' => 'Oxford', 'AddressLine2' => 'England'));
$collection->push($address);
// Now set the relationship
$contact->setRelationship($collection);
// Or like this
$contact->Addresses = $collection;
// Save the contact
$contact->save();
// You can output an object using different methods
$address->toArray();
$address->toJson();
$address->toXML();
I have not implemented all the models that Xero provides, however it is very easy to implement. Here is an example of adding a new model called CreditNote
.
// File CreditNote.php
<?php namespace Daursu\Xero\Models;
class CreditNote extends BaseModel {
/**
* The name of the primary column.
*
* @var string
*/
protected $primary_column = 'CreditNoteID';
}
That's it. You can now use it:
use \Daursu\Xero\Models\CreditNote;
use \Daursu\Xero\Models\Contact;
$creditNote = new CreditNote();
$creditNote->Type = 'ACCPAYCREDIT';
$creditNote->Contact = new Contact(array("Name"=> "John");
$creditNote->save();
// Create a collection of credit notes
$collection = CreditNote::newCollection();
$collection->push($creditNote);
Feel free to fork and send pull requests if you extend this library.
Credits go to the official Xero API library found at https://github.com/XeroAPI/XeroOAuth-PHP.
This code is licensed under the MIT license. Feel free to modify and distribute.
http://www.softwareassistance.net
http://www.computerassistance.uk.com