/// <summary> /// 获取可用Token /// </summary> /// <param name="componentAppId"></param> /// <param name="componentVerifyTicket"></param> /// <param name="getNewToken">是否强制重新获取新的Token</param> /// <returns></returns> public static PreAuthCodeResult GetTokenResult(string componentAppId, string componentVerifyTicket, bool getNewToken = false) { if (!PreAuthCodeCollection.ContainsKey(componentAppId)) { throw new WeixinException("此appId尚未注册,请先使用PreAuthCodeContainer.Register完成注册(全局执行一次即可)!"); } var accessTokenBag = PreAuthCodeCollection[componentAppId]; lock (accessTokenBag.Lock) { if (getNewToken || accessTokenBag.ExpireTime <= DateTime.Now) { //已过期,重新获取 accessTokenBag.PreAuthCodeResult = CommonApi.GetPreAuthCode(accessTokenBag.ComponentAppId, accessTokenBag.ComponentAppSecret, componentVerifyTicket); accessTokenBag.ExpireTime = DateTime.Now.AddSeconds(accessTokenBag.PreAuthCodeResult.expires_in); } } return(accessTokenBag.PreAuthCodeResult); }
/// <summary> /// 获取可用AccessToken /// </summary> /// <param name="componentAppId"></param> /// <param name="componentVerifyTicket"></param> /// <param name="getNewToken">是否强制重新获取新的Token</param> /// <returns></returns> public static ComponentAccessTokenResult GetComponentAccessTokenResult(string componentAppId, string componentVerifyTicket, bool getNewToken = false) { if (!CheckRegistered(componentAppId)) { throw new WeixinOpenException(UN_REGISTER_ALERT); } var accessTokenBag = ItemCollection[componentAppId]; lock (accessTokenBag.Lock) { if (getNewToken || accessTokenBag.ComponentAccessTokenExpireTime <= DateTime.Now) { //已过期,重新获取 //var componentVerifyTicket = TryGetComponentVerifyTicket(componentAppId); accessTokenBag.ComponentAccessTokenResult = CommonApi.GetComponentAccessToken(accessTokenBag.ComponentAppId, accessTokenBag.ComponentAppSecret, componentVerifyTicket); accessTokenBag.ComponentAccessTokenExpireTime = DateTime.Now.AddSeconds(accessTokenBag.ComponentAccessTokenResult.expires_in); } } return(accessTokenBag.ComponentAccessTokenResult); }
/// <summary> /// 获取可用Ticket /// </summary> /// <param name="componentAppId"></param> /// <param name="authorizerAppid"></param> /// <param name="getNewTicket">是否强制重新获取新的Ticket</param> /// <returns></returns> public static JsApiTicketResult GetJsApiTicketResult(string componentAppId, string authorizerAppid, bool getNewTicket = false) { if (!CheckRegistered(authorizerAppid)) { Register(componentAppId, authorizerAppid); } var accessTicketBag = ItemCollection[authorizerAppid]; lock (accessTicketBag.Lock) { if (getNewTicket || accessTicketBag.JsApiTicketExpireTime <= DateTime.Now) { //已过期,重新获取 var authorizerAccessToken = TryGetAuthorizerAccessToken(componentAppId, authorizerAppid); accessTicketBag.JsApiTicketResult = CommonApi.GetJsApiTicket(authorizerAccessToken); accessTicketBag.JsApiTicketExpireTime = DateTime.Now.AddSeconds(accessTicketBag.JsApiTicketResult.expires_in); } } return(accessTicketBag.JsApiTicketResult); }
/// <summary> /// 获取可用Token /// </summary> /// <param name="componentAppId"></param> /// <param name="getNewToken">是否强制重新获取新的Token</param> /// <returns></returns> public static PreAuthCodeResult GetPreAuthCodeResult(string componentAppId, bool getNewToken = false) { if (!CheckRegistered(componentAppId)) { throw new WeixinOpenException(UN_REGISTER_ALERT); } var componentBag = ItemCollection[componentAppId]; lock (componentBag.Lock) { if (getNewToken || componentBag.PreAuthCodeExpireTime <= DateTime.Now) { //已过期,重新获取 var componentVerifyTicket = TryGetComponentVerifyTicket(componentAppId); var accessToken = TryGetComponentAccessToken(componentAppId, componentBag.ComponentAppSecret, componentVerifyTicket); var preAuthCodeResult = CommonApi.GetPreAuthCode(componentBag.ComponentAppId, accessToken); //if (preAuthCodeResult) //{ //} componentBag.PreAuthCodeResult = preAuthCodeResult; //TODO:这里有出现expires_in=0的情况,导致始终处于过期状态(也可能是因为参数过期等原因没有返回正确的数据,待观察) var expiresIn = componentBag.PreAuthCodeResult.expires_in > 0 ? componentBag.PreAuthCodeResult.expires_in : 60 * 20;//默认为20分钟 componentBag.PreAuthCodeExpireTime = DateTime.Now.AddSeconds(expiresIn); } } return(componentBag.PreAuthCodeResult); }