我正在Microsoft Access中构建一个报告面板,该面板的一个组件需要从Google Analytics中提取数据。我可以很容易地从Google API获得身份验证代码,但我遇到了将身份验证代码交换为访问令牌和刷新令牌的问题。我尝试了很多不同的东西,但你可以在下面找到我当前的代码。
Public Sub RefreshTokenFetch()
Dim xml As MSXML2.XMLHTTP60
Dim url As String
url = "accounts.google.com/o/auth2/token?code=" & code & "&client_id=" & clientid & "&client_secret=" & secret & "&redirect_uri=" & redirect & "&grant_type=authorization_code"
Set xml = CreateObject("MSXML2.XMLHTTP.6.0")
With xml
.Open "POST", url
.setRequestHeader "content-type", "application/x-www-form-urlencoded"
.send
End With
End Sub
当我尝试运行上面的代码时,它总是会在".send"行上被绊倒,并说"在调用了send方法之后,就不能调用这个方法了。"
我曾尝试查找一些VBOauth代码,但在查找Oauth流的身份验证令牌和刷新令牌状态时遇到了问题。所有其他问题和示例代码都适用于代币安全后的实际Google API查询阶段。
如果没有VB的具体知识,您应该纠正以下几点:
-
url编码每个参数
-
由于这是POST(而不是GET),请从URL中删除查询字符串"?code=…&…",并在POST请求的正文中发送表单数据"code=…&…"。
有关此阶段的详细信息,请参见以下内容:https://developers.google.com/accounts/docs/OAuth2WebServer#handlingtheresponse
关于VB部分,我认为该消息可能意味着您需要将正文指定为.send的一部分,例如:.send"code=…&…"
以下网站似乎有一些示例(并非特定于OAuth)可能会有所帮助:http://www.tushar-mehta.com/publish_train/xl_vba_cases/vba_web_pages_services/#_Toc173749365