Example #1
0
        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);
            }
        }
Example #2
0
        /// <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);
        }