使用C#进行Xero公共应用程序集成

时间:2017-09-12 12:44:27

标签: c# authentication connection xero-api

我想将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 =的%20consumer%20was%20denied%20access%20to%20this%20resource

错误。

希望有人能帮助我。

2 个答案:

答案 0 :(得分:1)

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

要做到这一点:

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

Postman POST

2.Create ConsumerKey and 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());

答案 1 :(得分:0)

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

要做到这一点:

  1. 访问Xero developer portal
  2. 转到"我的应用"节
  3. 选择"添加应用程序"
  4. 选择"私人"从单选按钮选项(这很重要)
  5. 生成私钥/公钥组合(谷歌如何执行此操作)
  6. 按照readme中的代码示例,使用PrivateAuthenticator方法设置连接