In diesem Artikel wird hauptsächlich der Integrationsprozess mit xero OAuth vorgestellt. Der Integrationsprozess mit anderen OAuth von Drittanbietern wird in Zukunft ähnlich sein. Da die offizielle Dokumentation von xero außerdem sehr begrenzt ist, ist es notwendig, sie zusammenzufassen.
Xero ist ein Finanzsystem, das die Implementierung des Produktabrechnungsmoduls ersetzen kann.
www.xero.com
Erfahren Sie mehr über OAuth:
http://www.ruanyifeng. com /blog/2014/05/oauth_2_0.html
http://baike.baidu.com/view/6619164.htm
Um es zusammenzufassen, für SystemA-Benutzer Um auf die Ressourcen von SystemB zuzugreifen, kann der Benutzer von sysB angeben, welche Teile (Module) in SysB SysA für den Zugriff zugänglich gemacht werden, und er wird sysA außerdem ein Token und ein Zertifikat geben. Jedes Mal, wenn sysA auf sysB zugreift, muss es das Token und das Zertifikat mitbringen.
1. Nuget pkg installieren:
2. Einen Wapper erstellen, um den Interaktionsprozess zu kapseln
Voraussetzungen:
1 zu installieren
2. Bereits erhaltener Schlüssel/Geheimnis
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 (wird hauptsächlich für die Funktion „over write xero de AuthorizeUser“ verwendet, der Browser wird geöffnet standardmäßig):
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. Implementieren Sie die IToken-Schnittstelle, die in Request Token und Access Token unterteilt ist. Das heißt, das Anforderungstoken und das Zugriffstoken müssen beibehalten werden, und das Anforderungstoken kann im Speicher gespeichert werden.
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. Geben Sie die Rückruffunktion an und konfigurieren Sie die Rückrufdomäne in xero
4.1 Anwendung hinzufügen
4.2 Rückrufdomäne konfigurieren, Schlüssel generieren, Geheimnis
4.3 Rückruffunktion:
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 offizieller Git:
https://github.com/XeroAPI/Xero-Net
Das Obige ist der Inhalt der interaktiven Integration mit Xero OAuth unter Verwendung von C# Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!