public async Task <int> ExecSendMsgAsync(string accessToken, string data, int s) { LogHelper.Info("WeChatAppAuthorizeController->ExecSendMsgAsync"); try { var a = await ThreadSleepAsync(s); accessToken = WeChatAppDecrypt.GetToken(); //反序列化结果 WechatToken tokenModel = JsonConvert.DeserializeObject <WechatToken>(accessToken); string url = string.Format("https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token={0}", tokenModel.access_token); HttpWebRequest hwr = WebRequest.Create(url) as HttpWebRequest; hwr.Method = "POST"; hwr.ContentType = "application/x-www-form-urlencoded"; byte[] payload; payload = System.Text.Encoding.UTF8.GetBytes(data); //通过UTF-8编码 hwr.ContentLength = payload.Length; Stream writer = hwr.GetRequestStream(); writer.Write(payload, 0, payload.Length); writer.Close(); var result = hwr.GetResponse() as HttpWebResponse; //此句是获得上面URl返回的数据 string strMsg = WebResponseGet(result); LogHelper.Debug("strMsgAsync:" + strMsg); } catch (Exception e) { LogHelper.Debug("strMsgAsyncError:" + e.Message); }; return(1); }
public ActionResult GetToken() { ResponseMessage msg = new ResponseMessage(); var result = WeChatAppDecrypt.GetToken(); msg.Status = true; msg.Data = result; return(Json(msg, JsonRequestBehavior.AllowGet)); }
public ActionResult GetToken() { LogHelper.Info("WeChatAppAuthorizeController->GetToken"); ResponseMessage msg = new ResponseMessage(); var result = WeChatAppDecrypt.GetToken(); msg.Status = true; msg.Data = result; return(Json(msg, JsonRequestBehavior.AllowGet)); }
public ActionResult <UserBindResModel> GetVisitOpenID(string code) { try { UserBindResModel result = new UserBindResModel(); WeChatAppDecrypt decrypt = new WeChatAppDecrypt(); string openIdAndSessionKeyString = decrypt.GetOpenID(code); string openId = ""; openId = openIdAndSessionKeyString; string msg = string.Empty; result.Status = "0"; //if(openId=="") //{ // result.BindStatus = "1"; // result.OpenID = openId; // msg += "获取openid失败"; // result.Msg = msg; // return Ok(result); //} var userBind_Infos = _loginService.UserBindSearch(openId); if (userBind_Infos.Count == 0) { result.BindStatus = "0"; result.OpenID = openId; msg += "用户待绑定"; result.Msg = msg; } else { result.BindStatus = "1"; result.OpenID = openId; result.RoleName = "0"; result.Moblie = userBind_Infos[0].Moblie; result.userId = userBind_Infos[0].userId; result.passWord = _loginService.Searchpwd(userBind_Infos[0].userId).UserPwd; msg += "用户已绑定;"; } return(Ok(result)); } catch (Exception ex) { return(NotFound()); } }
public ActionResult GetOpenIdAndSessionKeyString(string code) { ResponseMessage msg = new ResponseMessage(); msg.Status = true; try { string temp = WeChatAppDecrypt.GetOpenIdAndSessionKeyString(code); msg.Data = temp; } catch (Exception e) { msg.Status = false; } return(Json(msg, JsonRequestBehavior.AllowGet)); }
public ActionResult GetOpenIdAndSessionKeyString(string code) { LogHelper.Info("WeChatAppAuthorizeController->GetOpenIdAndSessionKeyString"); ResponseMessage msg = new ResponseMessage(); msg.Status = true; try { string temp = WeChatAppDecrypt.GetOpenIdAndSessionKeyString(code); msg.Data = temp; } catch (Exception e) { msg.Status = false; LogHelper.Error($"GetOpenIdAndSessionKeyString:{e.Message}"); } return(Json(msg, JsonRequestBehavior.AllowGet)); }
/// <summary> /// 获取手机号 /// </summary> /// <param name="session">用户session</param> /// <param name="encryptedData">用户信息的加密数据</param> /// <param name="iv">加密算法的初始向量</param> /// <returns></returns> public Stream GetPhoneNumber(string session, string encryptedData, string iv) { try { WeChatAppDecrypt wcad = new WeChatAppDecrypt(); string resul = wcad.GetPhoneNumber(session, encryptedData, iv); if (!string.IsNullOrEmpty(resul)) { return(new MemoryStream(Encoding.UTF8.GetBytes(resul))); } else { return(new MemoryStream(Encoding.UTF8.GetBytes("error"))); } } catch (Exception err) { Logger.Error("GetPhoneNumber Error", err); return(new MemoryStream(Encoding.UTF8.GetBytes("error"))); } }
/// <summary> /// 通过code获取微信openid和SessionKey /// </summary> /// <param name="code">login获取的code</param> /// <returns></returns> public Stream GetOpenidAndSessionKeyByCode(string code) { try { WeChatAppDecrypt wechat = new WeChatAppDecrypt(); string openidAndSessionKey = wechat.GetOpenIdAndSessionKeyString(code); if (!string.IsNullOrEmpty(openidAndSessionKey)) { return(new MemoryStream(Encoding.UTF8.GetBytes(openidAndSessionKey))); } else { return(new MemoryStream(Encoding.UTF8.GetBytes("error"))); } } catch (Exception err) { Logger.Error("GetOpenidAndSessionKeyByCode Error", err); return(new MemoryStream(Encoding.UTF8.GetBytes("error"))); } }
public async Task <WechatUserInfo> WeChatAuthenticate([FromBody] WechatLoginInfo model) { var c = new WeChatAppDecrypt("wx3462f1fc533ebe71", "a3f39a8d450d822d232eb9ae2c43fc78"); var r = c.Decrypt(model); if (r == null) { throw new UserFriendlyException("微信认证失败"); } var customer = await _customerAppService.GetCustomerByKeyAsync(new EntityDto <string>(r.openId)); if (customer == null) { return(r); } r.hasRegister = true; r.CustomerId = customer.Id; r.Family = customer.Family; r.Balance = customer.Balance; r.FamilyCode = customer.FamilyCode; r.Title = customer.Title; r.JobsCount = customer.JobsCount; return(r); }
public UserDto PostLogin(LoginPo loginPo) { var wli = new WechatLoginInfo(); wli.code = loginPo.code; wli.encryptedData = loginPo.encryptedData; wli.iv = loginPo.iv; wli.rawData = loginPo.rawData; wli.signature = loginPo.signature; WechatUserInfo wechatResult = new WeChatAppDecrypt().Decrypt(wli); if (wechatResult == null || string.IsNullOrWhiteSpace(wechatResult.openId)) { throw new BizException("授权失败"); } wechatResult.nickName = HttpUtility.UrlEncode(wechatResult.nickName); var userInfo = userClient.GetUserByOpenId(wechatResult.openId); var userid = 0; if (null == userInfo || userInfo.Id <= 0) { var model = new User() { CreateTime = DateTime.Now, Phone = wechatResult.phoneNumber, wx_HeadImgUrl = wechatResult.avatarUrl, wx_NickName = wechatResult.nickName, wx_OpenID = wechatResult.openId, wx_UnionID = wechatResult.unionId, HasAuthenticated = false, RoleName = "1", Status = 1 }; var obj = userClient.PostUser(model); if (obj == null || obj.Id <= 0) { throw new BizException("用户新增失败"); } else { userid = obj.Id; } } else { userid = userInfo.Id; } // 1、获取IdentityServer接口文档 string userUrl = dynamicMiddleUrl.GetMiddleUrl("https", "UserServices"); DiscoveryDocumentResponse discoveryDocument = httpClient.GetDiscoveryDocumentAsync(userUrl).Result; if (discoveryDocument.IsError) { Console.WriteLine($"[DiscoveryDocumentResponse Error]: {discoveryDocument.Error}"); } // 2、根据用户名和密码建立token TokenResponse tokenResponse = httpClient.RequestPasswordTokenAsync(new PasswordTokenRequest() { Address = discoveryDocument.TokenEndpoint, ClientId = "client-password", ClientSecret = "secret", GrantType = "password", UserName = userid.ToString(), Password = userInfo.Phone }).Result; // 3、返回AccessToken if (tokenResponse.IsError) { throw new BizException(tokenResponse.Error + "," + tokenResponse.Raw); } // 4、获取用户信息 UserInfoResponse userInfoResponse = httpClient.GetUserInfoAsync(new UserInfoRequest() { Address = discoveryDocument.UserInfoEndpoint, Token = tokenResponse.AccessToken }).Result; // 5、返回UserDto信息 UserDto userDto = new UserDto(); userDto.UserId = userInfoResponse.Json.TryGetString("sub"); userDto.UserName = loginPo.UserName; userDto.AccessToken = tokenResponse.AccessToken; userDto.ExpiresIn = tokenResponse.ExpiresIn; return(userDto); }
public ResponseBaseModel <WeChatAuthResponseModel> GetUserOpenId([FromBody] WeChatLoginInfo loginInfo) { var data = RedisCacheHelper.Get <WeChatAuthResponseModel>(RedisCacheKey.AuthInfoKey + loginInfo.code); if (data != null) { return(new ResponseBaseModel <WeChatAuthResponseModel> { ResultCode = ResponceCodeEnum.Success, Message = "微信认证成功", Data = data }); } var weChatCheck = new WeChatAppDecrypt( string.IsNullOrEmpty(loginInfo.sys) ? AppConfigurationHelper.GetString("XcxAppID", "") : AppConfigurationHelper.GetString("XcxAppID" + loginInfo.sys), string.IsNullOrEmpty(loginInfo.sys) ? AppConfigurationHelper.GetString("XcxAppSecrect", "") : AppConfigurationHelper.GetString("XcxAppSecrect" + loginInfo.sys, "")); var openIdAndSessionKeyModel = weChatCheck.DecodeOpenIdAndSessionKey(loginInfo); if (openIdAndSessionKeyModel == null) { return(new ResponseBaseModel <WeChatAuthResponseModel> { ResultCode = ResponceCodeEnum.Fail, Message = "微信认证失败" }); } var isValidData = weChatCheck.VaildateUserInfo(loginInfo, openIdAndSessionKeyModel); if (!isValidData) { return(new ResponseBaseModel <WeChatAuthResponseModel> { ResultCode = ResponceCodeEnum.Fail, Message = "请求信息验签失败" }); } var responseData = weChatCheck.Decrypt(loginInfo.encryptedData, loginInfo.iv, openIdAndSessionKeyModel.session_key); if (responseData == null) { return(new ResponseBaseModel <WeChatAuthResponseModel> { ResultCode = ResponceCodeEnum.Fail, Message = "微信认证失败" }); } var server = new WechatAccountService(); var searchOpenIdModel = server.GetByOpenId(responseData.openId); //TODO:新的访问者 if (searchOpenIdModel == null) { var newModel = new WeChatAccountModel { AvatarUrl = responseData.avatarUrl, CreateTime = DateTime.Now, Gender = DataTypeConvertHelper.ToInt(responseData.gender, 1), IsDel = FlagEnum.HadZore.GetHashCode(), NickName = responseData.nickName, OpenId = responseData.openId, Remarks = "新访问用户", FamilyCode = "", HadBindFamily = FlagEnum.HadZore }; server.SaveModel(newModel); var newSysModel = new SysUser { Birthday = "1900-01-01 00:00:00", CreateTime = DateTime.Now, IsDel = FlagEnum.HadZore, CreateAuth = 1, HeadUrl = newModel.AvatarUrl, Password = AesHelper.AesEncrypt("123456"), Sex = EnumHelper.GetEnumByValue <SexEnum>(newModel.Gender), UpdateAuth = 1, UpdateTime = DateTime.Now, UserType = UserTypeEnum.Usually, UserName = Guid.NewGuid().ToString() }; var accountService = new AccountService(); var resultId = accountService.InsertWeChatUserAndBind(newSysModel, newModel.OpenId); newModel.AccountId = resultId; searchOpenIdModel = newModel; } //TODO:未绑定用户,自动注册绑定 else if (searchOpenIdModel.AccountId < 1) { var newSysModel = new SysUser { Birthday = "1900-01-01 00:00:00", CreateTime = DateTime.Now, IsDel = FlagEnum.HadZore, CreateAuth = 1, HeadUrl = searchOpenIdModel.AvatarUrl, Password = AesHelper.AesEncrypt("123456"), Sex = EnumHelper.GetEnumByValue <SexEnum>(searchOpenIdModel.Gender), UpdateAuth = 1, UpdateTime = DateTime.Now, UserType = UserTypeEnum.Usually, UserName = Guid.NewGuid().ToString() }; var accountService = new AccountService(); var resultId = accountService.InsertWeChatUserAndBind(newSysModel, searchOpenIdModel.OpenId); searchOpenIdModel.AccountId = resultId; } //TODO:更新用户的昵称,头像 else { searchOpenIdModel.AvatarUrl = responseData.avatarUrl; searchOpenIdModel.NickName = responseData.nickName; searchOpenIdModel.UpDateTime = DateTime.Now; server.SaveModel(searchOpenIdModel); } //TODO:获取家庭成员信息 var userIds = new List <long>(); if (searchOpenIdModel.HadBindFamily == FlagEnum.HadOne && !string.IsNullOrEmpty(searchOpenIdModel.FamilyCode)) { var members = _familyServer.GetFamilyMembers(searchOpenIdModel.FamilyCode); if (members != null && members.Count > 0) { userIds.AddRange(members.Select(f => f.UserId)); } } var weChatMemberList = new List <WeChatAuthResponseModel>(); if (userIds.Count > 0) { var weChatMembers = server.Get(userIds); if (weChatMembers != null && weChatMembers.Count > 0) { weChatMemberList = weChatMembers.Select(f => new WeChatAuthResponseModel { AvatarUrl = f.AvatarUrl, AccountId = f.AccountId, NickName = f.NickName }).ToList(); } } var resultModel = new WeChatAuthResponseModel { Token = Guid.NewGuid().ToString(), CodeTimeSpan = responseData.watermark?.timestamp, AvatarUrl = responseData.avatarUrl, AccountId = searchOpenIdModel.AccountId, NickName = responseData.nickName, WechatMemberList = weChatMemberList }; //TODO:记录Token信息 RedisCacheHelper.AddSet(RedisCacheKey.AuthInfoKey + loginInfo.code, resultModel, DateTime.Now.AddHours(2)); RedisCacheHelper.AddSet(RedisCacheKey.AuthTokenKey + resultModel.Token, searchOpenIdModel, DateTime.Now.AddHours(2)); return(new ResponseBaseModel <WeChatAuthResponseModel> { ResultCode = ResponceCodeEnum.Success, Message = "微信认证成功", Data = resultModel }); }