ホームページ >バックエンド開発 >C#.Net チュートリアル >C# を使用した Xero OAuth 統合との対話

C# を使用した Xero OAuth 統合との対話

黄舟
黄舟オリジナル
2017-02-28 11:51:391898ブラウズ

この記事では主に xero OAuth との統合プロセスを紹介します。将来的には他のサードパーティ OAuth との統合プロセスも同様になる予定です。 また、xero の公式ドキュメントは非常に限られているため、それを要約する必要があります。
Xero は、製品請求モジュールの実装を置き換えるために使用できる金融システムです。
www.xero.com

OAuth について学ぶ:

http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

http://baike.baidu.com / view/6619164.htm


要約すると、SystemA ユーザーが systemB のリソースにアクセスするために、sysB ユーザーは、SysB 内のどの部分 (モジュール) をアクセスのために SysA に公開するかを指定することができ、同時に、 sysA にはトークンと証明書が与えられます。 sysA が sysB にアクセスするたびに、トークンと証明書を取得する必要があります。 nuget PKGをインストールします。 cs (主に xero de AuthorizeUser 関数の上書きに使用され、デフォルトでブラウザが開きます):


public class XeroApiAdapter
    {
        private readonly IXeroApiParameter _parameter;
        private const string PARTNER_URL = "https://api-partner.network.xero.com";
        private const string BASE_URL = "https://api.xero.com";


        public XeroCoreApi CoreApi { get; private set; }


        private readonly X509Certificate2 _signingCertificate;
        private readonly X509Certificate2 _partnerCertificate;


        /// <summary>
        /// 
        /// </summary>
        /// <param name="parameter"></param>
        public XeroApiAdapter(IXeroApiParameter parameter)
        {
            _signingCertificate = XeroOAuthSettings.Fetch.SigningCertificate.SelectedCertificate;
            if (_signingCertificate == null)
            {
                throw new Exception("Signing certificate must be defined");
            }


            _partnerCertificate = XeroOAuthSettings.Fetch.PartnerCertificate.SelectedCertificate;
            if (_partnerCertificate == null)
            {
                throw new Exception("partner certificate must be defined");
            }


            _parameter = parameter;
            var user = new ApiUser { OrganisationId = parameter.NetworkId, Name = parameter.NetworkId };




            CoreApi = new XeroCoreApi(PARTNER_URL,
            new RuPartnerAuthethicator(PARTNER_URL, BASE_URL, XeroTokenServices.Do,
                _signingCertificate, _partnerCertificate),
            new Consumer(parameter.ConsumerKey, parameter.ConsumerSecret), user,
            new DefaultMapper(), new DefaultMapper());
        }


        public PartnerMvcAuthenticator MvcAuthenticator(string callBack)
        {
            return new PartnerMvcAuthenticator(PARTNER_URL, BASE_URL, callBack, XeroTokenServices.Do,
                _signingCertificate, _partnerCertificate,
                new Consumer(_parameter.ConsumerKey, _parameter.ConsumerSecret),
                XeroRequestTokenServices.Do);
        }




        
    }


3. リクエスト トークンとアクセス トークンに分かれている IToken インターフェイスを実装します。 つまり、リクエスト トークンとアクセス トークンは永続化する必要があり、リクエスト トークンはメモリに保存できます。


public class RuPartnerAuthethicator : PartnerAuthenticator
    {
        public RuPartnerAuthethicator(string baseUri, string authorizeUri, ITokenStore store, string signingCertificatePath, string certificatePath, string password) : base(baseUri, authorizeUri, "", store, signingCertificatePath, certificatePath, password)
        {
        }


        public RuPartnerAuthethicator(string baseUri, string authorizeUri, ITokenStore store, X509Certificate2 signingCertificate, X509Certificate2 certificate) : base(baseUri, authorizeUri, "", store, signingCertificate, certificate)
        {
        }


        protected override string AuthorizeUser(IToken token)
        {
            throw new XeroRenewAccessTokenException("Please renew access token");
        }
    }

4. xeroでコールバック関数を指定し、コールバックドメインを設定する

4.1 アプリケーションを追加する

4.2 コールバックドメインを設定し、キー、シークレットを生成する


4.3コールバック機能:

 public class XeroTokenServices : MongoService, ITokenStore
    {
        public static XeroTokenServices Do
        {
            get
            {
                return new XeroTokenServices();
            }


        }


        private XeroTokenServices()
        {


        }


        private MongoCollection<MDXeroToken> XeroTokenStore
        {
            get
            {
                return Connection.GetMongoCollection<MDXeroToken>("XeroTokenStore");
            }
        }


        public void Add(IToken token)
        {
            //Lets delete first as we are not sure if Xero have a delete
            Delete(token);


            XeroTokenStore.Save(new MDXeroToken(token));
        }


        public void Delete(IToken token)
        {
            XeroTokenStore.Remove(Query<MDXeroToken>.EQ(x => x.UserId, token.UserId));
        }


        public IToken Find(string user)
        {
            var token = XeroTokenStore.FindOne(Query<MDXeroToken>.EQ(x => x.UserId, user));
            
            return token;
        }


        public void ClearTokenForNetwork(string id)
        {
            XeroTokenStore.Remove(Query<MDXeroToken>.EQ(x => x.UserId, id));
        }
    }


    public class XeroRequestTokenServices : MongoService, ITokenStore
    {
        public static XeroRequestTokenServices Do
        {
            get { return new XeroRequestTokenServices(); }
        }


        private XeroRequestTokenServices()
        {


        }


        private MongoCollection<MDXeroToken> XeroTokenStore
        {
            get
            {
                return Connection.GetMongoCollection<MDXeroToken>("XeroRequestTokenStore");
            }
        }




        public void Add(IToken token)
        {
            //Lets delete first as we are not sure if Xero have a delete
            Delete(token);


            XeroTokenStore.Save(new MDXeroToken(token));
        }


        public void Delete(IToken token)
        {
            XeroTokenStore.Remove(Query<MDXeroToken>.EQ(x => x.UserId, token.UserId));
        }


        public IToken Find(string user)
        {
            return XeroTokenStore.FindOne(Query<MDXeroToken>.EQ(x => x.UserId, user));
        }




        public void ClearTokenForNetwork(string id)
        {
            XeroTokenStore.Remove(Query<MDXeroToken>.EQ(x => x.UserId, id));
        }
    }

xero 公式 git: https://github.com/XeroAPI/Xero-Net

上記は、C# を使用した Xero OAuth との対話型統合の内容です。さらに関連する内容については、PHP に注目してください。中国語のウェブサイト (www.php .cn)!


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。