All Projects → ameliaikeda → monzo-php

ameliaikeda / monzo-php

Licence: BSD-3-Clause license
PHP Library for use with https://monzo.com

Programming Languages

PHP
23972 projects - #3 most used programming language

Projects that are alternatives of or similar to monzo-php

Php Bitcoinrpc
Fully unit-tested Bitcoin JSON-RPC client based on GuzzleHttp.
Stars: ✭ 231 (+1055%)
Mutual labels:  api-client
auth
🔑 Laravel Authentication package with built-in two-factor (Authy) and social authentication (Socialite).
Stars: ✭ 39 (+95%)
Mutual labels:  socialite
pygoodwe
Python library for querying Goodwe API
Stars: ✭ 20 (+0%)
Mutual labels:  api-client
Coinapi Sdk
SDKs for CoinAPI
Stars: ✭ 238 (+1090%)
Mutual labels:  api-client
Httpie
As easy as /aitch-tee-tee-pie/ 🥧 Modern, user-friendly command-line HTTP client for the API era. JSON support, colors, sessions, downloads, plugins & more. https://twitter.com/httpie
Stars: ✭ 53,052 (+265160%)
Mutual labels:  api-client
dynamic-cli
A Modern, user-friendly command-line HTTP client for the API testing, and if you're stuck - Search and browse StackOverflow without leaving the CLI
Stars: ✭ 151 (+655%)
Mutual labels:  api-client
Getspatialdata
An R package 📦 making it easy to query, preview, download and preprocess multiple kinds of spatial data 🛰 via R. All beta.
Stars: ✭ 227 (+1035%)
Mutual labels:  api-client
crates io api
API client for crates.io, the Rust crate registry.
Stars: ✭ 51 (+155%)
Mutual labels:  api-client
laravel-socialiter
Automatically manage user persistence and resolution for any Laravel Socialite provider.
Stars: ✭ 43 (+115%)
Mutual labels:  socialite
cv4pve-api-php
Proxmox VE Client API for PHP
Stars: ✭ 45 (+125%)
Mutual labels:  api-client
Protoman
Postman for protobuf APIs
Stars: ✭ 241 (+1105%)
Mutual labels:  api-client
Notion Api
Unofficial Notion.so API
Stars: ✭ 250 (+1150%)
Mutual labels:  api-client
alpha-vantage-api
Alpha Vantage PHP Client
Stars: ✭ 57 (+185%)
Mutual labels:  api-client
Twitch
Interact with Twitch's API, chat, PubSub and subscribe to WebHooks.
Stars: ✭ 237 (+1085%)
Mutual labels:  api-client
go-json-spec-handler
Simple JSON API Spec Compatibility in Golang
Stars: ✭ 41 (+105%)
Mutual labels:  api-client
Datmusic
Search and download free music from VK.
Stars: ✭ 230 (+1050%)
Mutual labels:  api-client
samp-client
GTA SA-MP API client library for Python
Stars: ✭ 21 (+5%)
Mutual labels:  api-client
insomnia-workspace
An Insomnia Workspace for Alpaca API
Stars: ✭ 34 (+70%)
Mutual labels:  api-client
bionode-ncbi
Node.js module for working with the NCBI API (aka e-utils).
Stars: ✭ 66 (+230%)
Mutual labels:  api-client
rcites
📦 R package to access the CITES Speciesplus database
Stars: ✭ 12 (-40%)
Mutual labels:  api-client

Monzo PHP Client

This library allows access to the Monzo API in PHP. This library requires PHP 7.1+.

Installation

composer require amelia/monzo-php

If you don't already have your own access tokens from completing oauth yourself, you'll need to also composer require laravel/socialite.

You should set the following variables in your .env (or otherwise):

  • MONZO_CLIENT_ID
  • MONZO_CLIENT_SECRET
  • MONZO_REDIRECT_URI

You can create an application at https://developers.monzo.com.

Laravel integration

Amelia\Monzo\MonzoServiceProvider::class is registered automatically in Laravel 5.5.

A future version of this package will include automatic webhook handling per-user, and full automatic socialite integration.

The environment variables that control these will be:

  • MONZO_WEBHOOKS=true
  • MONZO_SOCIALITE=true

Socialite integration

To automatically add callbacks for socialite, this package provides an optional authentication system.

Caveat This assumes you are adding existing users to an app on monzo. If you are not doing this, you'll need to set up your own routes to create/manage users based on API responses from socialite.

First, add the MonzoCredentials trait to your Authenticatable user model.

<?php

namespace App;

use Amelia\Monzo\MonzoCredentials;
use Amelia\Monzo\Contracts\HasMonzoCredentials;
use Illuminate\Database\Eloquent\Model;

class User extends Model implements HasMonzoCredentials
{
    use MonzoCredentials;
}

This adds a bunch of setters/getters to your user model for handling monzo credentials.

You can customise the columns used by adding methods to your user model:

<?php

use Amelia\Monzo\MonzoCredentials;
use Amelia\Monzo\Contracts\HasMonzoCredentials;

class User implements HasMonzoCredentials {
    
    use MonzoCredentials;
    
    protected function getMonzoAccessTokenColumn()
    {
        return 'monzo_access_token';
    }

    protected function getMonzoRefreshTokenColumn()
    {
        return 'monzo_refresh_token';
    }

    protected function getMonzoUserIdColumn()
    {
        return 'monzo_user_id';
    }
}

Socialite migrations

Assuming your users table is named users, you can simply run php artisan vendor:publish --tag=monzo.

This will create a migration in your migrations directory that can be edited.

Run php artisan migrate to run this.

Usage

Caveat If not using Laravel, you'll need to set up an instance of Amelia\Monzo\Monzo and inject an Amelia\Monzo\Contracts\Client instance into it, as follows:

<?php

$client = new Amelia\Monzo\Client(
    new GuzzleHttp\Client,
    getenv('MONZO_CLIENT_ID') ?: null,
    getenv('MONZO_CLIENT_SECRET') ?: null
);

$monzo = new Amelia\Monzo\Monzo($client);

// Amelia\Monzo\Monzo::setAccessToken($token) for single user mode

If using Laravel, you only need to inject Amelia\Monzo\Monzo via the service container, using resolve() or app().

Using the API is pretty simple.

In general, you'll need an access token or a user object.

Examples

Grab a user's accounts.

<?php

$user = User::findOrFail($id);

$accounts = $monzo->as($user)->accounts();

Grab the last 100 transactions for a user account

<?php

$user = User::findOrFail($id);

$transactions = $monzo->as($user)->transactions('acc_12341243');

Grab the last 100 transactions for a user's default account

<?php

$user = User::findOrFail($id);

// will query accounts first, then use the default to query transactions.
$transactions = $monzo->as($user)->transactions();

Grab a paginator instance for a user's transactions

<?php

$user = User::findOrFail($id);

$transactions = $monzo->as($user)->paginate(50)->transactions('acc_12341243');

Expand (and hydrate) relations in the API

<?php

$user = User::findOrFail($id);

$transactions = $monzo->as($user)
    ->paginate(50)
    ->expand('account')
    ->transactions('acc_12341243');

See a user's balance

<?php

$user = User::findOrFail($id);

$balance = $monzo->as($user)->balance();
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].