コード例 #1
0
        /// <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));
        }
コード例 #2
0
        /// <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);
            }
        }