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