private ThirdPartyAccessToken() { //尝试从数据库中恢复accessToken _token = _thirdPartyManager.GetAccessToken(); if (_token == null || String.IsNullOrEmpty(_token.AccessToken) || _token.WillbeTimeout) { //初始化AccessToken RequestAccessToken(); } _timer = new Timer(TimerCallback, null, 0, 1000 * 60); }
/// <summary> /// 向服务器请求一个新的 accessToken /// </summary> private void RequestAccessToken() { WeixinThirdPartyGetAccessTokenArgs args = new WeixinThirdPartyGetAccessTokenArgs(); args.ComponentAppId = _configuration.ThirdParty.AppId; args.ComponentAppSecret = _configuration.ThirdParty.AppSecret; args.VerifyTicket = _thirdPartyAuthHandler.GetComponentVerifyTicket(); RequestApiResult <WeixinThirdPartyGetAccessTokenResult> result = ThirdPartyApi.GetAccessToken(args); if (result.Success) { _token = result.ApiResult; //写数据库,用于启动时恢复 _thirdPartyManager.UpdateAccessToken( _token.AccessToken, DateTime.Now.AddSeconds(_token.ExpiresIn)); } else { _log.Write("ThirdPartyAccessToken.GetToken 失败", result.GetDetail(), TraceEventType.Error); } }
/// <summary> /// 从数据库中取出平台自身的token /// </summary> public WeixinThirdPartyGetAccessTokenResult GetAccessToken() { DataTable dt = _dataBase.ExecuteDataSet( "SELECT [AccessToken],[AccessTokenExpiryTime] FROM [ThirdParty]", new string[] { "table" }).Tables[0]; if (dt.Rows.Count == 0) { return(null); } WeixinThirdPartyGetAccessTokenResult token = new WeixinThirdPartyGetAccessTokenResult(); token.AccessToken = dt.Rows[0]["AccessToken"].ToString(); if (dt.Rows[0]["AccessTokenExpiryTime"] != null && dt.Rows[0]["AccessTokenExpiryTime"].ToString() != String.Empty) { token.AccessTokenExpiryTime = DateTime.Parse(dt.Rows[0]["AccessTokenExpiryTime"].ToString()); } else { token.AccessTokenExpiryTime = DateTime.MinValue; } return(token); }