API Client for Fenerum
Installation
You can install the package via composer:
composer require napp/fenerum-api-clientInstallation
- Add to
.env- Fenerum API Token and a user/pass combo to allow Fenerum to post webhook events.
FENERUM_API_TOKEN=
FENERUM_AUTH_USERNAME=myuser
FENERUM_AUTH_PASSWORD=mypass- add FenerumServiceProvider to config/app.php
[
...
\Fenerum\FenerumServiceProvider::class,
...
]- Add route to receive webhooks
Route::post('my-webhook-url', '\Fenerum\Webhooks\Http\Controllers\WebhookController@handle');- Register events in app/Providers/EventServiceProvider
AccountCreated::class => [
MyAccountCreatedListener::class
],
AccountUpdated::class => [
MyAccountUpdatedListener::class
],
CancelSubscription::class => [
MyCancelSubscriptionListener::class
],Webhook Events supported
- AccountCreated
- AccountUpdated
- CancelSubscription
- NewActivity
- NewInvoice
- PaidInvoice
- PlanTermsCreated
- PlanTermsUpdated
- RenewSubscriptionSoon
Usage
// use DI to resolve dependencies
$accounts = app(\Fenerum\ApiService::class)->account();
// or without DI
$client = new \Fenerum\ApiClient();
$fenerum = new \Fenerum\ApiService($client);
$accounts = $fenerum->account();Examples
Get accounts
use Fenerum\ApiService;
$accounts = app(ApiService::class)->account()->listAccounts();Update Subscription - User Seats
// find account with id "1234"
$myAccount = $fenerum->account()->getAccount('1234');
// get the first subscription
$subId = $myAccount['subscription_set'][0]['uuid'];
// update subscription user seat count
$updatedSubscription = $fenerum->subscription()->updateSubscription([
'quantity' => 59
], $subId);Create account and add subscription (simple version)
/** @var \Fenerum\ApiService $fenerum */
$fenerum = app(\Fenerum\ApiService::class);
$localAccountCode = '12345678';
$planTermId = 'c82a888e-2149-4b3c-8e14-ff5086e49417';
// create an account
$fenerum->account()->createAccount([
'company_name' => 'Foo Bar Inc',
'code' => $localAccountCode,
'legal_address' => 'Road 123',
'legal_zipcode' => '90210',
'legal_city' => 'Hollywood',
'legal_country' => 'US',
'billing_same_as_legal' => true,
'language' => 'en',
'legal_vat_number' => 'US22223344',
]);
// add subscription to the account
$result = $fenerum->subscription()->createSubscription([
'account' => $localAccountCode,
'terms' => $planTermId,
'collection_method' => 'invoice',
'start_date' => now()->endOfMonth()->toIso8601String(),
'payment_terms' => 14
]);Create account and add recipient, contract, discount and a subscription (advanced version)
/** @var \Fenerum\ApiService $fenerum */
$fenerum = app(\Fenerum\ApiService::class);
$localAccountCode = '12345678';
$planTermId = 'c82a888e-2149-4b3c-8e14-ff5086e49417';
// create an account
$account = $fenerum->account()->createAccount([
'company_name' => 'Foo Bar Inc',
'code' => $localAccountCode,
'legal_address' => 'Road 123',
'legal_zipcode' => '90210',
'legal_city' => 'Hollywood',
'legal_country' => 'US',
'billing_same_as_legal' => true,
'language' => 'en',
'legal_vat_number' => 'US22223344',
]);
// create a recipient
$fenerum->recipient()->createRecipient([
'account' => $account['uuid'],
'name' => 'John Doe',
'email' => 'john@doe.com',
'receive_invoice' => true,
'receive_payment_confirmation' => true,
'receive_subscription_notifications' => true,
]);
// assign a 24 month contract to the account
$contract = $fenerum->contract()->createContract([
'plan_terms' => $planTermId,
'start_date' => now()->startOfDay()->toIso8601String(),
'commitment_length' => 24
], $localAccountCode);
// add 10% discounting
$fenerum->contractTier()->createContractTier([
'minimum_quantity' => 1,
'discount' => '10',
'discount_type' => 'percent',
], $localAccountCode, $contract['uuid']);
// add subscription to the account
$result = $fenerum->subscription()->createSubscription([
'account' => $localAccountCode,
'terms' => $planTermId,
'collection_method' => 'invoice',
'start_date' => now()->endOfMonth()->toIso8601String(),
'payment_terms' => 14
]);Download invoice
$invoice = app(\Fenerum\ApiService::class)
->invoice()
->getInvoice('24260f57-f190-4cfa-a2a0-d8a8d827bda8');
$filePath = public_path('invoice_'.$invoice['invoice_number'].'.pdf');
file_put_contents($filePath, base64_decode($invoice['pdf_base64']));
return response()->download($filePath)->deleteFileAfterSend(true);Changelog
Please see CHANGELOG for more information on what has changed recently.
Credits
License
The MIT License (MIT). Please see License File for more information.

Formed in 2009, the Archive Team (not to be confused with the archive.org Archive-It Team) is a rogue archivist collective dedicated to saving copies of rapidly dying or deleted websites for the sake of history and digital heritage. The group is 100% composed of volunteers and interested parties, and has expanded into a large amount of related projects for saving online and digital history.

