willscottuk/monzo-php

Monzo银行(https://monzo.com)的API客户端

v0.12.3 2024-06-30 13:29 UTC

README

此库允许通过PHP访问Monzo API。此库需要PHP 7.1及以上版本。

安装

composer require amelia/monzo-php

如果您没有通过完成oauth自己获取自己的访问令牌,您还需要运行 composer require laravel/socialite

您应该在您的 .env(或其他方式)中设置以下变量

  • MONZO_CLIENT_ID
  • MONZO_CLIENT_SECRET
  • MONZO_REDIRECT_URI

您应该将以下内容添加到您的 config/services.php 文件中

'monzo' => [
        'client_id' => env('MONZO_CLIENT_ID'),
        'client_secret' => env('MONZO_CLIENT_SECRET'),
        'redirect' => env('MONZO_REDIRECT_URI'),
    ],

您可以在https://developers.monzo.com创建应用程序。

Laravel集成

Amelia\Monzo\MonzoServiceProvider::class 在Laravel 5.5中自动注册。

此包的未来版本将包括按用户自动处理webhook和完整的自动Socialite集成。

控制这些的环境变量将是

  • MONZO_WEBHOOKS=true
  • MONZO_SOCIALITE=true

社交集成

要自动添加socialite的回调,此包提供了一个可选的认证系统。

注意事项 这假设您正在将现有用户添加到Monzo上的应用程序。如果您不这样做,您需要设置自己的路由来根据socialite的API响应创建/管理用户。

首先,将 MonzoCredentials 特性添加到您的 Authenticatable 用户模型中。

<?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;
}

这为您的用户模型添加了大量用于处理Monzo凭证的setter/getter。

您可以通过向用户模型添加方法来自定义使用的列

<?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 getMonzoExpiresColumn()
    {
        return 'monzo_token_expires';
    }

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

社交迁移

假设您的用户表名为 users,您只需运行 php artisan vendor:publish --tag=monzo

这将在您的 migrations 目录中创建一个可编辑的迁移。

运行 php artisan migrate 来执行此操作。

使用方法

注意事项 如果不使用Laravel,您需要设置一个 Amelia\Monzo\Monzo 实例,并将一个 Amelia\Monzo\Contracts\Client 实例注入其中,如下所示

<?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

如果使用Laravel,您只需通过服务容器使用 resolve()app() 注入 Amelia\Monzo\Monzo

使用API很简单。

通常,您需要一个访问令牌或用户对象。

示例

获取用户的账户。

<?php

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

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

获取用户账户的最后100笔交易

<?php

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

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

获取用户默认账户的最后100笔交易

<?php

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

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

获取用户交易的分页器实例

<?php

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

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

扩展(并填充)API中的关系

<?php

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

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

查看用户的余额

<?php

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

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