//static Dictionary<string, JsApiTicketBag> JsApiTicketCollection =
        //   new Dictionary<string, JsApiTicketBag>(StringComparer.OrdinalIgnoreCase);

        /// <summary>
        /// 注册应用凭证信息,此操作只是注册,不会马上获取Ticket,并将清空之前的Ticket,
        /// </summary>
        /// <param name="appId"></param>
        /// <param name="appSecret"></param>
        /// <param name="name">标记JsApiTicket名称(如微信公众号名称),帮助管理员识别</param>
        /// 此接口不提供异步方法
        public static void Register(string appId, string appSecret, string name = null)
        {
            RegisterFunc = () =>
            {
                using (FlushCache.CreateInstance())
                {
                    var bag = new OAuthAccessTokenBag()
                    {
                        Name      = name,
                        AppId     = appId,
                        AppSecret = appSecret,
                        OAuthAccessTokenExpireTime = DateTime.MinValue,
                        OAuthAccessTokenResult     = new OAuthAccessTokenResult()
                    };
                    Update(appId, bag);
                    return(bag);
                }
            };

            RegisterFunc();
        }
Ejemplo n.º 2
0
 public static void Register(string appId, string appSecret, string name = null)
 {
     //记录注册信息,RegisterFunc委托内的过程会在缓存丢失之后自动重试
     RegisterFunc = () =>
     {
         using (FlushCache.CreateInstance())
         {
             var bag = new JsApiTicketBag()
             {
                 Name              = name,
                 AppId             = appId,
                 AppSecret         = appSecret,
                 ExpireTime        = DateTime.MinValue,
                 JsApiTicketResult = new JsApiTicketResult()
             };
             Update(BuildingKey(appId, appSecret), bag);
             return(bag);
         }
     };
     RegisterFunc();
 }
Ejemplo n.º 3
0
        /// <summary>
        /// 注册应用凭证信息,此操作只是注册,不会马上获取Token,并将清空之前的Token,
        /// </summary>
        /// <param name="componentAppId"></param>
        /// <param name="componentAppSecret"></param>
        /// <param name="getComponentVerifyTicketFunc">获取ComponentVerifyTicket的方法</param>
        /// <param name="getAuthorizerRefreshTokenFunc">从数据库中获取已存的AuthorizerAccessToken的方法</param>
        /// <param name="authorizerTokenRefreshedFunc">AuthorizerAccessToken更新后的回调</param>
        public static void Register(string componentAppId, string componentAppSecret, Func <string, string> getComponentVerifyTicketFunc, Func <string, string> getAuthorizerRefreshTokenFunc, Action <string, RefreshAuthorizerTokenResult> authorizerTokenRefreshedFunc)
        {
            //激活消息列队线程


            if (GetComponentVerifyTicketFunc == null)
            {
                GetComponentVerifyTicketFunc  = getComponentVerifyTicketFunc;
                GetAuthorizerRefreshTokenFunc = getAuthorizerRefreshTokenFunc;
                AuthorizerTokenRefreshedFunc  = authorizerTokenRefreshedFunc;
            }

            using (FlushCache.CreateInstance())
            {
                Update(componentAppId, new ComponentBag()
                {
                    ComponentAppId     = componentAppId,
                    ComponentAppSecret = componentAppSecret,
                });
            }
        }
Ejemplo n.º 4
0
 /// <summary>
 /// 注册应用凭证信息,此操作只是注册,不会马上获取Token,并将清空之前的Token,
 /// </summary>
 /// <param name="corpId"></param>
 /// <param name="corpSecret"></param>
 /// <param name="name">标记Provider名称(如微信公众号名称),帮助管理员识别</param>
 public static void Register(string corpId, string corpSecret, string name = null)
 {
     RegisterFunc = () =>
     {
         using (FlushCache.CreateInstance())
         {
             var bag = new ProviderTokenBag()
             {
                 Name                = name,
                 CorpId              = corpId,
                 CorpSecret          = corpSecret,
                 ExpireTime          = DateTime.MinValue,
                 ProviderTokenResult = new ProviderTokenResult()
             };
             Update(BuildingKey(corpId, corpSecret), bag);
             //Update(corpId, bag);
             return(bag);
         }
     };
     RegisterFunc();
 }
