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);
        }