c# - Xero Accounting Sdk Core:身份验证错误
问题描述
我正在实施一个内部程序来从我的数据库生成发票。在使用.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:在开发者论坛登录不起作用,邮递员集合是旧的,它也没有。
更新
我很绝望。我尝试用另一种方式连接到 api XOauth
。最糟糕的。正如 Xero 在Github上解释的那样,我创建了连接。
当我尝试与
xoauth 连接
在我的浏览器中打开一个新标签,然后...
邮递员更新
我按照Postman的步骤进行操作。我在我的邮递员中打开了收藏。在环境中,我从 Xero Developer 站点更新了 client_id 和 client_secret,然后进行了以下配置:
re_directURI:https ://developer.xero.com
范围:offline_access 个人资料电子邮件accounting.transactions
我打开了Get started api,Generate token并给出了相同的结果。
解决方案
老实说,这真是一团糟。我花了两个多星期的时间来了解如何调用 Xero。我创建了一个帖子来逐步解释我必须做什么。
有很多问题:
- 了解 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;
}
我将创建其他帖子来解释如何实现更多功能。
推荐阅读
- sql - 如何在sql的多行临时表中插入数据
- java - 使用 jdbc 时出错
- javascript - 将 mysql_insert_id 从 PHP 传递到 AJAX
- javascript - 删除字母间距后的输入字段
- php - 如何在 PHP 中将“MM:SS.MS”转换为“SS.MS”?
- apache-spark - Apache Ignite 计算网格和 Spark 之间的性能差异
- spring - SpringBoot config json 格式属性文件
- java - 基于 Spring Security 角色的访问限制
- laravel - 雄辩的 laravel 关系
- javascript - 在 Jquery 中动态添加换行符?