Ejemplo n.º 5
0
        /// <summary>
        /// 注册应用凭证信息,此操作只是注册,不会马上获取Token,并将清空之前的Token
        /// </summary>
        /// <param name="clientId"></param>
        /// <param name="clientSecret"></param>
        /// <param name="preAuthCode"></param>
        /// <param name="redirectUri"></param>
        /// <param name="state"></param>
        /// <param name="name"></param>
        public static void Register(
            string clientId,
            string clientSecret,
            string preAuthCode,
            string redirectUri,
            string state = null,
            string name  = null)
        {
            //如果此clinetId 未注册,则进行注册
            if (!CheckRegistered(clientId))
            {
                //记录注册信息,RegisterFunc委托内的过程会在缓存丢失之后自动重试
                RegisterFunc = () =>
                {
                    using (FlushCache.CreateInstance())
                    {
                        var bag = new AccessTokenBag()
                        {
                            Key                   = clientId,
                            Name                  = name,
                            ClientId              = clientId,
                            ClientSecret          = clientSecret,
                            PreAuthCode           = preAuthCode,
                            RedirectUri           = redirectUri,
                            State                 = state,
                            AccessTokenExpireTime = DateTime.MinValue,
                            AccessTokenResult     = new AccessTokenResult()
                        };
                        Update(clientId, bag);
                        return(bag);
                    }
                };

                RegisterFunc();

                //OAuthAccessTokenContainer进行自动注册
                //OAuthAccessTokenContainer.Register(clientId, clientSecret, name);
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 获取Session
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public static SessionBag GetSession(string key)
        {
            var bag = TryGetItem(key);

            if (bag == null)
            {
                return(null);
            }

            if (bag.ExpireTime < DateTime.Now)
            {
                //已经过期
                Cache.RemoveFromCache(key);
                return(null);
            }

            using (FlushCache.CreateInstance())
            {
                bag.ExpireTime = GetExpireTime();//滚动过期时间
                Update(key, bag);
            }
            return(bag);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 注册应用凭证信息,此操作只是注册,不会马上获取Ticket,并将清空之前的Ticket,
        /// </summary>
        /// <param name="clientId"></param>
        /// <param name="clientSecret"></param>
        /// <param name="name">标记Authorizer名称,帮助管理员识别</param>
        private static void Register(string clientId, string clientSecret, string name = null)
        {
            RegisterFunc = () =>
            {
                using (FlushCache.CreateInstance())
                {
                    var bag = new AuthrizationBag()
                    {
                        Name = name,

                        AuthorizerClientId     = clientId,
                        AuthorizerClientSecret = clientSecret,
                        OAuthAccessTokenResult = new OAuthAccessTokenResult(),
                        AccessTokenExpiryTime  = DateTime.MinValue,
                    };
                    Update(clientId, bag);
                    return(bag);
                }
            };
            RegisterFunc();

            //TODO:这里也可以考虑尝试进行授权(会影响速度)
        }
Ejemplo n.º 8
0
        /// <summary>
        /// 注册应用凭证信息,此操作只是注册,不会马上获取Ticket,并将清空之前的Ticket,
        /// </summary>
        /// <param name="authorizerAppId"></param>
        /// <param name="componentAppId"></param>
        /// <param name="name">标记Authorizer名称(如微信公众号名称),帮助管理员识别</param>
        private static void Register(string componentAppId, string authorizerAppId, string name = null)
        {
            var componentBag = ComponentContainer.TryGetItem(componentAppId);

            if (componentBag == null)
            {
                throw new WeixinOpenException(string.Format("注册AuthorizerContainer之前,必须先注册对应的ComponentContainer!ComponentAppId:{0},AuthorizerAppId:{1}", componentAppId, authorizerAppId));
            }

            RegisterFunc = () =>
            {
                using (FlushCache.CreateInstance())
                {
                    var bag = new AuthorizerBag()
                    {
                        Name = name,

                        AuthorizerAppId = authorizerAppId,
                        ComponentAppId  = componentAppId,

                        AuthorizationInfo           = new AuthorizationInfo(),
                        AuthorizationInfoExpireTime = DateTime.MinValue,

                        AuthorizerInfo = new AuthorizerInfo(),
                        //AuthorizerInfoExpireTime = DateTime.MinValue,

                        JsApiTicketResult     = new JsApiTicketResult(),
                        JsApiTicketExpireTime = DateTime.MinValue,
                    };
                    Update(authorizerAppId, bag);
                    return(bag);
                }
            };
            RegisterFunc();

            //TODO:这里也可以考虑尝试进行授权(会影响速度)
        }
Ejemplo n.º 9
0
        public void CreateInstanceTest()
        {
            var instance = FlushCache.CreateInstance();

            Assert.IsNotNull(instance);
        }