public string Get(string appId)
        {
            if (String.IsNullOrEmpty(appId))
            {
                return(null);
            }

            AuthorizerAccessTokenWrapper wrapper = _accessTokenWrapperList[appId];

            if (wrapper == null)
            {
                lock (_getWrapperLockObj)
                {
                    wrapper = _accessTokenWrapperList[appId];

                    if (wrapper == null)
                    {
                        wrapper = CreateWrapper(appId);
                        _accessTokenWrapperList.TryAdd(appId, wrapper);
                    }
                }
            }

            if (wrapper != null)
            {
                return(wrapper.AccessToken);
            }
            else
            {
                return(null);
            }
        }
        private AuthorizerAccessTokenWrapper CreateWrapper(string appId)
        {
            string refreshToken = _thirdPartyManager.GetAuthorizerRefreshToken(appId);

            if (String.IsNullOrEmpty(refreshToken))
            {
                _log.Write(appId + " 的 RefreshToken 不存在", TraceEventType.Warning);
                return(null);
            }

            RequestApiResult <WeixinThirdPartyGetAuthorizerAccessTokenResult> result =
                ThirdPartyApiWrapper.GetAuthorizerAccessToken(appId, refreshToken);

            if (result.Success)
            {
                AuthorizerAccessTokenWrapper wrapper = new AuthorizerAccessTokenWrapper();
                wrapper.AppId                 = appId;
                wrapper.RefreshToken          = result.ApiResult.RefreshToken;
                wrapper.AccessToken           = result.ApiResult.AccessToken;
                wrapper.AccessTokenExpiryTime = DateTime.Now.AddSeconds(result.ApiResult.ExpiresIn);
                return(wrapper);
            }

            return(null);
        }
        private void UpdateWrapper(AuthorizerAccessTokenWrapper wrapper)
        {
            RequestApiResult <WeixinThirdPartyGetAuthorizerAccessTokenResult> result =
                ThirdPartyApiWrapper.GetAuthorizerAccessToken(wrapper.AppId, wrapper.RefreshToken);

            if (result.Success)
            {
                wrapper.RefreshToken          = result.ApiResult.RefreshToken;
                wrapper.AccessToken           = result.ApiResult.AccessToken;
                wrapper.AccessTokenExpiryTime = DateTime.Now.AddSeconds(result.ApiResult.ExpiresIn);
            }
        }
        public void Add(string appId, string accessToken, int expiresIn, string refreshToken)
        {
            lock (_getWrapperLockObj)
            {
                AuthorizerAccessTokenWrapper wrapper = new AuthorizerAccessTokenWrapper();
                wrapper.AppId                 = appId;
                wrapper.AccessToken           = accessToken;
                wrapper.AccessTokenExpiryTime = DateTime.Now.AddSeconds(expiresIn);
                wrapper.RefreshToken          = refreshToken;

                _accessTokenWrapperList.AddOrUpdate(appId, wrapper,
                                                    (itemAppId, itemWrapper) => { return(wrapper); });
            }
        }