public async Task <ObjectResultModule> Authenticate([FromBody] AuthenticateModel model) { try { ///配置文件判断来源 ///1.当来源于Patient 患者端,开启http请求到Admin管理端查询用户名密码进行匹配. ///2.当来源于Admin管理端或者Doctor医生端则直接查询数据库进行匹配 if (!Commons.CheckSecret(model.Secret)) { return(new ObjectResultModule("", 422, "自签名错误!")); } YaeherUser user = null; TencentUserManage usermanage = new TencentUserManage(); // 获取微信WecharToken // SystemToken systemToken = new SystemToken(); // systemToken.TokenType = "Wechar"; string openid = ""; if (!string.IsNullOrEmpty(model.WXCode))//微信code登陆 { var Tokens = await _systemTokenService.SystemTokenList("Wechar"); //Logger.Info("modelWXCode:"+JsonHelper.ToJson(model)); ///调用微信接口获取openid ///查找数据库 TencentWeCharEntity tencentWeCharEntity = new TencentWeCharEntity(); SystemConfigsIn systemConfigsIn = new SystemConfigsIn(); systemConfigsIn.AndAlso(t => !t.IsDelete && t.SystemType == "TencentWechar"); var configs = await _systemConfigsService.SystemConfigsList(systemConfigsIn); var tencentparam = configs.FirstOrDefault(); tencentWeCharEntity.grant_type = "authorization_code"; tencentWeCharEntity.appid = tencentparam.AppID; tencentWeCharEntity.secret = tencentparam.AppSecret; var usertoken = usermanage.WeiXinUserToken(model.WXCode, tencentWeCharEntity).Result; if (usertoken == null || string.IsNullOrEmpty(usertoken.openid)) { return(new ObjectResultModule("", 400, "获取用户信息失败!")); } openid = usertoken.openid; } else if (!string.IsNullOrEmpty(model.WecharOpenID))//微信openid登陆 { openid = model.WecharOpenID; } else { if (_appConfiguration["Authentication:AUTHTO"] == "YaeherPatientAPI")//swagger登陆 { var Content = "{\"LoginName\":\"" + model.UserNameOrEmailAddress + "\",\"LoginPwd\":\"" + model.Password + "\",\"Secret\":\"" + model.Secret + "\"}"; user = await UserAsync(_appConfiguration["Authentication:AUTHURL"], Content); } else//用户名密码登陆登陆 { user = await _yaeherUserService.YaeherUserByExpress(t => (t.Email == model.UserNameOrEmailAddress || t.LoginName == model.UserNameOrEmailAddress || t.PhoneNumber == model.UserNameOrEmailAddress) && t.LoginPwd == model.Password && !t.IsDelete); } if (user == null || user.Id < 0) { return(new ObjectResultModule("Login failed", 400, "用户名或者密码错误!")); } if (!user.Enabled) { return(new ObjectResultModule("Login failed", 400, "用户账号没激活,请联系管理员!")); } } SystemConfig.UserManager userManager = null; if (model.Platform == "PC") { if (_appConfiguration["Authentication:AUTHTO"] != "YaeherPatientAPI") { userManager = _userManagerService.UserManager(user.Id); } } else { // 利用OPenID登陆 if (!string.IsNullOrEmpty(openid)) { var Tokens = await _systemTokenService.SystemTokenList("Wechar"); try { var usermsg = usermanage.WeiXinUserInfoUtils(openid, Tokens.access_token).Result; // 未关注不可进入系统 if (usermsg.subscribe != 0) { #region 步提交 //using (var unitOfWork = _unitOfWorkManager.Begin()) //{ // TencentWXPay tencentWXPay = new TencentWXPay(); // user = _yaeherUserService.YaeherUserInfo(openid, Tokens.access_token); // if (user.Id > 0) // { // user = await usermanage.YaeherUserLable(usermsg, user, Tokens.access_token); // if (!user.IsPay) // { // var payment = await _yaeherUserPaymentService.YaeherUserPaymentByUserID(user.Id); // if (payment == null || payment.Id < 1) // { // //http请求微信信息,获取账户的信息 新增用户payment // var CreateUserPayment = new YaeherUserPayment() // { // UserID = user.Id, // FullName = user.FullName, // PayMethod = "wxpay", // PayMethodName = "微信支付", // PaymentAccout = user.WecharName, // BankName = "wx", // Subbranch = "wx", // BandAdd = "wx", // BankNo = "wx", // CreatedOn = DateTime.Now, // IsDefault = true, // }; // CreateUserPayment = await _yaeherUserPaymentService.CreateYaeherUserPayment(CreateUserPayment); // } // user.IsPay = true; // } // if (!user.IsUpdate) // { // var DoctorInfo = await _yaeherDoctorService.YaeherDoctorByUserID(user.Id); // if (DoctorInfo != null && DoctorInfo.IsSharing && user.IsProfitSharing == false) //医生角色切没有生成分账账号 // { // //查询分账配置 // SystemConfigsIn systemConfigsIn = new SystemConfigsIn(); // systemConfigsIn.AndAlso(a => a.IsDelete == false); // systemConfigsIn.AndAlso(a => a.SystemType == "TencentWechar"); // var configs = await _systemConfigsService.SystemConfigsList(systemConfigsIn); // // 查询医生信息 // var tencentparam = configs.ToList().FirstOrDefault(); // var receiver = new receiver(); // receiver.name = DoctorInfo.DoctorName; // receiver.type = "PERSONAL_OPENID"; // receiver.account = openid; // var addresult = tencentWXPay.ProfitSharingAddReceiver(receiver, tencentparam).Result; // if (addresult.result_code == "SUCCESS") //插入成功后更新状态 // { // user.IsProfitSharing = true; // } // } // } // user = await _yaeherUserService.UpdateYaeherUser(user); // } // unitOfWork.Complete(); //} #endregion string OperType = "用户登陆"; user = await _yaeherUserService.YaeherUserInfo(usermsg, Tokens.access_token, OperType); } else { return(new ObjectResultModule("", 402, "用户未关注,请重新关注公众号!")); } } catch (Exception ex) { Logger.Info("我是一个通过页面进来的错误" + ex.ToString() + "DateTime:" + DateTime.Now); } if (user == null) { return(new ObjectResultModule("Login failed", 400, "openid错误,请刷新页面!")); } if (!user.Enabled) { return(new ObjectResultModule("Login failed", 400, "用户账号没激活,请联系管理员!")); } } else { return(new ObjectResultModule("", 402, "用户未关注,请重新关注公众号!")); } } // 登陆判断用户是否存在 if (user != null) { var Identity = GenerateUserIdentity(user, userManager, ClaimTypes.NameIdentifier); var accessToken = CreateAccessToken(CreateJwtClaims(Identity)); this.ObjectResultModule.Object = new AuthenticateResultModel { AccessToken = accessToken, EncryptedAccessToken = GetEncrpyedAccessToken(accessToken), ExpireInSeconds = (int)_configuration.Expiration.TotalSeconds, UserId = user.Id, MobileRoleName = user.RoleName, WecharOpenID = user.WecharOpenID, userManager = userManager }; this.ObjectResultModule.StatusCode = 200; this.ObjectResultModule.Message = "sucess"; return(this.ObjectResultModule); } else { this.ObjectResultModule.StatusCode = 400; this.ObjectResultModule.Message = "获取用户信息失败"; return(this.ObjectResultModule); } } catch (Exception ex) { this.ObjectResultModule.Message = "error"; this.ObjectResultModule.StatusCode = 500; this.ObjectResultModule.Object = ex.Message; return(this.ObjectResultModule); } }
/// <summary> /// 公众号关注事件 /// </summary> /// <param name="requestDoc"></param> /// <returns></returns> public async Task <ObjectResultModule> FocusOn(XDocument requestDoc) { SystemToken systemToken = new SystemToken(); TencentUserManage usermanage = new TencentUserManage(); TencentWXPay tencentWXPay = new TencentWXPay(); using (var unitOfWork = _unitOfWorkManager.Begin()) { try { //关注 var openid = JsonHelper.GetXmlValue(requestDoc, "FromUserName"); if (openid == null) { return(new ObjectResultModule("", 401, "")); } // systemToken.TokenType = "Wechar"; var Tokens = _systemTokenService.SystemTokenList("Wechar").Result; string access_token = Tokens.access_token; var usermsg = usermanage.WeiXinUserInfoUtils(openid, Tokens.access_token).Result; if (usermsg.subscribe != 0) { #region 步操作 //var UserInfo = _yaeherUserService.YaeherUserInfo(openid, Tokens.access_token); //if (UserInfo.Id > 0) //{ // UserInfo= await usermanage.YaeherUserLable(usermsg,UserInfo,Tokens.access_token); // if (!UserInfo.IsPay) // { // var payment = await _yaeherUserPaymentService.YaeherUserPaymentByUserID(UserInfo.Id); // if (payment == null || payment.Id < 1) // { // //http请求微信信息,获取账户的信息 新增用户payment // var CreateUserPayment = new YaeherUserPayment() // { // UserID = UserInfo.Id, // FullName = UserInfo.FullName, // PayMethod = "wxpay", // PayMethodName = "微信支付", // PaymentAccout = UserInfo.WecharName, // BankName = "wx", // Subbranch = "wx", // BandAdd = "wx", // BankNo = "wx", // CreatedOn = DateTime.Now, // IsDefault = true, // }; // CreateUserPayment = await _yaeherUserPaymentService.CreateYaeherUserPayment(CreateUserPayment); // } // UserInfo.IsPay = true; // } // if (!UserInfo.IsUpdate) // { // var DoctorInfo = await _yaeherDoctorService.YaeherDoctorByUserID(UserInfo.Id); // if (DoctorInfo != null && DoctorInfo.IsSharing && UserInfo.IsProfitSharing == false) //医生角色切没有生成分账账号 // { // //查询分账配置 // SystemConfigsIn systemConfigsIn = new SystemConfigsIn(); // systemConfigsIn.AndAlso(a => a.IsDelete == false); // systemConfigsIn.AndAlso(a => a.SystemType == "TencentWechar"); // var configs = _systemConfigsService.SystemConfigsList(systemConfigsIn).Result; // // 查询医生信息 // var tencentparam = configs.ToList().FirstOrDefault(); // var receiver = new receiver(); // receiver.name = DoctorInfo.DoctorName; // receiver.type = "PERSONAL_OPENID"; // receiver.account = openid; // var addresult = tencentWXPay.ProfitSharingAddReceiver(receiver, tencentparam).Result; // if (addresult.result_code == "SUCCESS") //插入成功后更新状态 // { // UserInfo.IsProfitSharing = true; // } // } // } // UserInfo = await _yaeherUserService.UpdateYaeherUser(UserInfo); //} #endregion string OperType = "用户关注"; var UserInfo = await _yaeherUserService.YaeherUserInfo(usermsg, access_token, OperType); } StringBuilder Contentsb = new StringBuilder(); // 增加问医生 Contentsb.Append("欢迎关注怡禾健康!"); Contentsb.Append("\n"); Contentsb.Append("\n"); // 增加问医生 Contentsb.Append("<a href=\"" + Commons.WecharWeb + "?link=index-patient\">问医生</a>\n"); // 增加听课程 Contentsb.Append("\n"); Contentsb.Append("<a href=\"https://m.qlchat.com/wechat/page/live/210000155031160\">听课程</a>\n"); var textSingleMessage = new TextSingleMessage() { ToUser = openid, TextContent = Contentsb.ToString() == null ? "欢迎关注怡禾健康!" : Contentsb.ToString() }; textSingleMessage.Send(access_token).ToString(); unitOfWork.Complete(); } catch (Exception ex) { Logger.Info("我的一个关注的错误:" + ex.ToString() + "DateTime:" + DateTime.Now); } } return(new ObjectResultModule("", 200, "")); }
public async Task <WecharSendMessage> CreateWecharSendMessage(SendMessageInfo sendMessageInfo) { var YaeherConsultationInfo = await _YaeherConsultationrepository.FirstOrDefaultAsync(a => a.ConsultNumber == sendMessageInfo.ConsultNumber); // 咨询人 var ConsultantUserInfo = await _YaeherUserrepository.FirstOrDefaultAsync(a => a.Id == YaeherConsultationInfo.ConsultantID); var DoctorInfo = await _YaeherDoctorrepository.FirstOrDefaultAsync(a => a.Id == YaeherConsultationInfo.DoctorID); // 医生 var DoctorUserInfo = await _YaeherUserrepository.FirstOrDefaultAsync(a => a.Id == DoctorInfo.UserID); // 查询微信模板ID WecharSendMessage wecharSendMessage = new WecharSendMessage(); // 查询当前模板ID var YaeherMessageInfo = await _YaeherMessageTemplaterepository.FirstOrDefaultAsync(a => a.TemplateCode == sendMessageInfo.TemplateCode); wecharSendMessage.TemplateId = YaeherMessageInfo.TemplateId; // 是否自动发送 bool SendState = bool.Parse(_SystemParameterrepository.GetAll().Where(a => a.SystemCode == "WecharSendState").FirstOrDefault().Code); // 查询消息模板内容 var SendMessageList = _SendMessagerepository.GetAll().Where(a => a.TemplateCode == sendMessageInfo.TemplateCode && a.OperationType == sendMessageInfo.OperationType); try { if (SendMessageList.Count() > 0) { SendWechaMessage sendWechaMessage = new SendWechaMessage(); SendMsmHelper sendMsmHelper = new SendMsmHelper(); List <WecharSendMessage> WecharSendMessageList = new List <WecharSendMessage>(); using (var unitOfWork = _unitOfWorkManager.Begin()) { var IsDoctor = false; string MessageType = string.Empty; foreach (var SendMessageInfo in SendMessageList) { WecharSendMessage wecharMessage = new WecharSendMessage(); wecharMessage.ConsultNumber = sendMessageInfo.ConsultNumber; wecharMessage.TemplateCode = sendMessageInfo.TemplateCode; wecharMessage.OperationType = sendMessageInfo.OperationType; wecharMessage.ConsultantName = YaeherConsultationInfo.PatientName; // 修改为患者用户名 wecharMessage.DoctorName = YaeherConsultationInfo.DoctorName; wecharMessage.ConsultJson = JsonHelper.ToJson(YaeherConsultationInfo); wecharMessage.BackUrl = SendMessageInfo.BackUrl; wecharMessage.FirstMessage = SendMessageInfo.FirstMessage; // 查询标语 wecharMessage.Keyword1 = SendMessageInfo.Keyword1; // 称呼人 wecharMessage.Keyword2 = SendMessageInfo.Keyword2; // 时间 wecharMessage.Keyword3 = SendMessageInfo.Keyword3; // 内容 wecharMessage.MessageRemark = SendMessageInfo.MessageRemark; // 备注 wecharMessage.TemplateId = YaeherMessageInfo.TemplateId; // 将对应信息转为发送模板 SendTemplate WecharTemplate = new SendTemplate(); switch (SendMessageInfo.Recipient) { case "Patient": // 接受人为咨询者 wecharMessage.ToUser = ConsultantUserInfo.WecharOpenID; WecharTemplate = sendWechaMessage.ConsultantWecharTemplate(wecharMessage, sendMessageInfo.Inquiry); // 赋值咨询者信息 break; case "Doctor": // 接受人为医生 wecharMessage.ToUser = DoctorUserInfo.WecharOpenID; IsDoctor = true; WecharTemplate = sendWechaMessage.DoctorWecharTemplate(wecharMessage, sendMessageInfo.EvaluateLevel, sendMessageInfo.WarningTime); // 赋值医生信息 MessageType = WecharTemplate.MessageType; break; } // 将对应信息转为发送实际内容 wecharMessage.WecharData = sendWechaMessage.WecharContent(WecharTemplate); #region // 执行微信消息发送 TemplateModel templateModel = new TemplateModel(); if (SendState) // 是否实时发送 { var TokenInfo = _systemTokenService.SystemTokenList("Wechar").Result; templateModel = sendWechaMessage.SendWecharMessage(wecharMessage.WecharData, TokenInfo.access_token).Result; } if (templateModel.errcode == "error" || !SendState) { #region 增加重试机制 HangFireJob WecharhangFireJob = new HangFireJob(); WecharhangFireJob.JobName = "微信定时服务"; WecharhangFireJob.JobCode = "WechaMessageSend"; WecharhangFireJob.BusinessID = Commons.GetCurrentTimeStepNumber(); //int.Parse(new RandomCode().GenerateCheckCodeNum(5)); WecharhangFireJob.BusinessCode = sendMessageInfo.ConsultNumber; Random rd = new Random(); int Seconds = rd.Next(1, 5); WecharhangFireJob.JobRunTime = DateTime.Now.AddSeconds(Seconds); // 随机时间 WecharhangFireJob.JobSates = "Open"; WecharhangFireJob.CallbackUrl = Commons.AdminIp + "api/SendWechar/"; WecharhangFireJob.JobParameter = wecharMessage.WecharData; // 将需要发送的内容整理好 HangfireScheduleJob job = new HangfireScheduleJob(); JobModel model = new JobModel(); model.CallbackUrl = WecharhangFireJob.CallbackUrl; //回调URL model.queues = "adminqueue"; model.CallbackContent = JsonHelper.ToJson(WecharhangFireJob); //回调参数 model.Timespan = WecharhangFireJob.JobRunTime; //运行时间 var returnjobid = job.Schedule(model); if (returnjobid.IndexOf("error") < 0) { WecharhangFireJob.JobRunID = returnjobid; } WecharhangFireJob = await _HangFireJobrepository.InsertAsync(WecharhangFireJob); templateModel.msgid = WecharhangFireJob.BusinessID.ToString(); templateModel.errmsg = "Undo"; #endregion if (templateModel.errcode == "error") { #region 将错误日志存起来 YaeherOperList yaeherOperList = new YaeherOperList(); yaeherOperList.CreatedOn = DateTime.Now; yaeherOperList.OperExplain = JsonHelper.ToJson(sendMessageInfo); yaeherOperList.OperContent = "error:" + templateModel.errmsg; yaeherOperList.OperType = "发送消息异常测试备用:" + sendMessageInfo.OperationType; await _YaeherOperListrepository.InsertAsync(yaeherOperList); #endregion } } wecharMessage.MsgID = templateModel.msgid; wecharMessage.Status = templateModel.errmsg; wecharMessage.MsgType = wecharMessage.MsgType; WecharSendMessageList.Add(wecharMessage); #endregion } #region 发送短信 if (IsDoctor) { YaeherSendMsm yaeherSendMsm = new YaeherSendMsm(); yaeherSendMsm.PhoneNumbers = DoctorUserInfo.PhoneNumber == null? DoctorInfo.PhoneNumber : DoctorUserInfo.PhoneNumber; // 医生电话 yaeherSendMsm.MessageType = MessageType; // 短信类型 yaeherSendMsm.TemplateParam = "{\"remark\":\"" + sendMessageInfo.ConsultNumber + "\"}"; // 提示短信内容 // 发送短信 并存储记录 if (yaeherSendMsm.PhoneNumbers != null && yaeherSendMsm.MessageType != null) { var SendMessage = sendMsmHelper.SendMsm(yaeherSendMsm); // 发送短信 YaeherMessageRemind MessageRemind = new YaeherMessageRemind(); MessageRemind.UserID = 0; MessageRemind.UserName = "******"; MessageRemind.PhoneNumber = yaeherSendMsm.PhoneNumbers; MessageRemind.MessageType = yaeherSendMsm.MessageType; MessageRemind.Message = SendMessage.ToString(); //将发送短信消息存起来 MessageRemind.VerificationCode = ""; MessageRemind.Message = yaeherSendMsm.TemplateParam; MessageRemind.CreatedBy = 0; MessageRemind.CreatedOn = DateTime.Now; MessageRemind.EffectiveLength = 0; MessageRemind.EffectiveTime = DateTime.Now; await _MessageRemindrepository.InsertAsync(MessageRemind); } } #endregion #region 将发微信的消息记录 if (WecharSendMessageList.Count > 0) { foreach (var wecharMessage in WecharSendMessageList) { await _repository.InsertAsync(wecharMessage); } } #endregion #region 增加有效用户访问记录 暂时关掉获取有效访问量 //YaeherOperList yaeherOperList = new YaeherOperList(); //yaeherOperList.CreatedOn = DateTime.Now; //yaeherOperList.OperExplain = "ConsultNumber:"+ sendMessageInfo.ConsultNumber; //yaeherOperList.OperContent = JsonHelper.ToJson(ConsultantUserInfo); //yaeherOperList.OperType = "发送消息成功"; //await _YaeherOperListrepository.InsertAsync(yaeherOperList); #endregion unitOfWork.Complete(); } } } catch (Exception ex) { #region 增加有效用户访问记录 YaeherOperList yaeherOperList = new YaeherOperList(); yaeherOperList.CreatedOn = DateTime.Now; yaeherOperList.OperExplain = JsonHelper.ToJson(sendMessageInfo); yaeherOperList.OperContent = "error:" + ex.ToString(); yaeherOperList.OperType = "发送消息异常:" + sendMessageInfo.OperationType; await _YaeherOperListrepository.InsertAsync(yaeherOperList); #endregion } return(wecharSendMessage); }