slakbal / gotowebinar
适用于 Laravel 5+ 的 GotoWebinar API 包装器
Requires
- php: >=7.1.3
- guzzlehttp/guzzle: ~6.3
- illuminate/contracts: ^5.8|^6.0|^7.0
- nategood/httpful: ^0.2
README
本包是 Laravel 5.4+ 的 GotoWebinar API 服务包装器和外观。
此新版本利用了 GotoWebinar API 和认证方法的最新版本。此版本与之前版本不兼容,是完全新的实现。
兼容 API 版本
https://goto-developer.logmeininc.com/content/gotowebinar-api-reference-v2
已知问题
- 通过 registrantKey 删除网络研讨会中的注册者仍然存在问题
- 通过 registrantKey 获取会议出席者
贡献和错误
请为任何更改、更新或错误创建一个拉取请求。谢谢!
安装
您可以使用 Composer 安装库
composer require slakbal/gotowebinar
如果您有 Laravel 5.5+,则包将自动发现
"extra": { "laravel": { "providers": [ "Slakbal\\Gotowebinar\\GotoWebinarServiceProvider" ], "aliases": { "Webinars": "Slakbal\\Gotowebinar\\Facade\\Webinars", "Registrants": "Slakbal\\Gotowebinar\\Facade\\Registrants", "Attendees": "Slakbal\\Gotowebinar\\Facade\\Attendees" } } },
否则,在 config/app.php
文件的 providers
数组中查找,并添加以下服务提供者
'providers' => [ // ... Slakbal\Gotowebinar\GotoWebinarServiceProvider::class ];
现在在同一个配置文件中找到 aliases
数组,并添加以下外观类
'aliases' => [ // ... 'Webinars' => Slakbal\\Gotowebinar\\Facade\\Webinars, 'Registrants' => Slakbal\\Gotowebinar\\Facade\\Registrants, 'Attendees' => Slakbal\\Gotowebinar\\Facade\\Attendees 'Sessions' => Slakbal\\Gotowebinar\\Facade\\Sessions ];
配置
在您可以使用服务提供者之前,您需要对其进行配置。您可以在以下位置创建带有 API 访问密钥的应用: GotoWebinar 开发者门户。查找 我的应用
菜单。
请注意,您需要拥有一个活动或试用账户,API 才能正常工作。仅开发凭据可能不起作用,因为这些令牌有时是受限的或过期的。
该提供者目前仅支持 OAuth2 认证。由于这是用于后端集成,而不是客户端,如移动应用程序等,因此初始认证是通过 Goto 的 直接登录 来完成的。
包的配置要求在您的 .env
文件中至少包含以下环境值。
GOTO_CONSUMER_KEY=Oa0fdvd82FdXcLrsts3EQYdsuGhdscV41
GOTO_CONSUMER_SECRET=8mbIGtkfdfhjksad68
GOTO_DIRECT_USERNAME=webinars@company.com
GOTO_DIRECT_PASSWORD=Password
该提供者还可以发布其配置。如果您想发布配置文件,可以使用
php artisan vendor:publish
开发环境
在您的开发环境中,当您运行以下 artisan 命令时
php artisan route:list
您将注意到有一些测试路由,您可以查看示例并使用浏览器测试您的集成。一旦您的环境在 .env
文件中设置为 production
,这些路由将不再可用。
_goto _goto/ping _goto/authenticate _goto/flush-auth _goto/webinars _goto/webinars/create _goto/webinars/createByArray _goto/webinars/{webinarKey}/view _goto/webinars/{webinarKey}/update _goto/webinars/{webinarKey}/updateByArray _goto/webinars/{webinarKey}/registrants _goto/webinars/{webinarKey}/registrants/create _goto/webinars/{webinarKey}/registrants/{registrantKey}/view _goto/webinars/{webinarKey}/registrants/{registrantKey}/delete _goto/webinars/{webinarKey}/attendees _goto/webinars/{webinarKey}/delete _goto/webinars/{webinarKey}/sessions _goto/webinars/{webinarKey}/sessions/{sessionKey} _goto/webinars/{webinarKey}/sessions/{sessionKey}/performance _goto/webinars/{webinarKey}/sessions/{sessionKey}/polls _goto/webinars/{webinarKey}/sessions/{sessionKey}/questions _goto/webinars/{webinarKey}/sessions/{sessionKey}/surveys _goto/webinars/{webinarKey}/sessions/{sessionKey}/attendees _goto/webinars/{webinarKey}/sessions/{sessionKey}/attendees/{registrantKey} _goto/webinars/{webinarKey}/sessions/{sessionKey}/attendees/{registrantKey}/polls _goto/webinars/{webinarKey}/sessions/{sessionKey}/attendees/{registrantKey}/questions _goto/webinars/{webinarKey}/sessions/{sessionKey}/attendees/{registrantKey}/surveys
身份验证令牌缓存
设置配置值后,身份验证令牌等将被缓存,并且令牌的过期和刷新将自动管理!
请注意,需要支持 标签 的缓存。因此不支持文件或数据库缓存驱动程序。
因此,缓存令牌导致减少一次往返到 GotoWebinar 服务器,从而提高性能。如果您想手动操作状态,可以使用以下方法
Webinars::status(); //note methods are also chainable Webinars::authenticate()->status(); Webinars::flushAuthentication()->status();
使用方法
使用此包时,您会注意到它与 API 文档模式等紧密一致,如以下链接所示: GotoWebinar API v2。建议在实现此包的同时关注官方 API 参考。
示例
在以下位置 vendor/slakbal/gotowebinar/src/routes
中,有包含上述路由的路由文件,可用于查看包的使用。
例如
try { return Webinars::subject('Event Name') ->description('Event Description*') ->timeFromTo(Carbon::now()->addDays(10), Carbon::now()->addDays(10)->addHours(1)) ->timeZone('Europe/Amsterdam') ->singleSession() ->noEmailReminder() ->noEmailAttendeeFollowUp() ->noEmailAbsenteeFollowUp() ->noEmailConfirmation() ->create(); } catch (Slakbal\Gotowebinar\Exception\GotoException $e) { return [$e->getMessage()]; }
响应
{ "webinarKey": "4255157664015486220" }
现在您可以直接在 $gotoResponse 中访问响应对象的属性
$gotoResponse->webinarKey
异常处理和日志记录
当使用包方法时,建议在 try
,catch
块中调用它们。例如
try { $gotoResponse = GotoWebinar::createWebinar($eventParams); } catch (GotoException $e) { //do something, go somewhere or notifify someone }
该包将自动为您记录一些主要事件和响应错误到配置的 Laravel 日志文件中,因此您无需再次记录。例如
[2017-09-21 00:14:38] local.ERROR: GotoWebinar: DELETE - Not Found (404): Webinar with specified key does not exist.
GotoWebinar 资源
网络研讨会
获取网络研讨会(流畅式)
$from = Carbon::now()->subYear()->startOfDay(); $to = Carbon::tomorrow()->endOfDay(); // Example URL: _goto/webinars?page=10&size=1 $page = request()->query('page') ?? 0; $size = request()->query('size') ?? 5; try { return Webinars::fromTime($from) ->toTime($to) ->page($page) ->size($size) ->get(); } catch (Slakbal\Gotowebinar\Exception\GotoException $e) { return [$e->getMessage()]; }
创建网络研讨会(流畅式)
return Webinars::subject('Event Name') ->description('Event Description') ->timeFromTo(Carbon::now()->addDays(10), Carbon::now()->addDays(10)->addHours(1)) ->timeZone('Europe/Amsterdam') ->singleSession() ->noEmailReminder() ->noEmailAttendeeFollowUp() ->noEmailAbsenteeFollowUp() ->noEmailConfirmation() ->create();
创建网络研讨会(数组)
return Webinars::noEmailReminder() ->timeFromTo(Carbon::now()->addDays(10), Carbon::now()->addDays(10)->addHours(1)) ->create([ 'subject' => 'Event Name', 'description' => 'Event Description*', 'timeZone' => 'Europe/Amsterdam', 'type' => 'single_session', 'isPasswordProtected' => false, ]);
更新网络研讨会(流畅式)
return Webinars::webinarKey($webinarKey) ->subject('Updated Event Name') ->description('Updated Event Description*') ->timeFromTo(Carbon::now()->addDays(10)->midDay(), Carbon::now()->addDays(10)->midDay()->addHours(2)) ->update();
更新网络研讨会(数组)
return Webinars::webinarKey($webinarKey) ->timeFromTo(Carbon::now()->addDays(10), Carbon::now()->addDays(10)->addHours(2)) ->update([ 'subject' => 'Event Name', 'description' => 'UPDATED Event Description', 'timeZone' => 'Europe/Amsterdam', 'isPasswordProtected' => false, ]);
显示网络研讨会(流畅式)
return Webinars::webinarKey($webinarKey) ->get();
删除网络研讨会(流畅式)
通过 webinarKey 删除特定的网络研讨会,方法返回 true
或 false
return Webinars::webinarKey($webinarKey) ->sendCancellationEmails() ->delete();
网络研讨会参与者(流畅式)
return Webinars::webinarKey($webinarKey) ->page($page) ->size($size) ->get();
网络研讨会会议时间(流畅式)
return Webinars::webinarKey($webinarKey) ->meetingTimes() ->get();
网络研讨会音频(流畅式)
return Webinars::webinarKey($webinarKey) ->audio() ->get();
网络研讨会性能(流畅式)
return Webinars::webinarKey($webinarKey) ->performance() ->get();
会话中的网络研讨会(流畅式)
$from = Carbon::now()->subYears(50)->startOfDay(); $to = Carbon::now()->addYears(50)->endOfDay(); return Webinars::insessionWebinars() ->fromTime($from) ->toTime($to) ->get();
注册者
获取注册者(流畅式)
返回特定网络研讨会的注册者列表
return Registrants::webinarKey($webinarKey) ->get();
创建注册者(流畅式)
为特定 WebinarKey 创建注册者
return Registrants::webinarKey($webinarKey) ->firstName('John') ->lastName('Doe') ->timeZone('America/Chicago') ->email('john.doe@email.com') ->resendConfirmation() ->questionsAndComments('Some First Question') ->create();
创建注册者(数组)
为特定 WebinarKey 创建注册者
return Registrants::webinarKey($webinarKey) ->resendConfirmation() ->create([ 'firstName' => 'Peters', 'lastName' => 'Panske', 'email' => 'peter@pan.com', 'timezone' => 'Europe/Amsterdam', 'phone' => '123', 'country' => 'SA', 'zipcode' => '123', 'source' => 'somewhere', 'address' => '123 Some street', 'city' => 'Some City', 'state' => 'Some State', 'organization' => 'Some Org', 'jobTitle' => 'Boss', 'questionsAndComments' => 'Some Question', 'industry' => 'Some Industry', 'numberOfEmployees' => 'Boss', 'purchasingTimeFrame' => 'Very soon', 'purchasingRole' => 'Some Buyer Role', ]);
获取注册者(流畅式)
通过 webinarKey 和 registrantKey 返回特定的注册者
return Registrants::webinarKey($webinarKey) ->registrantKey($registrantKey) ->get();
删除注册者(流畅式)
通过 webinarKey 和 registrantKey 删除特定的注册者,方法返回 true
或 false
return Registrants::webinarKey($webinarKey) ->registrantKey($registrantKey) ->delete();
会话
获取组织者会话(流畅式)
$from = Carbon\Carbon::now()->subYears(50)->startOfDay(); $to = Carbon\Carbon::now()->addYears(50)->endOfDay(); // Example: sessions?page=10&size=1 $page = request()->query('page') ?? 0; $size = request()->query('size') ?? 5; return Sessions::organizerSessions() ->fromTime($from) ->toTime($to) ->page($page) ->size($size) ->get();
获取网络研讨会会话(流畅式)
// Example: sessions?page=10&size=1 $page = request()->query('page') ?? 0; $size = request()->query('size') ?? 5; return Sessions::webinarKey($webinarKey) ->page($page) ->size($size) ->get();
获取会话(流畅式)
return Sessions::webinarKey($webinarKey) ->sessionKey($sessionKey) ->get();
获取会话性能(流畅式)
return Sessions::webinarKey($webinarKey) ->sessionKey($sessionKey) ->performance() ->get();
获取会话投票(流畅式)
return Sessions::webinarKey($webinarKey) ->sessionKey($sessionKey) ->polls() ->get();
获取会话问题(流畅式)
return Sessions::webinarKey($webinarKey) ->sessionKey($sessionKey) ->questions() ->get();
获取会话调查(流畅式)
return Sessions::webinarKey($webinarKey) ->sessionKey($sessionKey) ->surveys() ->get();
参与者
获取会话参与者(流畅式)
return Attendees::webinarKey($webinarKey) ->sessionKey($sessionKey) ->get();
获取参与者(流畅式)
return Attendees::webinarKey($webinarKey) ->sessionKey($sessionKey) ->registrantKey($registrantKey) ->get();
获取参与者投票(流畅式)
return Attendees::webinarKey($webinarKey) ->sessionKey($sessionKey) ->registrantKey($registrantKey) ->polls() ->get();
获取参与者问题(流畅式)
return Attendees::webinarKey($webinarKey) ->sessionKey($sessionKey) ->registrantKey($registrantKey) ->questions() ->get();
获取参与者调查(流畅式)
return Attendees::webinarKey($webinarKey) ->sessionKey($sessionKey) ->registrantKey($registrantKey) ->surveys() ->get();
欢迎您的贡献或错误修复!
祝您玩得愉快!
Slakkie