/// <summary> /// 注册应用凭证信息,此操作只是注册,不会马上获取Token,并将清空之前的Token, /// </summary> /// <param name="appId"></param> /// <param name="appSecret"></param> public static void Register(string appId, string appSecret) { AccessTokenCollection[appId + "_" + appSecret] = new AccessTokenBag() { AppId = appId, AppSecret = appSecret, ExpireTime = DateTime.MinValue, AccessTokenResult = new AccessTokenResult() }; }
/// <summary> /// 获取可用Token /// </summary> /// <param name="appId"></param> /// <param name="getNewToken">是否强制重新获取新的Token</param> /// <returns></returns> public static AccessTokenResult GetAccessTokenResult(string appId, string appSecret, Func <string, string, string, AccessTokenResult> func, bool getNewToken = false) { string strKey = appId + "_" + appSecret + "_" + typeof(AccessTokenBag).Name; if (!CheckRegistered(strKey)) { Register(appId, appSecret); } var accessTokenBag = AccessTokenCollection[strKey]; lock (accessTokenBag.Lock) { if (getNewToken || accessTokenBag.ExpireTime <= DateTime.Now) { var strDBFlag = System.Configuration.ConfigurationManager.AppSettings["TokenStoreType"]; AccessTokenBag token = null; if (string.IsNullOrEmpty(strDBFlag) || strDBFlag != "Server") { token = AccessTokenCache <AccessTokenBag, AccessTokenResult> .GetAccessTokenResult(appId, appSecret, func, getNewToken); } else { var strUrlTemp = System.Configuration.ConfigurationManager.AppSettings["TokenServer"]; string strUrl = string.Format("{0}?corpId={1}&corpSecret={2}", strUrlTemp, appId, appSecret); var objToken = Innocellence.Weixin.HttpUtility.Get.GetJson <TokenEntity>(strUrl); token = new AccessTokenBag() { TokenResult = new AccessTokenResult() { access_token = objToken.Token, expires_in = objToken.expires_in }, ExpireTime = objToken.AccessTokenExpireTime, CorpId = appId, CorpSecret = appSecret }; } //已过期,重新获取 accessTokenBag.TokenResult = token.TokenResult; accessTokenBag.ExpireTime = token.ExpireTime.AddMinutes(5); //让缓存先过期 } } return(accessTokenBag.TokenResult); }