【问题标题】:QuickBooks Authentication error when getting basic company information获取基本公司信息时出现 QuickBooks 身份验证错误
【发布时间】:2017-07-05 19:58:16
【问题描述】:

我正在编写一个简单的桌面应用程序来从 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
 }

使用沙盒 URL 并将次要版本添加到基本 URL
我尝试将 BASE_URL 设置为沙盒 url(https://sandbox-quickbooks.api.intuit.com/v3) 并将 minorversion 设置为 4。

非常感谢任何帮助。

【问题讨论】:

    标签: quickbooks quickbooks-online


    【解决方案1】:

    希望这会有所帮助,但这里有一个使用他们的 SDK 的 Java sn-p 对我有用:

       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 流程后返回的值

    【讨论】:

      猜你喜欢
      • 2023-03-08
      • 1970-01-01
      • 2019-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-08
      • 1970-01-01
      • 2013-12-01
      相关资源
      最近更新 更多