2013-09-27 27 views
1

我正在使用grails Oauth插件。而且我無法在Google日曆中創建新活動。Grails oauth插件:無法在Google中創建新的日曆事件

服務代碼:

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/[email protected]/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此調用,這是工作。

任何人都可以請給我一些想法如何創建一個日曆事件或我錯了?

回答

0

我試過谷歌API控制檯來創建quick event,它在我的calander中創建一個事件。 我在示例應用程序中嘗試了這一點。

def google() { 
    Token token = (Token) session[oauthService.findSessionKeyForAccessToken('google')] 
    def text = "Test Data".encodeAsURL() 
    def calendarId = "[email protected]".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 
+0

您可以顯示請求的HTTP標頭嗎?該插件是否可以使用Google API的OAuth 2? – dmahapatro

+0

@dmahapatro我沒有任何標題。我只寫這個代碼來創建一個快速事件。 – user1791574

+0

是的,但如果您在配置中的全局提供程序部分中有調試級別,則您應該爲問題中所示的請求和日誌提供HTTP標頭。你有它們嗎?你是否能夠按照OP的要求「插入」一個「事件」? – dmahapatro

2

第一次看,bodyParametersas per the api看起來不同。 endstart是嵌套的對象。

你不應該嘗試用以下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'] 

而且糾正summerysummary

如果以上不是不一致的原因,我可以仔細研究一下。

UPDATE
我能夠複製您的問題。挖了很長一段時間後,發現grails oauth插件不支持 Google Oauth 2 API。對於同樣的問題,還有一個pull request submitted

您可以使用拉請求中提供的變更或直接使用劃線與最新Google2Api作爲this fork提到和an example的細節。

當然,參數圖是一個問題,必須使用上面的結束日期,開始日期和摘要設置。我正在研究它,看看我能否成功地爲Groovy或github中的Grails項目提供相同的工作示例。我也會看到拉請求如何影響插件。順便說一句,我用Oauth v2.2.1插件進行測試。

希望有所幫助,將保持這個答案更新,當我進一步進行。

+1

感謝您的回覆。但它不起作用。我仍然收到錯誤:[error:[message:Invalid Credentials,errors:[[message:Invalid Credentials,location:Authorization,reason:authError,locationType:header,domain:global]],code:401]]。 –

+1

我無法弄清楚,爲什麼具有相同的證書我可以獲取和刪除一個事件,但無法創建和更新事件。 –

+0

getGoogleAccessToken()如何看起來像? – dmahapatro