


Interagir avec l'intégration Xero OAuth à l'aide de C#
Cet article présente principalement le processus d'intégration avec xero OAuth. Le processus d'intégration avec d'autres OAuth tiers sera similaire à l'avenir. De plus, la documentation officielle de xero étant très limitée, il est nécessaire de la résumer.
Xero est un système financier qui peut être utilisé pour remplacer la mise en œuvre du module de facturation des produits.
www.xero.com
Découvrez OAuth :
http://www.ruanyifeng. com /blog/2014/05/oauth_2_0.html
http://baike.baidu.com/view/6619164.htm
Pour résumer, pour Utilisateurs de SystemA Pour accéder aux ressources de systemB, l'utilisateur de sysB peut spécifier quelles parties (modules) de SysB sont exposées à SysA pour l'accès, et donnera également à sysA un jeton et un certificat. Chaque fois que sysA accède à sysB, il doit apporter le jeton et le certificat.
1. Installez nuget pkg :
2. Créez un wapper pour encapsuler le processus d'interaction
Prérequis :
1. à installer
2. Clé/secret déjà obtenu
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); } }
RuPartnerAuthethicator.cs (principalement utilisé pour écraser la fonction xero de AuthorizeUser, le navigateur sera ouvert par défaut) :
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"); } }
3. Implémentez l'interface IToken, qui est divisée en jeton de demande et jeton d'accès. Autrement dit, le jeton de demande et le jeton d'accès doivent être conservés et le jeton de demande peut être stocké en mémoire.
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)); } }
4. Spécifiez la fonction de rappel et configurez le domaine de rappel dans xero
4.1 Ajouter une application
4.2 Configurer le domaine de rappel, générer la clé, le secret
4.3 Fonction de rappel :
public ActionResult Authorize(string oauth_token, string oauth_verifier, string org, string redirect) { var network = NetworksManagment.Do.GetNetwork(Tenant.NetworkId); var xeroApi = new XeroApiAdapter(new XeroApiParam(network)); var authenthicator = xeroApi.MvcAuthenticator(""); try { // - call XeroTokenServices.Add and store the token in MDXeroToken var token = authenthicator.RetrieveAndStoreAccessToken(network.Id, oauth_token, oauth_verifier, org); var organization = xeroApi.CoreApi.Organisation; ... TempData.AddNotification(NotifcationType.Success, "Xero connected successfully"); } catch (Exception ex) { TempData.AddNotification("Error connecting to Xero", ex); } if (string.IsNullOrEmpty(redirect)) { return RedirectToAction("Index"); } return Redirect(redirect); }
xero official git :
https://github.com/XeroAPI/Xero-Net
Ce qui précède est le contenu de l'intégration interactive avec Xero OAuth à l'aide de C# For. pour plus de contenu connexe, veuillez suivre le site Web PHP chinois (www.php.cn) !

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide d'Active Directory avec C#. Nous discutons ici de l'introduction et du fonctionnement d'Active Directory en C# ainsi que de la syntaxe et de l'exemple.

Guide du générateur de nombres aléatoires en C#. Nous discutons ici du fonctionnement du générateur de nombres aléatoires, du concept de nombres pseudo-aléatoires et sécurisés.

Guide de la vue Grille de données C#. Nous discutons ici des exemples de la façon dont une vue de grille de données peut être chargée et exportée à partir de la base de données SQL ou d'un fichier Excel.

Guide des modificateurs d'accès en C#. Nous avons discuté de l'introduction Types de modificateurs d'accès en C# ainsi que d'exemples et de résultats.

Guide de sérialisation C#. Nous discutons ici de l'introduction, des étapes de l'objet de sérialisation C#, du fonctionnement et de l'exemple respectivement.

Guide des nombres premiers en C#. Nous discutons ici de l'introduction et des exemples de nombres premiers en c# ainsi que de l'implémentation du code.

Guide des modèles en C#. Nous discutons ici de l'introduction et des 3 principaux types de modèles en C# ainsi que de ses exemples et de l'implémentation du code.

Guide de Factorial en C#. Nous discutons ici de l'introduction de factorial en c# ainsi que de différents exemples et de l'implémentation du code.
