php - 谷歌日历预订系统

标签 php oauth-2.0 google-calendar-api

我看过很多关于这个主题的帖子,但没有一个得到答复,而且大多数都因为其模糊性而被关闭。希望我能写一些更具解释性的内容。

我一直在编写一个程序,从我的客户 Google 日历加载数据。此日历的 OAuth2 'access_token' 保存在数据库中,并在我需要访问它时传递。因此,它始终访问我的客户拥有的同一个日历。

然后,我的客户更新了此 Google 日历,并通过 Google 日历 API 和一些 AJAX,我绘制了他的空闲/忙碌数据并为用户更新了一个平面 HTML 页面。

这样它就像一个预订系统。用户可以操作 HTML 页面,然后他们选择的日期会通过 Google Calendar API 在我的客户端 Google Calendar 上更新。

问题来了。

由于某种原因,我没有获得'refresh_token',因此一小时后,我的'access_token'已过时,我无法访问日历数据。

这些是我为“代码”发送的值(不用担心格式,这只是为了向您展示):

    'redirect_uri' : 'http://local.test.com',
    'client_id' : 'blahblah.apps.googleusercontent.com',
    'scope' : 'https://www.googleapis.com/auth/calendar',
    'access_type' : 'offline',
    'response_type' : 'code'

一旦我检索到我的“代码”,我就会对我的“access_token”发出第二个请求:

          'code': $code,
          'grant_type': 'authorization_code' ,
          'redirect_uri' : 'http://local.test.com',
          'client_id' : 'blahblah.apps.googleusercontent.com',
          'client_secret' : 'secret_code'

所以我拿回了我需要的一切,只是没有'refresh_token'

谁能指出我哪里错了?任何人都可以根据我的情况提出更好的解决方案,或者即使我正在尝试不可能的事情?

任何帮助将不胜感激

我正在使用 Google Calendar API v3

最佳答案

对于任何偶然发现这篇文章的人。

上述获取'access_token''refresh_token'的步骤是正确的。不过,Google 改变了颁发 OAuth2 token 的方式。

您的第一个请求将授予您一个'refresh_token',此后您将不会再收到另一个请求。因此,如果您丢失了它,您将必须在 Google 的 API 控制台中设置全新的客户端 secret 等。

关于php - 谷歌日历预订系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9893047/

相关文章:

php - PHP 中的动态常量?

php - 测试 Laravel 包

python - Django 1.7 google oauth2 token 验证失败

javascript - 用 d3 制作日历

php - 对话 mysql Laravel Eloquent 中的最后一条消息

javascript - 提交表单时如何触发onChange事件?

android - 在 Android 的共享首选项中存储 Oauth2 访问/刷新 token 安全吗?

javascript - 我可以在 chrome 扩展中为 oauth2 回调设置什么重定向 URL?

c# - Google Calendar v3 - 获取所有有权访问日历的用户

java - java中夏令时的时区问题