1

我想将 xero 与 c# windows 服务应用程序集成。我没有找到一个简单的代码片段来连接 xero 和 c#。在使用 xero 授权用户时,我不希望进行任何用户交互。

我找到了下面的代码,但它会将我重定向到 xero 登录页面进行身份验证,然后生成验证码,我该如何避免这种情况并继续进行,因为在 Windows 服务中我将没有任何 gui 来输入验证码。

using System;
using System.Linq;
using System.Windows.Forms;
using Xero.Api.Core;
using Xero.Api.Example.Applications.Public;
using Xero.Api.Example.TokenStores;
using Xero.Api.Infrastructure.OAuth;
using Xero.Api.Serialization;


namespace XeroIntegrationTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            ConnectXero();
        }

        public void ConnectXero()
        {
            try
            {
                // Public Application Sample
                var user = new ApiUser { Name = Environment.MachineName };
                string consumerKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
                string consumerSecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

                var public_app_api = new XeroCoreApi("https://api.xero.com/api.xro/2.0/", new PublicAuthenticator("https://api.xero.com/api.xro/2.0/", "https://api.xero.com/oauth/RequestToken", "oob",
                    new MemoryTokenStore()),
                    new Consumer(consumerKey, consumerSecret), user,
                    new DefaultMapper(), new DefaultMapper());


                var public_contacts = public_app_api.Contacts.Find().ToList();

            } catch (Exception ex)
            {
                MessageBox.Show(ex.Message + ex.StackTrace);
            }
        }
    }
}

但它会生成 oauth_problem=permission_denied&oauth_problem_advice=The%20consumer%20was%20denied%20access%20to%20this%20resource

错误。

希望有人能帮助我。

4

2 回答 2

1

您需要与“privateKeyAuthendicator”方法集成。

去做这个 :

1.使用以下链接创建私钥/公钥

https://developer.xero.com/documentation/api-guides/create-publicprivate-key

2.创建ConsumerKey和ConsumerSecret

3.将密钥文件包含到您的项目文件夹中

4.使用下面的代码片段访问Xero

var private_app_api = new XeroCoreApi(_xeroSettings.Value.Url, new PrivateAuthenticator(privatekeyFilePath, privatekeypassword),
                new Consumer(consumerKey,consumerSecret), null,
                new DefaultMapper(), new DefaultMapper());
于 2018-01-11T12:15:38.090 回答
0

您需要使用“PrivateAuthenticator”方法进行集成。您使用的方法是公共方法,并使用不适合 Windows 服务的不同身份验证过程。

去做这个:

  1. 访问Xero 开发者门户
  2. 转到“我的应用程序”部分
  3. 选择“添加应用程序”
  4. 从单选按钮选项中选择“私人”(这很重要)
  5. 生成私钥/公钥组合(谷歌如何做到这一点)
  6. 按照自述文件中的代码示例使用 PrivateAuthenticator 方法设置连接
于 2017-10-14T04:06:13.033 回答