coopbelvedere / laravel-basecamp-api
Basecamp3 API 包装器
Requires
- php: >=7.0
- ext-fileinfo: *
- guzzlehttp/guzzle: ^6.5 || ^7.0
- illuminate/cache: ^5.5|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/filesystem: ^5.5|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/support: ^5.5|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- kevinrob/guzzle-cache-middleware: ^3.0|^4.0
README
警告
此仓库现在是只读状态,不再维护。
Basecamp 3 的 API 包装器。
先决条件
创建集成
访问 https://launchpad.37signals.com/integrations 并注册您的应用。
在您的 .env 文件中添加凭据,格式如下
THIRTYSEVENSIGNALS_CLIENT_ID=your_client_id
THIRTYSEVENSIGNALS_CLIENT_SECRET=your_client_secret_key
THIRTYSEVENSIGNALS_REDIRECT_URI=http://localhost/login/basecamp/callback
并将配置变量添加到您的 config/services.php
文件中
'37signals' => [
'client_id' => env('THIRTYSEVENSIGNALS_CLIENT_ID'),
'client_secret' => env('THIRTYSEVENSIGNALS_CLIENT_SECRET'),
'redirect' => env('THIRTYSEVENSIGNALS_REDIRECT_URI')
],
OAuth2
Basecamp3 API 仅支持三重认证,并代表一个用户进行调用。要获取访问令牌,您可以使用 Laravel Socialite 与 37signals Socialite 驱动程序。在保存访问令牌和所需的 Basecamp3 账户后,您现在可以创建 API 包装器的实例。
composer require socialiteproviders/37signals
将 socialite 服务提供者添加到您的 config/app.php
文件的 providers
数组键中
'providers' => [ ... \SocialiteProviders\Manager\ServiceProvider::class, ]
在您的 app/Providers/EventServiceProvider.php
文件的 listen
属性中添加 socialite 事件监听器
protected $listen = [ ... \SocialiteProviders\Manager\SocialiteWasCalled::class => [ \SocialiteProviders\ThirtySevenSignals\ThirtySevenSignalsExtendSocialite::class.'@handle', ], ];
安装
composer require coopbelvedere/laravel-basecamp-api
php artisan vendor:publish --provider="Belvedere\Basecamp\BasecampServiceProvider"
在您的 config/basecamp.php
文件中添加一个 user-agent
以标识您的应用。这是 强制性的,否则任何请求都将返回 400 错误。
用法
获取您的 basecamp id、base uri (href)、token 和刷新 token 并初始化 API 包装器。以下是在 routes/web.php
文件中获取开始的示例。
Route::get('/login/basecamp', function () { return Socialite::driver('37signals')->redirect(); }); Route::get('/login/basecamp/callback', function () { $user = Socialite::driver('37signals')->user(); Basecamp::init([ 'id' => $user->user['accounts'][0]['id'], 'href' => $user->user['accounts'][0]['href'], 'token' => $user->token, 'refresh_token' => $user->refreshToken, ]); $projects = Basecamp::projects(); dd($projects->index()); });
注意:您不应在回调路由中初始化 API,这只是为了向您展示从 socialite 用户保留的数据。将这些数据保存到数据库中,并/或会话中,以保持连接活跃。
缓存
客户端默认使用 Laravel 文件系统缓存策略。您可以用您首选的 Laravel 缓存存储覆盖它
Basecamp::setCache(Cache::store('redis'));
中间件(可选)
您可以选择将中间件数组添加到 Guzzle 处理器堆栈中。以下是一个用于记录请求的示例
Basecamp::setMiddlewares([ \GuzzleHttp\Middleware::log( Log::getLogger(), new \GuzzleHttp\MessageFormatter('{method} {uri} HTTP/{version} {req_body}') ) ]);
事件监听器
客户端还提供了一个中间件,它将刷新已过期的访问令牌并自动重试目标端点。您可以监听 basecamp.refreshed_token
事件以更新您应用中的访问令牌。事件返回 2 个参数,您的 basecamp 用户 id 和新的访问令牌。
您可以在 EventServiceProvider.php
的 boot 方法中添加如下内容
Event::listen('basecamp.refreshed_token', function ($id, $token) { $user = \App\User::where('basecamp_id', $id)->first(); $user->access_token = $token->access_token; $user->expires_at = \Carbon\Carbon::now()->addSeconds($token->expires_in); $user->save(); });
分页
Basecamp 中的大多数资源集合都可以分页。
// Get projects. $projects = Basecamp::projects()->index(); // Get total of projects $projects->total(); // Save the next page link for your next request $nextPage = $projects->nextPage(); // Call the next page of projects. $projects = Basecamp::projects()->index($nextPage);
资源文档
- 附件
- 篝火
- 聊天机器人
- 客户审批
- 客户通讯
- 客户回复
- 评论
- 文档
- 事件
- 转发
- Needles
- 收件箱
- 留言板
- 消息类型
- 消息
- 人员
- 项目
- 问答
- 问卷调查
- 问题
- 录音
- 日程条目
- 日程
- 订阅
- 模板
- 待办事项列表组
- 待办事项列表
- 待办事项
- 待办事项集
- 上传
- 保险库
- Webhooks
许可证
版权(c)2017-至今,Coopérative Belvédère Communication