willscottuk / monzo-php
Monzo银行(https://monzo.com)的API客户端
Requires
- php: >=7.1
- guzzlehttp/guzzle: ^7.5
- illuminate/support: ^10.0|^11.0
- ramsey/uuid: ^4.2
Requires (Dev)
- laravel/framework: ^11.0
- laravel/socialite: ^5.4
- php-vcr/php-vcr: ^1.3
- phpunit/phpunit: ^11.0
- symfony/var-dumper: ^7.0
README
此库允许通过PHP访问Monzo API。此库需要PHP 7.1及以上版本。
安装
composer require amelia/monzo-php
如果您没有通过完成oauth自己获取自己的访问令牌,您还需要运行 composer require laravel/socialite。
您应该在您的 .env(或其他方式)中设置以下变量
MONZO_CLIENT_IDMONZO_CLIENT_SECRETMONZO_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=trueMONZO_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();