Продление и истечение срока действия токена Inuit QuickBooks

Я использую настольную версию 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>

Нет никакого зарегистрированного запроса/ответа для создания токена.

 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) {}

    }

Спасибо,

Решма Д.


person Reshma    schedule 05.04.2013    source источник


Ответы (2)


Вам необходимо вызвать Reconnect 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

person Peter Lavelle    schedule 05.04.2013
comment
Спасибо за ваш ответ. Можете ли вы помочь нам вызвать этот API через службу данных. Подобно тому, как мы вызываем методы службы данных, например, Intuit.Ipp.Data.Qbd.Customer qbdCustomer = dataServices.FindById‹Intuit.Ipp.Data.Qbd.Customer›(qbdCustomer1); Спасибо за ответ. Можете ли вы помочь нам вызвать этот API через службу данных. Подобно тому, как мы вызываем методы службы данных, например, Intuit.Ipp.Data.Qbd.Customer qbdCustomer = dataServices.FindById‹Intuit.Ipp.Data.Qbd.Customer›(qbdCustomer1); Мы не можем понять, какой объект Intuit Quickbooks поможет нам в реализации. Заранее спасибо, Решма Д. - person Reshma; 08.04.2013
comment
Этот вызов недоступен в DevKit. Я обновил ответ выше примером того, как использовать DevDefined для вызова API. - person Peter Lavelle; 08.04.2013
comment
Спасибо, Питер. Попробую по указанной ссылке. - person Reshma; 09.04.2013

Я нашел способ, с помощью которого вы всегда можете получить доступ к одной и той же компании каждый раз, когда запускаете приложение. Это заняло у меня некоторое время, чтобы понять. Однако я сделал это в узле 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');
  })
})
person nebulr    schedule 21.12.2014