Google日历预订系统

时间:2012-03-27 15:49:17

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

我看过很多关于这个主题的帖子,但都没有得到回答,而且大多数都因为模糊性而被关闭。希望我能写一些更具说明性的东西。

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

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

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

这是问题所在。

出于某种原因,我没有得到'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

1 个答案:

答案 0 :(得分:2)

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

以上获取'access_token''refresh_token'的步骤是正确的。但是谷歌改变了它发布OAuth2令牌的方式。

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