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

时间:2017-07-05 19:58:17

标签: quickbooks quickbooks-online

我正在编写一个简单的桌面应用程序来从QuickBooks(开发人员帐户使用模拟帐户(英国)数据)获取信息,在这方面我已经能够通过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

标题的生成类似于https://developer.intuit.com/v2/apiexplorer?apiname=V3QBO#?id=CompanyInfo,但我最终根据请求获得了以下响应(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
 }

使用过的沙盒网址并将minorversion添加到基本网址
我尝试将BASE_URL设置为沙箱网址(https://sandbox-quickbooks.api.intuit.com/v3),并将 minorversion 设置为4.

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

希望这会有所帮助,但这是一个使用他们的SDK的Java代码段,对我有用:

   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 = https://sandbox-quickbooks.api.intuit.com *注意没有斜杠

vendor.intuitOAuthAccessToken和vendor.intuitOAuthAccessSecret是您在oauth流程后获得的值