1

我正在使用 grails Oauth 插件。而且我无法在谷歌日历中创建新活动。

服务代码:

def addNewEvent(String calendarId){
    Token token=getGoogleAccessToken()
    def calendars = oauthService.postGoogleResource(token, "https://www.googleapis.com/calendar/v3/calendars/${calendarId}/events?key=${grailsApplication.config.oauth.providers.google.key}", [end:'2013-09-26', start: '2013-09-26', summery: 'Testing'])
} 

日志:

signing request: https://www.googleapis.com/calendar/v3/calendars/vrg3e08emcipgm4772u2iep2h4@group.calendar.google.com/events?key=163071926482.apps.googleusercontent.com
setting token to: Token[1/xxx-xxx , xxx_yyy]
generating signature...
base string is: POST&https%3A%2F%2Fwww.googleapis.com%2Fcalendar%2Fv3%2Fcalendars%2Fvrg3e08emcipgm4772u2iep2h4%40group.calendar.google.com%2Fevents&end%3D2013-09-26%26key%3D163df071926482.apps.googleusercontent.com%26oauth_consumer_key%3D1630719264df82.apps.googleusercontent.com%26oauth_nonce%3D254349338721%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1380260738%26oauth_token%3D1%252FSH5y9a8gO4AdG5bG3okN2348bi4tcxYdF-B3TL3jzN1kfw%26oauth_version%3D1.0%26scope%3Dhttps%253A%252F%252Fwww.googleapis.com%252Fauth%252Fcalendar%26start%3D2013-09-26%26title%3DTesting
signature is: ft/wk6omCDRh2Dk5jhC7NpBK1V4=
appended additional OAuth parameters: { oauth_signature -> ft/wk6omCDRh23Dk5jhC7NpBK1V4= , scope -> https://www.googleapis.com/auth/calendar , oauth_version -> 1.0 , oauth_nonce -> 2543498721 , oauth_signature_method -> HMAC-SHA1 , oauth_consumer_key -> 163071926482.apps.googleusercontent.com , oauth_token -> 1/SH5y9a8gO433AdG5bG3okN8bi4tcxYdF-B3TL3jzN1kfw , oauth_timestamp -> 1380260738 }
using Http Header signature

当我通过Google api Explorer拨打电话时,它正在工作。

谁能给我一些想法如何创建日历事件或我错在哪里?

4

2 回答 2

2

乍一看,bodyParameters 根据 api看起来不同。end并且start是嵌套对象。

您不应该尝试以下方法bodyParameters

['end.date':'2013-09-26', 'start.date':'2013-09-26', summary:'Testing']

你也可以试试

[end:[date:'2013-09-26'], start:[date:'2013-09-26'], summary:'Testing']

summery也用纠正summary

如果以上不是差异的原因,我可以详细研究。

更新
我能够复制您的问题。挖了很久,发现grails oauth plugin不支持Google Oauth 2 API。已经提交了相同的拉取请求。

您可以使用拉取请求提供的更改或直接使用带有最新Google2Api的 scribe,如本分叉中所述并作为详细示例

毫无疑问,参数映射是一个问题,必须使用上述结束日期、开始日期和摘要的设置。我也在研究它,看看我是否可以成功地在 groovy 中或作为 github 中的 Grails 项目提供一个工作示例。我还会看到拉取请求如何影响插件。顺便说一句,我用Oauth v2.2.1插件测试过。

希望有所帮助,当我进一步进行时,将保持更新此答案。

于 2013-10-05T17:03:43.963 回答
0

我尝试使用 google API 控制台创建一个快速事件,并在我的日历中创建一个事件。我在示例应用程序中试过这个。

def google() {
    Token token = (Token) session[oauthService.findSessionKeyForAccessToken('google')]
    def text = "Test Data".encodeAsURL()
    def calendarId = "asd@xyz.com".encodeAsURL()
    def calendars = oauthService.postGoogleResource(token, "https://www.googleapis.com/calendar/v3/calendars/${calendarId}/events/quickAdd?text=${text}&sendNotifications=true&key=${grailsApplication.config.oauth.providers.google.key}")
    def calendarsJSON = JSON.parse(calendars.body)
    render calendarsJSON.toString()
}

Test Data上面的代码成功地在我的谷歌日历中创建了一个名称为一小时的事件。

我正在尝试为特定时间创建一个事件。成功创建活动后,我将更新此帖子。这些是我的日志。

signing request: https://www.googleapis.com/calendar/v3/calendars/abc%xyz.com/events/quickAdd?text=Test+Data&sendNotifications=true&key=28284284224.apps.googleusercontent.com
setting token to: Token[1/bhhuujnin , d7ispjnkjnkSUsX8ckIdVOIH0bLXQa]
generating signature...
base string is: POST&https%3A%2F%2Fwww.googleapis.com%2Fcalendar%2Fv3%2Fcalendars%2Fabc%2540xyz.com%2Fevents%2FquickAdd&key%3D28284284224.apps.googleusercontent.com%26oauth_consumer_key%3D28284284224.apps.googleusercontent.com%26oauth_nonce%3D28284284224%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1381555963%26oauth_token%3D1%252Fifa0cTEhk6VRmU_YAQ61pX9Nsvdvsdg8BN7fbAyTKmBlBcIZ7A%26oauth_version%3D1.0%26scope%3Dhttps%253A%252F%252Fwww.googleapis.com%252Fauth%252Fcalendar%26sendNotifications%3Dtrue%26text%3DTest%2520Data
signature is: TmuhOi8ockEPKdjhjiK5fPMyVJ2wfU=
appended additional OAuth parameters: { oauth_signature -> TmuhOi8ockEPkhkKdiK5fPMyVJ2wfU= , scope -> https://www.googleapis.com/auth/calendar , oauth_version -> 1.0 , oauth_nonce -> 3332489143 , oauth_signature_method -> HMAC-SHA1 , oauth_consumer_key -> 28284284224.apps.googleusercontent.com , oauth_token -> 1/ifa0cTEhk6VRmU_YAQsfgeg_61pX9N8BN7fbAyTKmBlBcIZ7A , oauth_timestamp -> 1381555963 }
using Http Header signature
于 2013-10-11T11:16:52.707 回答