NodeJS Xero API 403 - AuthenticationUnsuccessful错误

vlju58qv  于 2023-08-04  发布在  Node.js
关注(0)|答案(2)|浏览(108)

我正在使用Xero API与Nodejs和xero-node库。
我已经完成了oAuth流程并将令牌保存到数据库中。我现在的问题是不断得到一个403禁止错误时,试图从Xero得到任何东西是联系人,帐户或用户。示例代码如下
我可以让租户没有问题,但其他任何东西都不起作用。我已经检查了范围,以确保当我设置客户端,他们是正确的,他们是。

var getStuff = async(tokenSet) => {
  await xero.setTokenSet(tokenSet);
  const tenants = await xero.updateTenants();

  const xeroTenantId = tenants[0].id  // {String} Xero identifier for Tenant
  const ifModifiedSince = new Date("2020-02-06T12:17:43.202-08:00");
  const where =  'IsSubscriber==true';  // {String} Filter by an any element
  const order =  'LastName ASC';  // {String} Order by an any element

  console.log(tenants);
  try {
    const response  = await xero.accountingApi.getUsers(xeroTenantId, ifModifiedSince, where, order);
    console.log(response.body || response.response.statusCode)

  }
  catch (err) {

   /// console.log(err);

    console.log(`There was an ERROR! \n Status Code: ${err.response.statusCode}.`);
    console.log(`ERROR: \n ${JSON.stringify(err.response.body, null, 2)}`);

  }

字符串
}

gg0vcinb

gg0vcinb1#

哪些作用域已添加到您正在传递的访问令牌中?您可以在此处解码您的令牌https://jwt.io/
另外-您需要将'tenant.tenantId'传递给函数。我相信tenant.id实际上与从/connections端点返回的连接ID有关。
我的直觉是这就是问题所在。同样令人好奇的是,这是如何工作的,因为updateTenants()应该在最后有一个空函数调用。这对你有用吗

hpxqektj

hpxqektj2#

我也有同样的问题&在查看了官方的GitHub for .net标准后,我发现我们需要发送tenants[0].TenantId而不是tenants[0].id所以你应该使用tenants[0].TenantId而不是tenants[0].id你可以在https://github.com/XeroAPI/xero-node上找到更多

import { XeroClient, HistoryRecords, Invoice } from 'xero-node';

const xero = new XeroClient({
  clientId: 'YOUR_CLIENT_ID',
  clientSecret: 'YOUR_CLIENT_SECRET',
  redirectUris: [`http://localhost:${port}/callback`],
  scopes: 'openid profile email accounting.transactions offline_access'.split(" ")
});

await xero.initialize();

const tokenSet = getTokenSetFromDatabase(userId); // example function name

await xero.setTokenSet(tokenSet);

if(tokenSet.expired()){
  const validTokenSet = await xero.refreshToken();
  // save the new tokenset
}

await xero.updateTenants();

const activeTenantId = xero.tenants[0].tenantId;

// GET all Accounts
const getAccountsResponse = await xero.accountingApi.getAccounts(activeTenantId);

字符串

相关问题