/// <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); }
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); } } }
/// <summary> /// 获取当前账号的AccessToken /// </summary> /// <param name="wid"></param> /// <param name="errorMessage"></param> /// <returns></returns> public AccessToken GetAccessToken(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); } //从数据库中获取Token var tokenFromDb = _accessTokenRepository.GetAccessToken(appInfo.Id); //如果不存在 if (tokenFromDb == null || tokenFromDb.IsExpired()) { //设置已存的AccessToken过期 _accessTokenRepository.SetAccessTokenExpire(tokenFromDb); //从微信重新获取AccessToken var accessTokenResult = CommonApi.GetToken(appInfo.AppId, appInfo.AppSecret); var newAccessToken = new AccessToken { Id = Guid.NewGuid(), AppId = appInfo.Id, SysDateTime = DateTime.Now, Ticket = accessTokenResult.access_token, Expires = accessTokenResult.expires_in }; //缓存新获取到的AccessToken到数据库 _accessTokenRepository.Add(newAccessToken); errorMessage = string.Empty; return(newAccessToken); } errorMessage = string.Empty; return(tokenFromDb); } catch (Exception exception) { errorMessage = exception.Message; return(null); } } }
public AppInfo GetAppInfo(int wid) { return(wid == 0 ? null : _appInfoRepository.GetAppInfo(wid)); }