【问题标题】:How to have server access Google Calendar API?如何让服务器访问 Google Calendar API?
【发布时间】:2023-03-06 01:30:01
【问题描述】:

我正在尝试构建一个网络应用程序,该应用程序将访问用户的 Google 日历 API,而他们实际上并不在那里。所以基本上在后台从我的服务器(PHP 脚本)在他们的 Google 日历中添加或修改事件。

我已经是来自 Google 日历的 oauth2,并且我为他们准备了一个刷新令牌,因此他们不必每次都重新登录。他们只需登录一次 oauth 就可以了。但是我怎样才能让服务器可以在后台进行更改呢?

【问题讨论】:

  • 您的问题是关于 PHP 中的后台进程,还是关于使用刷新令牌访问帐户的问题?请澄清

标签: php oauth-2.0 google-api google-calendar-api google-oauth


【解决方案1】:

如果您习惯于制作“普通”网页,则执行异步工作通常会破坏工作流程,因为任何异步活动都存在于通常的请求生命周期之外。

您需要将异步任务委托给专用程序、进程或线程。这意味着使用一种排队系统并拥有一个单独的进程,其工作是运行排队系统中的任务并更新状态。

如果您正在学习,我建议您推出自己的 - 最小排队系统是一个很好的学习项目;您可以使用常规数据库管理系统将其推出。您必须注意竞争条件(提示:使用行锁)。

如果您正在生产,我建议您使用 ZeroMQ 之类的东西 - 我知道 PHP 有很好的绑定。

除了让您的网站更新并从排队系统中读取数据之外,您还需要任务运行器 - 最简单的形式是计划作业;您可以在 while 循环中编写一个简单的 php 脚本,休眠一段时间(取决于您正在构建的软件的流量),检查作业队列中是否有内容,并在需要时进行更新。

您可能需要学习如何在每次计算机启动时运行一个进程才能执行此操作,否则简单的系统重启会破坏您的设置。

最后,工作流程会有点像这样:

  • 网站有一个检查队列的功能(我是否排队了尚未完成的事情?我排队的事情是否已经完成?我是否让用户知道工作已经完成?等等)李>
  • 网站具有将作业插入队列的功能
  • 一个进程独立于网站可以不时检查队列,并用交易结果更新它

【讨论】:

  • 抱歉,我想知道如何在没有用户实际登录的情况下通过 API 访问 Google 的服务器
  • 用户是否不必向您的应用程序提供令牌才能代表他们调用 Google 的 API?我会将该令牌放入队列中。
【解决方案2】:

我想通了。所以我所做的是将access_token 存储在数据库中并检查访问令牌是否已过期。如果是,我会使用数据库中的refresh_token 来生成新的访问令牌。因此,每次服务器访问用户帐户时,都会使用数据库中的访问令牌。另外,请确保将访问类型设置为offline,如下所示:

$client->setAccessType('offline');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    相关资源
    最近更新 更多