2014-10-17 113 views
2

成功获取授权码后,我在尝试访问Google Calendar API时无法访问令牌和刷新令牌时遇到问题。我收到错误404 Not Found。这里是我的代码:使用VBA和Oauth2交换Google Calendar API的访问令牌的授权码

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 

我也试图把一切都在。开法并没有什么的方法。发送的网址参数:

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编码。

所有提供错误404 Not Found。

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

+0

嘿@autoKarma您能否请您发布用于获取授权码的VBA代码?我无法在任何地方找到明确的说明,谢谢! – Bruder 2015-08-18 16:54:09

回答

1

终于找到它out--

我用错了的URL - 一个字母O型/前额拍击/

代替:

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和“POST”中它)。

现在就像一个魅力工作!