0

我只是想获得一个概念验证,以测试与 QB Online 帐户的 QB api 的连接。我从来没有像这样尝试过建立 OAuth 连接,所以我不确定我做对了。这是我到目前为止所拥有的,它发出了请求,但我收到了从 QB 的服务器返回的 401 错误(未经授权的 OAuth 令牌:signature_invalid401SERVER):

client := &http.Client{}
if req, err := http.NewRequest("GET", "https://qbo.intuit.com/qbo1/resource/customers/v2/717594130", nil); err != nil {
    //handle error
} else {
    req.Header.Add("Authorization", "OAuth oauth_token=\"MY_TOKEN\",oauth_nonce=\"7758caa9-e1f4-4fa1-84c5-5759fd513a88\",oauth_consumer_key=\"MY_KEY\",oauth_signature_method=\"HMAC-SHA1\",oauth_timestamp=\"1369259523\",oauth_version=\"1.0\",oauth_signature=\"MY_SIG\"")
    if resp, err := client.Do(req); err != nil {
        //handle error
    } else {
        defer resp.Body.Close()
        contents, err := ioutil.ReadAll(resp.Body)
        if err != nil {
            //handle error
        }
        myOutput := string(contents)
    }
}

问题可能出在我的 QB 帐户设置上吗?“主机名域”有一个设置,我认为它可能只允许来自我在那里输入的内容(当前是 intuit.com)的连接。如果是这种情况,我该如何设置它以允许来自本地主机上的开发应用程序的连接?

4

1 回答 1

0

您是否使用正确的 OAuth 算法来生成签名?

您能否发布一个显示传出签名/OAuth 标头的实际请求/响应,以及您从 Intuit 返回的响应?

您的代码没有显示任何这些,而且看起来您使用的不是 Intuit DevKit,所以这可能是开始的地方。我的猜测是您发送的签名无效。我强烈建议您找到一个 OAuth 库,并使用该 OAuth 库,而不是尝试推出您自己的 OAuth 算法。

就这一点而言:

问题可能出在我的 QB 帐户设置上吗?“主机名域”有一个设置,我认为它可能只允许来自我在那里输入的内容(当前是 intuit.com)的连接。

不太可能是问题......但除了简单的测试请求之外,您需要将其设置为您的主机名。如果它是本地开发框,您可以输入您的本地开发框主机名(例如http://localhost/http://192.168.1.2/类似的名称 - 无论您使用什么 URL 来访问您的开发框)

于 2013-05-23T20:35:49.393 回答