Инуиты QuickBooks Обновление и продление токена

99
11

Я использую настольную версию QB. и я хотел обновить/регенерировать "токены доступа" / "Access Token Secrete" для моего рабочего стола 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) {}

}


Спасибо,


Reshma D.

спросил(а) 2021-01-25T17:53:52+03:00 4 месяца, 2 недели назад
1
Решение
88

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


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

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


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

ответил(а) 2021-01-25T17:53:52+03:00 4 месяца, 2 недели назад
78

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

ответил(а) 2021-01-25T17:53:52+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема