/// <summary> /// 获取微信API访问凭证。仅在需要时调用微信API接口,即:若凭证尚在有效期内,则直接取回上一次得到的凭证。 /// </summary> /// <param name="accessToken"></param> /// <param name="forceRenew">强制立即取新。这将废弃并替换旧的,而不管是否旧的令牌是否过期。</param> /// <returns>微信API访问凭证</returns> public string GetTicket(string accessToken, bool forceRenew = false) { //bool forceRenew = false; if (forceRenew) { //立即过期 _JsapiTicketBags.SetExpired(accessToken); } else { forceRenew = _JsapiTicketBags.IsExpired(accessToken); } //forceRenew = CheckTokenExpire(); if (forceRenew) { lock (_lockApiCalling) { //再次检查,通常在等待上一锁释放期间,过期状态已经发生改变。若已改变,则不应再调用API去刷新Token! if (_JsapiTicketBags.IsExpired(accessToken)) { JsapiTicketJson json = JsapiTicketApi.GetJsapiTicket(accessToken).Result; if (json != null && !string.IsNullOrEmpty(json.ticket)) { _JsapiTicketBags.Store(accessToken, new JsapiTicketBag() { JsapiTicketJson = json, AccessToken = accessToken, CreateTime = DateTime.Now }); } } } } return(_JsapiTicketBags.GetTicket(accessToken)); }
/// <summary> /// 获取微信JSSDK访问凭证。仅在需要时调用微信JSSDK接口,即:若凭证尚在有效期内,则直接取回上一次得到的凭证。 /// </summary> /// <param name="accessToken"></param> /// <param name="forceRenew">强制立即取新。这将废弃并替换旧的,而不管是否旧的令牌是否过期。</param> /// <returns>微信JSSDK访问凭证</returns> private string GetTicket(string accessToken, bool forceRenew) { var appId = _options.AppId; var cacheKey = GenerateCacheKey(appId); if (!forceRenew) { if (_cache.TryGetValue(cacheKey, out string jsapiTicket)) { return(jsapiTicket); } } else { _cache.Remove(cacheKey); } try { var json = JsapiTicketApi.GetJsapiTicket(accessToken).Result; if (json == null || string.IsNullOrWhiteSpace(json.ticket) || json.expires_in < 1 || json.expires_in > 7200) { throw WeixinJsapiTicketError.UnknownResponse(); } else { var newJsapiTicket = json.ticket; _cache.Set(cacheKey, newJsapiTicket, TimeSpan.FromSeconds(json.expires_in)); return(newJsapiTicket); } } catch (Exception ex) { throw WeixinJsapiTicketError.GenericError(ex); } }