Exemple #1
0
        public static string GetAccessTokenAndRefresh()
        {
            lock (locker)
            {
                RedisHelper       redis = new RedisHelper();
                WechatAccessToken token = redis.StringGet <WechatAccessToken>("WechatAccessToken");
                if (token == null)
                {
                    token = new WechatAccessToken();
                    AccessTokenResponseMessage message = GetAccessTokenFromWechat();

                    token.AccessToken = message.AccessToken;
                    token.ExpiresIn   = message.ExpiresIn;
                    token.UpdateTime  = DateTime.Now;

                    redis.StringSet <WechatAccessToken>("WechatAccessToken", token);
                }
                else
                {
                    TimeSpan ts = DateTime.Now - token.UpdateTime;
                    if (ts.TotalMinutes > 90)
                    {
                        AccessTokenResponseMessage message = GetAccessTokenFromWechat();

                        token.AccessToken = message.AccessToken;
                        token.ExpiresIn   = message.ExpiresIn;
                        token.UpdateTime  = DateTime.Now;

                        redis.StringSet <WechatAccessToken>("WechatAccessToken", token);
                    }
                }

                return(token.AccessToken);
            }
        }
Exemple #2
0
        /// <summary>
        /// 刷新票据凭证
        /// </summary>
        /// <param name="accessToken"></param>
        /// <returns></returns>
        public static string RefreshAccessToken(string accessToken)
        {
            lock ( locker )
            {
                if (WechatApi.AccessToken != accessToken)
                {
                    return(WechatApi.AccessToken);
                }

                AccessTokenResponseMessage response = WechatApi.GetAccessTokenFromWechat();

                WechatAccessToken token = new WechatAccessToken();

                token.AppId       = ConfigurationManager.AppSettings["AppId"];
                token.AccessToken = response.AccessToken;
                token.ExpiresIn   = response.ExpiresIn;
                token.UpdateTime  = DateTime.Now;

                RedisHelper redis = new RedisHelper();
                redis.StringSet <WechatAccessToken>(token.AppId, token);

                WechatApi.AccessToken = token.AccessToken;

                return(WechatApi.AccessToken);
            }
        }
Exemple #3
0
        /// <summary>
        /// 获取票据凭证
        /// </summary>
        /// <returns></returns>
        public static string GetAccessToken()
        {
            lock ( locker )
            {
                if (string.IsNullOrEmpty(WechatApi.AccessToken))
                {
                    WechatAccessToken token = WechatApi.GetAccessTokenFromDb();

                    if (token == null)
                    {
                        AccessTokenResponseMessage response = WechatApi.GetAccessTokenFromWechat();

                        token = new WechatAccessToken();

                        token.AppId       = ConfigurationManager.AppSettings["AppId"];
                        token.AccessToken = response.AccessToken;
                        token.ExpiresIn   = response.ExpiresIn;
                        token.UpdateTime  = DateTime.Now;

                        RedisHelper redis = new RedisHelper();
                        redis.StringSet <WechatAccessToken>(token.AppId, token);

                        WechatApi.AccessToken = token.AccessToken;
                    }
                    else
                    {
                        WechatApi.AccessToken = token.AccessToken;
                    }
                }

                return(WechatApi.AccessToken);
            }
        }
Exemple #4
0
        /// <summary>
        /// 从微信服务器获取票据凭证
        /// </summary>
        /// <returns></returns>
        public static AccessTokenResponseMessage GetAccessTokenFromWechat()
        {
            string url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}",
                                       ConfigurationManager.AppSettings["AppId"],
                                       ConfigurationManager.AppSettings["AppSecret"]);

            LogHelper.Info("正在调用接口获取票据凭证...");

            AccessTokenResponseMessage response = WechatApi.GetWechatApi <AccessTokenResponseMessage>(url);

            LogHelper.Info("已获取票据凭证。");

            if (response.ErrorCode.HasValue && response.ErrorCode.Value != 0)
            {
                throw new WechatApiInvokeException(response.ErrorCode.Value, response.ErrorMessage, url);
            }

            return(response);
        }