Xero Accounting Sdk Core:身份验证错误

时间:2020-05-09 11:19:50

标签: c# azure-functions xero-api

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

我发现Xero文档非常难以理解,并且有些过时。我看了一下Github存储库,它们仅引用了OAuth 2.0。就我而言,我不需要任何用户交互,因为我需要后台进程。

我创建了一个帐户,作为开发人员和演示公司进行测试。

enter image description here

我用Google搜索了一下,然后在一个网站上找到了一个如何连接到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 =已识别消费者%20key%20was%20not%20)'

内部异常 UnauthorizedException:oauth_problem = consumer_key_unknown&oauth_problem_advice =已识别消费者%20key%20was%20not%20

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

enter image description here

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

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

PS:在developer forum中,登录名无效,并且邮递员收藏集很旧,也没有。

更新

我很绝望。我尝试使用XOauth以另一种方式连接到api。最差如Xero在Github上所述,我创建了连接。

enter image description here

当我尝试与之建立联系

xoauth连接

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

enter image description here

邮递员更新

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

re_directURI:https://developer.xero.com

范围:offline_access个人资料电子邮件计费。交易

验证URL:https://login.xero.com/identity/connect/authorize

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

我打开了入门 API,生成令牌,并且得到了相同的结果。

enter image description here

1 个答案:

答案 0 :(得分:0)

老实说,那真是一团糟。我花了两个多星期的时间来了解如何调用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上的源代码。

相关问题