2013-04-05 2 views
4

Я использую настольную версию QB. и я хотел обновить/регенерировать «токены доступа»/«Access Token Secrete» для моего рабочего стола QuickBooks, поскольку срок их действия истекает через 180 дней, а продление должно быть сделано в течение 30 дней с момента окончания токена. я попробовал то же самое с кодом ниже, но он не работает, дает ошибку, как,Инуиты QuickBooks Продление токена и срок его действия

<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> 

Там нет какого-либо входа Request/Response для маркеров 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

Вам необходимо вызвать API Повторное подключение в течение 30 дней до истечения срока действия жетона. Похоже, что ваши токены уже истекли, поэтому вам нужно будет снова пройти поток Oauth.

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

C# Пример использования DevDefined и DevKit:

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

+0

Этот вызов недоступен в DevKit. Я обновил ответ выше с примером того, как использовать DevDefined для вызова API. –

+0

Спасибо, Питер. Я попробую с данной ссылкой. – Reshma

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'); 
    }) 
}) 
Смежные вопросы