【问题标题】:Xero Accounting Sdk Core: authentication errorXero Accounting Sdk Core:身份验证错误
【发布时间】:2020-08-24 23:59:14
【问题描述】:

我正在实施一个内部程序来从我的数据库中生成发票。在使用.NET Core。我安装了 Xero.Api.SDK.Core v. 1.1.4

我发现 Xero 文档很难理解,而且有点过时。我查看了Github 存储库,它们仅引用OAuth 2.0。就我而言,我不想要任何用户交互,因为我想要一个后台进程。

我创建了一个作为开发者的帐户和一个用于测试的演示公司。

我用谷歌搜索了一下,我在一个网站上找到了一个如何连接到 api 的示例(我在 Xero 文档中找不到任何详细信息)。

X509Certificate2 cert = new X509Certificate2(@"public_privatekey.pfx", "password");

var api = new Xero.Api.Example.Applications.Private.PrivateAuthenticator(cert);

var private_app_api = new XeroCoreApi("https://api.xero.com", 
                                      new PrivateAuthenticator(cert),
                                      new Consumer("ClientId", "ClientSecret"), 
                                      null, null);

现在,我想,我应该使用 api。我试图阅读联系人列表:

var contacts = private_app_api.Contacts;
var list = contacts.FindAsync().Result;

结果如下错误:

System.AggregateException: '发生一个或多个错误。 (oauth_problem=consumer_key_unknown&oauth_problem_advice=Consumer%20key%20was%20not%20recognised)'

内部异常 UnauthorizedException: oauth_problem=consumer_key_unknown&oauth_problem_advice=Consumer%20key%20was%20not%20recognised

然后,我从 Github 下载了存储库。我复制并粘贴 ClientId 和 ClientSecret 并运行测试。没有一项测试通过!

我的目标是创建联系人或在列表中查找联系人,创建发票并将发票以 PDF 格式保存在我的存储中。

我该怎么做?有什么例子吗?

PS:在developer forum 中,登录不起作用,并且 Postman 集合是旧的,它也不起作用。

更新

我很绝望。我尝试使用XOauth 以另一种方式连接到api。最糟糕的。我按照 Xero 在 Github 上的说明创建了连接。

当我尝试连接时

xoauth 连接

在我的浏览器中打开了一个新标签,然后...

邮递员更新

我按照Postman 的步骤操作。我在我的邮递员中打开了收藏。在环境中,我从 Xero Developer 站点更新了 client_id 和 client_secret,然后进行了以下配置:

re_directURI:https://developer.xero.com

范围:offline_access 个人资料电子邮件accounting.transactions

授权网址:https://login.xero.com/identity/connect/authorize

访问令牌:https://identity.xero.com/connect/token

我打开了Get started api,Generate token,我给出了同样的结果。

【问题讨论】:

  • 看 youtube 频道。有一个视频展示了如何进行后台进程所需的机器对机器连接。我正在做一个 Windows 服务,这也是背景。 youtube.com/channel/UC7DA_vntKKChsenzpL7QWPg/videos
  • 您的代码正在使用旧式 OAuth 1 调用,虽然您仍然可以使用特殊链接以这种方式创建应用程序,但您只能在 6 月之前这样做。所以现在用它来创造新东西没有多大意义。
  • 这在文档和 Github 存储库中。我发现一切都非常混乱和混乱。我试着看 Youtube 频道,更糟糕的是:大部分视频都是旧的。只有一个视频youtube.com/watch?v=Zcf_64yreVI 很混乱,我不明白该怎么做。
  • 哦,这就是我想的那个,它为我清除了一些东西。我现在不使用 API,我首先使用 XOAuth 获取令牌,然后在需要时使用 HTTP POST 刷新它,并根据需要使用 HTTP 获取或发布以与 Xero 交互。示例代码的问题是我使用的是 VB,而不是 c#,所以我要么尝试从不熟悉的语言翻译,要么学习一门。
  • 使用XOAuth,您创建了第一个令牌,并使用这个令牌调用另一个api。它在工作吗?如果令牌过期了,你在做什么?

标签: c# azure-functions xero-api


【解决方案1】:

老实说,这真是一团糟。我花了两个多星期的时间来了解如何调用 Xero。我创建了一个post to explain step by step 我必须做的事情。

有很多问题:

  • 了解 Xero 文档,因为它不是很清楚
  • 找到正确的值以放入请求中
  • 在代码中翻译 Postman 请求
  • 没有 Xero 文档,只有一堆没用的项目

解释一切都很长,但例如,如果你想阅读一个组织,RestSharp 的代码是:

/// <summary>
/// Gets the organizations.
/// </summary>
/// <returns>OrganizationResponse.</returns>
public OrganizationResponse GetOrganizations()
{
    var _client = new RestClient("https://api.xero.com/connections");
    _client.Timeout = -1;

    var request = new RestRequest(Method.GET);
    request.AddHeader("Authorization", "Bearer " + _settings.AccessToken);
    var response = _client.Execute<IList<Organization>>(request);

    return response;
}

我将创建其他帖子来解释如何实现更多功能。

我为此创建了一个NuGet 包。 Github上的源代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 2019-07-09
    • 1970-01-01
    • 2017-12-13
    • 2018-05-21
    • 2019-04-19
    • 1970-01-01
    相关资源
    最近更新 更多