onlime/laravel-bexio-api-client

Bexio API 客户端库,使用 Laravel HTTP Client 实现

0.2.0 2023-09-27 12:01 UTC

This package is auto-updated.

Last update: 2024-08-27 14:03:58 UTC


README

bexio API 客户端库允许您与 bexio API 进行交互。 这是一个基于 onlime/bexio-api-client 的包装器,使用 Laravel HTTP Client 更容易地集成 Laravel。 您可以将其与我的零配置 Laravel HTTP Client Global Logger 结合使用,以便进行详细的请求/响应记录。

有关如何使用 API 的更多信息,请参阅 onlime/bexio-api-client README 和官方的 bexio API 文档

安装

您可以使用 Composer 将库集成到您的 Laravel 项目中

$ composer require onlime/laravel-bexio-api-client

示例用法

注意: 我在这里仅记录 Laravel 项目的集成。请参阅 onlime/bexio-api-client README 以获取 Bexio API 客户端库的文档。

我建议在 config/bexio.php 中配置此内容

<?php
return [
    /*
    |--------------------------------------------------------------------------
    | Bexio API Credentials
    |--------------------------------------------------------------------------
    */
    'api' => [
        'clientId' => env('BEXIO_API_CLIENT_ID', 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'),
        'clientSecret' => env('BEXIO_API_CLIENT_SECRET', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
        ),
        'tokensFile' => env('BEXIO_API_TOKENS_FILE', 'bexio_client_tokens.json'),
        'scopes' => explode(' ', env('BEXIO_API_SCOPES',
            'openid profile contact_edit offline_access kb_invoice_edit article_edit note_edit'
        )),
    ],
];

将您的 Bexio API 凭证从 Bexio 开发者门户 中放入您的 .env

BEXIO_API_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
BEXIO_API_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

创建一些安全的存储来存储客户端(访问和刷新)令牌,config/filesystems.php

    'disks' => [
        // ...
        'secure' => [
            'driver' => 'local',
            'root' => storage_path('app/secure'),
            'visibility' => 'private',
            'throw' => false,
        ],

然后您可以在您的 routes/web.php 中定义这两条路由

  • GET /admin/bexio/auth – 验证 Bexio 并生成您的访问和刷新令牌
  • GET /admin/bexio/demo – 测试 Bexio API 的演示页面,使用先前生成的访问令牌
// routes/web.php
<?php
Route::middleware('auth')->group(function () {
    Route::group(['prefix' => 'admin'], function () {
        Route::controller(BexioController::class)->prefix('bexio')->group(function () {
            Route::redirect('/', '/admin/bexio/auth');
            Route::get('/auth', 'authenticate')->name('bexio.auth');
            Route::get('/demo', 'demo')->name('bexio.demo');
        });
    });
});

警告: 确保保护这些规则,并且仅将其提供给您的管理员用户!

现在创建控制器,php artisan make:controller BexioController

<?php

namespace App\Http\Controllers;

use Bexio\Resource\Contact as BexioContact;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Inertia\Inertia;
use LaravelBexio\Client;

class BexioController extends Controller
{
    public function authenticate(Request $request)
    {
        $client = $this->getBexioClient();
        $client->authenticate(config('bexio.api.scopes'), route('bexio.auth'));
        $client->persistTokens($this->getTokensFile());

        return view('bexio.auth');
    }

    public function demo(Request $request)
    {
        $client = $this->getBexioClient();
        $client->loadTokens($this->getTokensFile());

        return view('bexio.demo', [
            'contacts' => (new BexioContact($client))->getContacts(),
        ]);
    }

    protected function getBexioClient(): Client
    {
        return new Client(
            config('bexio.api.clientId'),
            config('bexio.api.clientSecret')
        );
    }

    protected function getTokensFile(): string
    {
        return Storage::disk('secure')->path(config('bexio.api.tokensFile'));
    }
}

注意: 确保将 https://:8080/admin/bexio/auth 添加到 Bexio 开发者门户 中的重定向 URL

现在启动您的应用程序

$ php artisan serve

然后,访问 Bexio 认证页面

这将要求您确认请求的作用域,如果您尚未这样做,您将需要使用您的 Bexio 凭证登录。

一旦您已认证,您将看到 bexio.auth 视图的内容,其中可能显示一些确认消息并要求您转到演示页面。位于 https://:8080/admin/bexio/demo 的演示页面将使用存储在 <project-root>/storage/app/secure/bexio_client_tokens.json 中的 Bexio API 客户端令牌,并显示所有 Bexio 联系人(例如,以验证一切正常)。

作者

此出色软件包的作者是 Philip Iezzi (Onlime GmbH)

许可

此软件包受 MIT 许可证 的许可,但是支持非常欢迎。