/// <summary> /// 【异步方法】获取可用Ticket /// </summary> /// <param name="componentAppId"></param> /// <param name="authorizerAppid"></param> /// <param name="getNewTicket">是否强制重新获取新的Ticket</param> /// <returns></returns> public static async Task <JsApiTicketResult> GetJsApiTicketResultAsync(string componentAppId, string authorizerAppid, bool getNewTicket = false) { TryRegister(componentAppId, authorizerAppid); var accessTicketBag = TryGetItem(authorizerAppid); using (Cache.BeginCacheLock(LockResourceName + ".GetJsApiTicketResult", authorizerAppid))//同步锁 { if (getNewTicket || accessTicketBag.JsApiTicketExpireTime <= DateTime.Now) { //已过期,重新获取 var authorizerAccessToken = await TryGetAuthorizerAccessTokenAsync(componentAppId, authorizerAppid); accessTicketBag.JsApiTicketResult = await ComponentApi.GetJsApiTicketAsync(authorizerAccessToken); accessTicketBag.JsApiTicketExpireTime = ApiUtility.GetExpireTime(accessTicketBag.JsApiTicketResult.expires_in); } } return(accessTicketBag.JsApiTicketResult); }
/// <summary> /// 【异步方法】获取可用Ticket /// </summary> /// <param name="componentAppId"></param> /// <param name="authorizerAppid"></param> /// <param name="getNewTicket">是否强制重新获取新的Ticket</param> /// <returns></returns> public static async Task <JsApiTicketResult> GetJsApiTicketResultAsync(string componentAppId, string authorizerAppid, bool getNewTicket = false) { await TryRegisterAsync(componentAppId, authorizerAppid).ConfigureAwait(false); var accessTicketBag = await TryGetItemAsync(authorizerAppid).ConfigureAwait(false); using (await Cache.BeginCacheLockAsync(LockResourceName + ".GetJsApiTicketResult", authorizerAppid).ConfigureAwait(false))//同步锁 { if (getNewTicket || accessTicketBag.JsApiTicketExpireTime <= SystemTime.Now) { //已过期,重新获取 var authorizerAccessToken = await TryGetAuthorizerAccessTokenAsync(componentAppId, authorizerAppid).ConfigureAwait(false); accessTicketBag.JsApiTicketResult = await ComponentApi.GetJsApiTicketAsync(authorizerAccessToken).ConfigureAwait(false); accessTicketBag.JsApiTicketExpireTime = ApiUtility.GetExpireTime(accessTicketBag.JsApiTicketResult.expires_in); await UpdateAsync(accessTicketBag, null).ConfigureAwait(false);//更新到缓存 } } return(accessTicketBag.JsApiTicketResult); }