1

我正在 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 方法后无法调用此方法”。

我尝试查找一些 VB Oauth 代码,但在查找 Oauth 流的身份验证令牌和刷新令牌状态时遇到了麻烦。一旦令牌得到保护,所有其他问题和示例代码都适用于实际的 Google API 查询阶段。

4

1 回答 1

1

如果没有 VB 的特定知识,您应该纠正一些一般性的事情:

  1. 对每个参数进行 urlencode

  2. 由于这是一个 POST(不是 GET)从 URL 中删除查询字符串“?code=...&...”,而是在正文中发送表单数据“code=...&...” POST 请求。

有关此阶段的详细信息,请参阅以下内容: 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

于 2013-07-06T01:27:19.250 回答