使用VBA和Oauth2交换Google Calendar API的访问令牌的授权码

时间:2014-10-17 15:09:54

标签: vba oauth-2.0 google-oauth

成功获取授权码后,我在尝试访问Google Calendar API时无法将其换成访问令牌和刷新令牌。我找不到错误404。这是我的代码:

Dim getTokenUrl As String
getTokenUrl = "https://accounts.google.com/o/auth2/token"

Dim getTokenBody As String
getTokenBody = "code=" & code & _
        "&redirect_uri=urn:ietf:wg:oauth:2.0:oob" & _
        "&client_id=xxxxxxx-xxxxxxxx.apps.googleusercontent.com" & _
        "&client_secret={myLittleSecret}" & _
        "&grant_type=authorization_code"

Dim Http As MSXML2.XMLHTTP60                 
Set Http = CreateObject("MSXML2.XMLHTTP.6.0")  

With Http
    .Open "POST", getTokenUrl, False
    .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    .send(getTokenBody)
End With
Do While Http.ReadyState <> 4
Loop

Debug.Print Http.responseText

我还尝试将所有内容放在.Open方法的url参数中,而在.Send方法中没有任何内容:

Dim getTokenUrl As String
getTokenUrl = "https://accounts.google.com/o/oauth2/token&code=" & code & "&client_id=xxxxxx-xxxxxx.apps.googleusercontent.com&client_secret={myLittleSecret}&redirect_uri=urn:ietf:wg:oauth:2.0:oob&grant_type=authorization_code"

Dim Http As MSXML2.XMLHTTP60                 
Set Http = CreateObject("MSXML2.XMLHTTP.6.0")  

With Http
    .Open "POST", getTokenUrl, False
    .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    .send("")
End With

我尝试过使用WinHttp.WinHttpRequest而不是MSXML2.XMLHTTP。

我尝试使用http://localhost而不是urn:ietf:wg:oauth:2.0:oob。

我试过制作http://localhost和urn:ietf:wg:oauth:2.0:oob url encoded。

全部给出错误404未找到。

有人可以帮助我指出正确的方向吗?

1 个答案:

答案 0 :(得分:1)

终于想通了 -

我使用的网址错误 - 一个字母类型-o / forehead-slap /

而不是:

Dim getTokenUrl As String
getTokenUrl = "https://accounts.google.com/o/auth2/token"
应该是:

Dim getTokenUrl As String
getTokenUrl = "https://accounts.google.com/o/oauth2/token" 

请注意oauth2而非auth2

Geesh。有时我只需要更多的睡眠。

顺便说一下,当我只在.Open请求中放入基本URL而在.send()中放入参数时,我只能将它工作(而不是将它们全部串在一起写入一个URL和&#34; POST& #34; ing))。

现在像魅力一样工作!