slakbal/gotowebinar

适用于 Laravel 5+ 的 GotoWebinar API 包装器

v6.0.2 2020-03-24 19:02 UTC

This package is auto-updated.

Last update: 2024-09-12 18:14:04 UTC


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

异常处理和日志记录

当使用包方法时,建议在 trycatch 块中调用它们。例如

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 删除特定的网络研讨会,方法返回 truefalse

    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 删除特定的注册者,方法返回 truefalse

    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