2013-04-05 77 views
4

我正在使用QB桌面版。并且我想为我的QuickBooks桌面版更新/重新生成'访问令牌'/'访问令牌保密',因为它们将在180天内过期,并且必须在令牌到期后的30天内进行续订。 我试图与下面的代码,但它不工作一样,给人误差,因纽特人快速书签令牌更新和到期

<RestResponse xmlns="http://www.intuit.com/sb/cdm/v2"><Error RequestId="14aa97c48321489db48254e4bdb25d00"><RequestName>ErrorRequest</RequestName><ProcessedTime>2013-04-05T11:43:08+00:00</ProcessedTime><ErrorCode>401</ErrorCode><ErrorDesc>Invalid security token</ErrorDesc></Error></RestResponse> 

没有为令牌generatetion没有任何记录的请求/响应。

string myRealmId = "000000000000000"; 
     string myAccessToken = "0000000000000000000000000000000000000"; 
     string myAccessTokenSecret = "00000000000000000000000000000000000"; 

     string myAppToken = "00000000000000000000000000000000000"; 
     string myConsumerKey ="00000000000000000000000000000000000"; 
     string myConsumerSecret ="00000000000000000000000000000000000"; 

     OAuthConsumerContext consumerContext = new OAuthConsumerContext 
     { 
      ConsumerKey =myConsumerKey, 
      SignatureMethod = SignatureMethod.HmacSha1, 
      ConsumerSecret = myConsumerSecret 
     }; 

     OAuthSession oSession = new OAuthSession(consumerContext, "https://oauth.intuit.com/oauth/v1/get_request_token", 
         "https://workplace.intuit.com/Connect/Begin", 
         "https://oauth.intuit.com/oauth/v1/get_access_token"); 

     oSession.ConsumerContext.UseHeaderForOAuthParameters = true; 

     oSession.AccessToken = new TokenBase 
     { 
      Realm = myRealmId, 
      Token = myAccessToken, 
      ConsumerKey = myConsumerKey, 
      TokenSecret = myAccessTokenSecret 
     }; 

     var body = "<AdvancedReportQuery xmlns=\"http://www.intuit.com/sb/cdm/v2\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.intuit.com/sb/cdm/v2 ..//RestDataFilter.xsd\"><BalanceSheetStd><OfferingId>ipp</OfferingId><EndTransactionDate>2012-06-01</EndTransactionDate></BalanceSheetStd></AdvancedReportQuery>"; 

     IConsumerRequest conReq = oSession.Request(); 
     conReq = conReq.Post().WithRawContentType("text/xml").WithRawContent(System.Text.Encoding.ASCII.GetBytes(body)); 
     conReq = conReq.ForUrl("https://services.intuit.com/sb/advancedreport/v2/508053445"); 
     try 
     { 
      conReq = conReq.SignWithToken(); 
     } 
     catch (Exception ex) {} 

     string serviceResponse = conReq.ReadBody(); 

     } 
     catch (Exception Err) {} 

    } 

感谢,

Reshma D.

回答

3

需要调用内令牌期满前30日内重新连接API。看起来你的代币已经过期了,所以你需要再次通过Oauth流程。

http://docs.developer.intuit.com/0025_Intuit_Anywhere/0060_Reference/3002_Reconnect_API

使用DevDefined和的devkit的C#示例:

https://gist.github.com/IntuitDeveloperRelations/5338762

+0

感谢您的回复。您可以帮助我们通过数据服务调用此API。就像我们调用数据服务方法,例如,Intuit.Ipp.Data.Qbd.Customer qbdCustomer = dataServices.FindById (qbdCustomer1);感谢您的回复。你能帮我们通过数据服务来调用这个API吗?例如,我们称数据服务方法为 Intuit.Ipp.Data.Qbd.Customer qbdCustomer = dataServices.FindById (qbdCustomer1); 我们无法确定哪个Intuit Quickbooks对象可以帮助我们实现。提前感谢,Reshma D. – Reshma 2013-04-08 12:37:19

+0

此调用在DevKit中不可用。我已经通过一个如何使用DevDefined来调用API的例子更新了上面的答案。 – 2013-04-08 17:41:29

+0

谢谢彼得。我会尝试给予参考。 – Reshma 2013-04-09 09:12:36

2

我找到一种方式,你可以在每次启动应用程序时可以随时访问相同的公司。这花了我一些时间来弄清楚。但是我在节点js中做了这个;这个概念仍然适用于任何编程语言。

'use strict'; 

var request = require('request'); 
var qs = require('querystring'); 
var config = require('./environment'); 
var QuickBooks = require('node-quickbooks'); 

var postBody = { 
    url: QuickBooks.REQUEST_TOKEN_URL, 
    oauth: { 
    // This callback url is just a placeholder so QuickBooks doesn't get upset 
    callback: "http://localhost:9000/oauth/quickbooks/callback", 
    consumer_key: config.quickbooks.consumerKey, 
    consumer_secret: config.quickbooks.consumerSecret 
    } 
} 
request.post(postBody, function (e, r, data) { 
    var requestToken = qs.parse(data) 

    var postBody = { 
    url: QuickBooks.ACCESS_TOKEN_URL, 
    oauth: { 
     consumer_key: config.quickbooks.consumerKey, 
     consumer_secret: config.quickbooks.consumerSecret, 
     token:   requestToken.oauth_token, 
     token_secret: requestToken.oauth_token_secret, 
     verifier:  config.quickbooks.companyId, // This part is key 
     realmId:   config.quickbooks.companyId 
    } 
    } 
    request.post(postBody, function (e, r, data) { 
    var accessToken = qs.parse(data) 

    GLOBAL.qbo = new QuickBooks(config.quickbooks.consumerKey, 
          config.quickbooks.consumerSecret, 
          accessToken.oauth_token, 
          accessToken.oauth_token_secret, 
          config.quickbooks.companyId, 
          true); 
    console.log('Quickbooks Integration Complete'); 
    }) 
})