我看过很多关于这个主题的帖子,但没有一个得到答复,而且大多数都因为其模糊性而被关闭。希望我能写一些更具解释性的内容。
我一直在编写一个程序,从我的客户 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/