sensson / laravel-moneybird
Moneybird
Fund package maintenance!
Sensson
Requires
- php: ^8.2
- illuminate/contracts: ^10.0||^11.0||^12.0
- saloonphp/laravel-plugin: ^3.0
- saloonphp/rate-limit-plugin: ^2.0
- saloonphp/saloon: ^3.0
- spatie/laravel-data: ^4.13
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- larastan/larastan: ^2.9||^3.0
- laravel/pint: ^1.14
- nunomaduro/collision: ^8.1.1||^7.10.0
- orchestra/testbench: ^10.0.0||^9.0.0||^8.22.0
- pestphp/pest: ^2.34|^3.7
- pestphp/pest-plugin-arch: ^2.7|^3
- pestphp/pest-plugin-laravel: ^2.3|^3.1
- phpstan/extension-installer: ^1.3||^2.0
- phpstan/phpstan-deprecation-rules: ^1.1||^2.0
- phpstan/phpstan-phpunit: ^1.3||^2.0
- spatie/laravel-ray: ^1.35
README
This package allows you to connect your Laravel application to the accounting software by Moneybird.
Installation
You can install the package via composer:
composer require sensson/laravel-moneybird
You can publish the config file with:
php artisan vendor:publish --tag="moneybird-config"
Usage
$moneybirdAdministrationId = '<your-administration-id>'; Moneybird::administration($moneybirdAdministrationId)->contacts()->all();
Authentication / OAuth2
You can use OAuth2 to authorize your application with Moneybird.
$moneybird = Moneybird::auth(); $url = $moneybird->getAuthorizationUrl(); session()->put('moneybird.state', $moneybird->getState()); return redirect()->to($url);
And process the callback from Moneybird:
$code = $request->string('code'); $state = $request->string('state'); $expected = session()->pull('moneybird.state'); $moneybird = Moneybird::auth(); $authorization = $moneybird->getAccessToken($code, $state, $expected); // Store the $authorization details with a user or team
Both would typically be done in a custom controller. You can use the
$authorization
to call the Moneybird API:
$auth = $this->moneybird_auth; if ($auth->hasExpired()) { $auth = Moneybird::auth()->make()->refreshAccessToken($auth); // Save new auth with the tenant or user } Moneybird::make()->authenticate($auth);
Resources
All resources are accessed through the Moneybird
facade using the pattern:
Moneybird::administration($administrationId)->resourceName()
Administrations
Get all administrations:
$administrations = Moneybird::administrations()->all();
Contacts
Get all contacts:
$administrationId = 'your-administration-id'; $contacts = Moneybird::administration($administrationId)->contacts()->all();
Get contacts with pagination and filters:
$contacts = Moneybird::administration($administrationId)->contacts()->all( perPage: 25, page: 1, query: 'search term', includeArchived: false, todo: 'todo filter' );
Get a specific contact:
$contact = Moneybird::administration($administrationId) ->contacts() ->get('contact-id');
Create a new contact:
$contact = new Contact([ 'company_name' => 'Example Company', 'firstname' => 'John', 'lastname' => 'Doe' ]); $createdContact = Moneybird::administration($administrationId) ->contacts() ->create($contact);
Update a contact:
$updatedContact = Moneybird::administration($administrationId) ->contacts() ->update('contact-id', $contact);
Custom Fields
Get all custom fields:
$administrationId = 'your-administration-id'; $customFields = Moneybird::administration($administrationId) ->customFields() ->all();
Ledgers
Get all ledgers:
$administrationId = 'your-administration-id'; $ledgers = Moneybird::administration($administrationId)->ledgers()->all();
Get a specific ledger:
$ledger = Moneybird::administration($administrationId) ->ledgers() ->get('ledger-id');
Create a new ledger:
$ledger = new Ledger([ 'name' => 'New Ledger', 'account_type' => AccountType::Expenses ]); $createdLedger = Moneybird::administration($administrationId) ->ledgers() ->create($ledger, 'rgs-code');
Update a ledger:
$updatedLedger = Moneybird::administration($administrationId) ->ledgers() ->update('ledger-id', $ledger, 'rgs-code');
Delete a ledger:
Moneybird::administration($administrationId) ->ledgers() ->delete('ledger-id');
Sales Invoices
Get all sales invoices:
$administrationId = 'your-administration-id'; $invoices = Moneybird::administration($administrationId) ->salesInvoices() ->all();
Get a specific sales invoice:
$invoice = Moneybird::administration($administrationId) ->salesInvoices() ->get('invoice-id');
Find invoice by invoice ID:
$invoice = Moneybird::administration($administrationId) ->salesInvoices() ->findByInvoiceId('2023-001');
Create a new sales invoice:
$invoice = new SalesInvoice([ 'contact_id' => 'contact-id', 'invoice_date' => '2023-12-01' ]); $createdInvoice = Moneybird::administration($administrationId) ->salesInvoices() ->create($invoice);
Update a sales invoice:
$updatedInvoice = Moneybird::administration($administrationId) ->salesInvoices() ->update('invoice-id', $invoice);
Delete a sales invoice:
Moneybird::administration($administrationId) ->salesInvoices() ->delete('invoice-id');
Download invoice as PDF:
$pdfContent = Moneybird::administration($administrationId) ->salesInvoices() ->downloadPdf('invoice-id');
Download invoice as UBL:
$ublContent = Moneybird::administration($administrationId) ->salesInvoices() ->downloadUbl('invoice-id');
Send invoice:
$sentInvoice = Moneybird::administration($administrationId) ->salesInvoices() ->send('invoice-id', DeliveryMethod::Email);
Tax Rates
Get all tax rates:
$administrationId = 'your-administration-id'; $taxRates = Moneybird::administration($administrationId)->taxRates()->all();
Get tax rates with pagination and filters:
$taxRates = Moneybird::administration($administrationId)->taxRates()->all( perPage: 25, page: 1, filter: 'active' );
Webhooks
Get all webhooks:
$administrationId = 'your-administration-id'; $webhooks = Moneybird::administration($administrationId)->webhooks()->all();
Create a new webhook:
$webhook = new Webhook([ 'url' => 'https://example.com/webhook', 'events' => [WebhookEvent::SalesInvoiceCreated] ]); $createdWebhook = Moneybird::administration($administrationId) ->webhooks() ->create($webhook);
Delete a webhook:
Moneybird::administration($administrationId) ->webhooks() ->delete('webhook-id');
Workflows
Get all workflows:
$administrationId = 'your-administration-id'; $workflows = Moneybird::administration($administrationId) ->workflows() ->all();
Testing
composer test
Changelog
Please see CHANGELOG for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
Credits
License
The MIT License (MIT). Please see License File for more information.