获取基本公司信息时出现QuickBooks身份验证错误

获取基本公司信息时出现QuickBooks身份验证错误,quickbooks,quickbooks-online,Quickbooks,Quickbooks Online,我正在编写一个简单的桌面应用程序,以从QuickBooks(使用demo account(UK)数据的开发人员帐户)获取信息,在这方面,我已经能够通过OAuth流。然而,我一直无法获得公司的基本信息 下面是Fiddler请求和响应的捕获: GET https://quickbooks.api.intuit.com/v3/company/123145829830639/companyInfo/123145829830639 HTTP/1.1 Authorization: oauth_token=

我正在编写一个简单的桌面应用程序,以从QuickBooks(使用demo account(UK)数据的开发人员帐户)获取信息,在这方面,我已经能够通过OAuth流。然而,我一直无法获得公司的基本信息

下面是Fiddler请求和响应的捕获:

GET https://quickbooks.api.intuit.com/v3/company/123145829830639/companyInfo/123145829830639 HTTP/1.1
Authorization:  oauth_token="****", oauth_nonce="z4x0a196", oauth_consumer_key="****", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1499283607", oauth_version="1.0", oauth_signature="EGw6Ty%2BKFAawrH1%2FSxQuFwaMcEo%3D"
Content-Type: application/json
Host: quickbooks.api.intuit.com
标头的生成类似于,但我最终根据请求得到以下响应(Fiddler部分响应)

intuit_tid: gw-c4e19f89-df78-42a5-ae7e-216187421143
Set-Cookie: JSESSIONID=21BF1FFEE48B39538E82485FD25C4280.c51-pprdsbxas901; Path=/; Secure; HttpOnly
QBO-Version: 1706.912
ErrorCode: 100
ErrorCause: AuthenticationErrorGeneral: SRV-110-Authentication Failure ,   statusCode: 401
Message: General Authentication Error
访问公司信息的代码如下:

 string companyInfo = String.Format("company/{0}/companyInfo/{0}", authenticator.OAuthProfile.realmId);
 string  ciUrl = BASE_URL + companyInfo; //https://quickbooks.api.intuit.com/v3/
 var sb = new System.Text.StringBuilder();
 sb.AppendFormat("oauth_token=\"{0}\", oauth_nonce=\"{1}\", oauth_consumer_key=\"{2}\", oauth_signature_method=\"HMAC-SHA1\", oauth_timestamp=\"{3}\", oauth_version=\"1.0\", oauth_signature=\"{4}\"",
                    Manager.UrlEncode(_token),
                    Manager.UrlEncode(_nonce),
                    Manager.UrlEncode(_consumer_key),
                    Manager.UrlEncode(_timestamp),
                    Manager.UrlEncode(_signature));
 var authorisationHeader = sb.ToString().TrimEnd(' ').TrimEnd(',');


 // Request Company Information
 var request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(ciUrl);
 request.Headers.Add("Authorization", authorisationHeader);
 request.Method = "GET";
 request.ContentType = "application/json";
 using (var response = (System.Net.HttpWebResponse)request.GetResponse())
 {
       // get 401
 }
使用了沙盒URL,并将minorversion添加到基本URL
我尝试将BASE_URL set设置为sandbox URL(),并将minorversion设置为4


非常感谢您的帮助。

希望这能有所帮助,但这里有一个Java代码片段,它使用了他们的SDK,对我很有用:

   OAuthAuthorizer oauth = new OAuthAuthorizer(System.env.QB_OAUTH_CONSUMER_KEY, System.env.QB_OAUTH_CONSUMER_SECRET,
            vendor.intuitOAuthAccessToken, vendor.intuitOAuthAccessSecret);

    UUID trackingID = UUID.randomUUID()


    log.info("About to init Context companyID=" + vendor.realmId + ", app_token=" + System.env.QB_APP_TOKEN + ", uuid=" + trackingID.toString())

    Context context = new Context(oauth, System.env.QB_APP_TOKEN, ServiceType.QBO, vendor.realmId)
    context.setMinorVersion("4")

    context.setTrackingID(trackingID)

    log.info("About to set BaseURL")

    Config.setProperty(Config.BASE_URL_QBO, System.env.QB_BASE_URL + "/v3/company");



    log.info("About to init DataService")

    // get all customers
    log.info("About to executeQuery")
    DataService service = new DataService(context)
    QueryResult queryResult = service.executeQuery("select * from customer");
在我的例子中,QB_BASE_URL= *注意,后面没有斜杠

vendor.intuitOAuthAccessToken和vendor.intuitOAuthAccessSecret是在oauth流之后返回的值