public JsApiTicket GetJsApiTicket(int wid, out string errorMessage)
        {
            lock (Obj)
            {
                try
                {
                    var appInfo = _appInfoRepository.GetAppInfo(wid);
                    if (appInfo == null)
                    {
                        errorMessage = string.Format("当前系统无wid为{0}相应公众号的配置", wid);
                        return(null);
                    }
                    if (string.IsNullOrEmpty(appInfo.AppId) || string.IsNullOrEmpty(appInfo.AppSecret))
                    {
                        errorMessage = string.Format("当前系统wid为{0}相应公众号的配置不完整,AppId或者AppSecret未填写完全,请在[我的公众帐号]里补全信息!", wid);
                        return(null);
                    }

                    var jsApiTicketFromDb = _jsApiTicketRepository.GetJsApiTicket(appInfo);

                    //判断是否存在或者是否过期
                    if (jsApiTicketFromDb == null || jsApiTicketFromDb.IsExpired())
                    {
                        //更改已过期的数据
                        _jsApiTicketRepository.SetJsApiTicketExpire(jsApiTicketFromDb);

                        //重新从微信申请ticket
                        string tokenErrorMessage;
                        var    token = new AccessTokenService().GetAccessToken(wid, out tokenErrorMessage);
                        if (token == null || !string.IsNullOrEmpty(tokenErrorMessage))
                        {
                            throw new Exception(string.Format("获取JsApiTicket失败:{0}", tokenErrorMessage));
                        }

                        var result         = OneGulp.WeChat.MP.CommonAPIs.CommonApi.GetTicket(token.Ticket);
                        var newJsApiTicket = new JsApiTicket()
                        {
                            Id          = Guid.NewGuid(),
                            AppId       = wid,
                            Ticket      = result.ticket,
                            Expires     = result.expires_in,
                            SysDateTime = DateTime.Now
                        };

                        _jsApiTicketRepository.Add(newJsApiTicket);

                        errorMessage = string.Empty;
                        return(newJsApiTicket);
                    }

                    errorMessage = string.Empty;
                    return(jsApiTicketFromDb);
                }
                catch (Exception exception)
                {
                    errorMessage = exception.Message;
                    return(null);
                }
            }
        }
        public JsApiTicket GetJsApiTicket(int wid, out string errorMessage)
        {
            lock (Obj)
            {
                try
                {
                    var appInfo = _appInfoRepository.GetAppInfo(wid);
                    if (appInfo == null)
                    {
                        errorMessage = string.Format("当前系统无wid为{0}相应公众号的配置", wid);
                        return null;
                    }
                    if (string.IsNullOrEmpty(appInfo.AppId) || string.IsNullOrEmpty(appInfo.AppSecret))
                    {
                        errorMessage = string.Format("当前系统wid为{0}相应公众号的配置不完整,AppId或者AppSecret未填写完全,请在[我的公众帐号]里补全信息!", wid);
                        return null;
                    }

                    var jsApiTicketFromDb = _jsApiTicketRepository.GetJsApiTicket(appInfo);

                    //判断是否存在或者是否过期
                    if (jsApiTicketFromDb == null || jsApiTicketFromDb.IsExpired())
                    {
                        //更改已过期的数据
                        _jsApiTicketRepository.SetJsApiTicketExpire(jsApiTicketFromDb);

                        //重新从微信申请ticket
                        string tokenErrorMessage;
                        var token = new AccessTokenService().GetAccessToken(wid, out tokenErrorMessage);
                        if (token == null || !string.IsNullOrEmpty(tokenErrorMessage))
                            throw new Exception(string.Format("获取JsApiTicket失败:{0}", tokenErrorMessage));

                        var result = OneGulp.WeChat.MP.CommonAPIs.CommonApi.GetTicket(token.Ticket);
                        var newJsApiTicket = new JsApiTicket()
                        {
                            Id = Guid.NewGuid(),
                            AppId = wid,
                            Ticket = result.ticket,
                            Expires = result.expires_in,
                            SysDateTime = DateTime.Now
                        };

                        _jsApiTicketRepository.Add(newJsApiTicket);

                        errorMessage = string.Empty;
                        return newJsApiTicket;
                    }

                    errorMessage = string.Empty;
                    return jsApiTicketFromDb;
                }
                catch (Exception exception)
                {
                    errorMessage = exception.Message;
                    return null;
                }
            }
        }
Beispiel #3
0
        public void GetAccessToken()
        {
            var iAccessToken = DependencyManager.Resolve<IAccessTokenRepository>();
            var token = iAccessToken.GetAccessToken(1);

            AccessTokenService accessTokenService = new AccessTokenService();
            string errorMessage;
            var result = accessTokenService.GetAccessToken(1, out errorMessage);

            Assert.IsTrue(result != null && !result.IsExpired());
        }
Beispiel #4
0
        /// <summary>
        /// 获取微信用户信息
        /// </summary>
        /// <param name="appId"></param>
        /// <param name="openId"></param>
        /// <returns></returns>
        public UserInfo GetUserInfo(int appId, string openId)
        {
            //判断appId是否合法
            var appInfo = _appInfoRepository.GetAppInfo(appId);
            if (appInfo == null)
                throw new Exception(string.Format("获取用户信息失败:通过参数{0}获取到的公众号信息为空", appId));

            var userInfoFromDb = _userRepository.GetUserInfo(appId, openId);
            //如果从数据库获取用户为空,则需要重新从微信更新
            string tokenErrorMessage;
            var accessToken = new AccessTokenService().GetAccessToken(appId, out tokenErrorMessage);

            if (accessToken == null || !string.IsNullOrEmpty(tokenErrorMessage))
                throw new Exception(string.Format("获取用户信息失败:", tokenErrorMessage));
            if (userInfoFromDb != null) return userInfoFromDb;

            var newUserInfoFromWeiXin = UserApi.Info(accessToken.Ticket, openId);
            if (newUserInfoFromWeiXin == null)
                throw new Exception("获取用户信息失败:从微信获取到的用户为空");
            var newUserInfo = new UserInfo
            {
                AppId = appId,
                Openid = newUserInfoFromWeiXin.openid,
                City = newUserInfoFromWeiXin.city,
                Country = newUserInfoFromWeiXin.country,
                Groupid = newUserInfoFromWeiXin.groupid,
                Headimgurl = newUserInfoFromWeiXin.headimgurl,
                Language = newUserInfoFromWeiXin.language,
                Nickname = newUserInfoFromWeiXin.nickname,
                Province = newUserInfoFromWeiXin.province,
                Remark = newUserInfoFromWeiXin.remark,
                Sex = newUserInfoFromWeiXin.sex,
                //Subscribe = newUserInfoFromWeiXin.subscribe,
                SubscribeTime = newUserInfoFromWeiXin.subscribe_time
            };

            //缓存到数据库
            _userRepository.Add(newUserInfo);

            return newUserInfo;
        }