Example #1
0
        public ActionResult SendMessage(string content, string fromUserID, string formID, string toUserID)
        {
            Common.WeChat.IConfig config = new Common.WeChat.ConfigMini();
            var    appID    = config.AppID;
            var    toUser   = db.Users.FirstOrDefault(s => s.Id == toUserID);
            var    option   = new Bll.Users.UserOpenID(toUser);
            var    e        = db.Enterprises.FirstOrDefault(s => s.ID == toUser.EnterpriseID);
            string openID   = option.SearchOpenID(appID);
            var    fromUser = db.Users.FirstOrDefault(s => s.Id == fromUserID);
            var    temp     = new Common.WeChat.WeChatMessageTemp.EDefaultNotifyWeChatMessage(e.Name, fromUser.NickName, content, DateTime.Now);
            var    result   = new Common.WeChat.WeChatMinApi(config)
                              .SendMessage(openID, formID, null, temp);

            return(Json(Comm.ToJsonResult("Success", "", result)));
        }
Example #2
0
        public ActionResult GetPhoneNumberFromWeChat(string userID, string iv, string encryptedData)
        {
            var user = db.Users.FirstOrDefault(s => s.Id == userID);

            if (user == null)
            {
                return(Json(Comm.ToJsonResult("UserNoFound", "用户不存在")));
            }
            if (db.CardPersonals.Any(s => s.UserID == userID))
            {
                return(Json(Comm.ToJsonResult("CardPersonalHadCreate", "该用户已经个人名片已存在"), JsonRequestBehavior.AllowGet));
            }
            //把数据中的OpenID取出
            var     userOpenIDs = new Bll.Users.UserOpenID(user);
            IConfig config      = new ConfigMiniPersonal();
            var     openID      = userOpenIDs.SearchOpenID(config.AppID);

            if (openID == null)
            {
                return(Json(Comm.ToJsonResult("OpenIDIsNull", "OpenID不存在"), JsonRequestBehavior.AllowGet));
            }
            string session = null;

            try
            {
                session = Jscode2sessionResultList.GetSession(openID);
            }
            catch (Exception ex)
            {
                return(Json(Comm.ToJsonResult("GetSessionFail", ex.Message), JsonRequestBehavior.AllowGet));
            }

            string mobile = null;

            try
            {
                mobile = Jscode2sessionResultList.AESDecryptPhoneNumber(encryptedData, session, iv);
            }
            catch (Exception)
            {
                Comm.WriteLog("CreateByWeChatPhoneDecrypt", JsonConvert.SerializeObject(new { encryptedData, session, iv }), Common.Enums.DebugLogLevel.Error);
                return(Json(Comm.ToJsonResult("DecryptFail", "解密失败,SessionKey过期,需要重新调用登录接口")));
            }
            return(Json(Comm.ToJsonResult("Success", "成功", mobile), JsonRequestBehavior.AllowGet));
        }
Example #3
0
 public void WeChatNofity(string userID, decimal amount, string content)
 {
     using (ApplicationDbContext db = new ApplicationDbContext())
     {
         var config = new Common.WeChat.ConfigMiniPersonal();
         Common.WeChat.WeChatMinApi wechat = new Common.WeChat.WeChatMinApi(config);
         var user   = db.Users.FirstOrDefault(s => s.Id == userID);
         var option = new Bll.Users.UserOpenID(user);
         var openID = option.SearchOpenID(config.AppID);
         var form   = db.WeChatMiniNotifyForms.FirstOrDefault(s => s.AppID == config.AppID &&
                                                              s.UserID == userID &&
                                                              s.EndDateTime > DateTime.Now);
         if (form != null)
         {
             var temp = new Common.WeChat.WeChatMessageTemp.PReceivableNotifyWeChatMessage(amount, content, DateTime.Now);
             wechat.SendMessage(openID, form.FormID, null, temp);
             db.WeChatMiniNotifyForms.Remove(form);
             db.SaveChanges();
         }
     }
 }
Example #4
0
        public ActionResult AddForm(string userID, string[] formIDs)
        {
            if (formIDs.Any(s => s == "the formId is a mock one"))
            {
                return(Json(Common.Comm.ToJsonResult("FormIDInvalid", "FormID无效")));
            }
            if (!db.Vips.Any(s => s.UserID == userID))
            {
                return(Json(Common.Comm.ToJsonResult("VipNoFound", "未注册")));
            }
            var config = new Common.WeChat.ConfigMiniPersonal();
            var user   = db.Users.FirstOrDefault(s => s.Id == userID);
            var openID = new Bll.Users.UserOpenID(user).SearchOpenID(config.AppID);
            var list   = new List <WeChatMiniNotifyForm>();

            foreach (var item in formIDs)
            {
                list.Add(new WeChatMiniNotifyForm
                {
                    AppID          = config.AppID,
                    CreateDateTime = DateTime.Now,
                    EndDateTime    = DateTime.Now.AddDays(7).AddMinutes(-1),
                    FormID         = item,
                    OpenID         = openID,
                    UserID         = userID
                });
            }
            db.WeChatMiniNotifyForms.AddRange(list);
            db.SaveChanges();
            var del = db.WeChatMiniNotifyForms
                      .Where(s => s.EndDateTime < DateTime.Now);

            db.WeChatMiniNotifyForms.RemoveRange(del);
            db.SaveChanges();
            var count = db.WeChatMiniNotifyForms
                        .Where(s => s.UserID == userID)
                        .Count();

            return(Json(Common.Comm.ToJsonResult("Success", "成功", new { Count = count })));
        }
Example #5
0
        /// <summary>
        /// 注册VIP
        /// </summary>
        /// <param name="userID">用户ID</param>
        /// <param name="iv">手机号</param>
        /// <param name="code"></param>
        /// <returns></returns>
        public ActionResult CreateByWeChatPhone(string userID, string iv, string encryptedData, string code)
        {
            var user = db.Users.FirstOrDefault(s => s.Id == userID);

            if (user == null)
            {
                return(Json(Comm.ToJsonResult("UserNoFound", "用户不存在")));
            }
            if (db.CardPersonals.Any(s => s.UserID == userID))
            {
                return(Json(Comm.ToJsonResult("CardPersonalHadCreate", "该用户已经个人名片已存在")));
            }
            //把数据中的OpenID取出
            var     userOpenIDs = new Bll.Users.UserOpenID(user);
            IConfig config      = new ConfigMiniPersonal();
            var     openID      = userOpenIDs.SearchOpenID(config.AppID);

            if (openID == null)
            {
                return(Json(Comm.ToJsonResult("OpenIDIsNull", "OpenID不存在")));
            }
            string session = null;

            try
            {
                session = Jscode2sessionResultList.GetSession(openID);
            }
            catch (Exception ex)
            {
                return(Json(Comm.ToJsonResult("GetSessionFail", ex.Message)));
            }

            string mobile = null;

            try
            {
                mobile = Jscode2sessionResultList.AESDecryptPhoneNumber(encryptedData, session, iv);
            }
            catch (Exception)
            {
                return(Json(Comm.ToJsonResult("DecryptFail", "解密失败,SessionKey过期,需要重新调用登录接口")));
            }

            if (db.Users.Any(s => s.PhoneNumber == mobile))
            {
                return(Json(Comm.ToJsonResult("MobileHadUsed", "手机号已被使用")));
            }

            //if (!Reg.IsMobile(mobile))
            //{
            //    return Json(Comm.ToJsonResult("Moblie Error", "手机号不正确"));
            //}


            Vip parentVip = null;

            if (!string.IsNullOrWhiteSpace(code))
            {
                //判断是否邀请码是否存在
                parentVip = db.Vips.FirstOrDefault(s => s.State == Common.Enums.VipState.Enable && s.Code == code);
                if (parentVip == null)
                {
                    return(Json(Comm.ToJsonResult("CodeNoFound", "邀请码不存在")));
                }
            }
            //保存用户手机号到用户表
            user.PhoneNumber = mobile;

            //把名片已知信息填到个人名片
            var card = new CardPersonal
            {
                UserID = userID,
                Avatar = user.Avatar,
                Enable = true,
                Gender = Common.Enums.Gender.NoSet,
                Name   = user.NickName,
                Mobile = mobile
            };

            db.CardPersonals.Add(card);
            db.SaveChanges();
            try
            {
                card.WeChatMiniQrCode = GetWeChatQrCode(card.ID);
                db.SaveChanges();
            }
            catch (Exception ex)
            {
                Comm.WriteLog(this.GetType().ToString(), ex.Message, Common.Enums.DebugLogLevel.Error);
            }
            var result = new Bll.VipBLL().CreateVipRelation(userID, code);

            if (result.retCode == Comm.ReqResultCode.failed)
            {
                //回滚
                db.CardPersonals.Remove(card);
                db.SaveChanges();
                return(Json(Comm.ToJsonResult("Error", result.retMsg)));
            }
            return(Json(Comm.ToJsonResult("Success", "成功", new { PCardID = card.ID })));
        }
Example #6
0
        ///消息推送
        public static void NotifyByLog(UserLog log, Common.WeChat.IConfig config)
        {
            using (ApplicationDbContext db = new ApplicationDbContext())
            {
                var targetUser = db.Users.FirstOrDefault(s => s.Id == log.TargetUserID);
                var user       = db.Users.FirstOrDefault(s => s.Id == log.UserID);
                var wechat     = new Common.WeChat.WeChatMinApi(config);
                if (targetUser == null)
                {
                    return;
                    //throw new Exception("推送用户不存在");
                }
                var    userOpenID = new Bll.Users.UserOpenID(targetUser);
                string openID     = userOpenID.SearchOpenID(config.AppID);
                var    form       = db.WeChatMiniNotifyForms
                                    .FirstOrDefault(s => s.UserID == log.TargetUserID &&
                                                    s.EndDateTime > DateTime.Now);
                var fromUser = db.Users.FirstOrDefault(s => s.Id == log.UserID);
                if (form == null)
                {
                    return;
                }
                db.WeChatMiniNotifyForms.Remove(form);
                db.SaveChanges();
                Common.WeChat.WeChatMessageTemp.IWeChatMessageTemp iTempMessage;
                try
                {
                    switch (log.Type)
                    {
                    case UserLogType.CardPersonalRead:
                    {
                        iTempMessage = new Common.WeChat.WeChatMessageTemp.PNewUserNotifyWeChatMessage(fromUser.NickName, log.CreateDateTime);
                        wechat.SendMessage(openID, form.FormID, null, iTempMessage);
                    }
                    break;

                    case UserLogType.CardPersonalAddressNav:
                    case UserLogType.CardPersonalEmailCopy:
                    case UserLogType.CardPersonalEnterpriseCopy:
                    case UserLogType.CardPersonalMobileCall:
                    case UserLogType.CardPersonalLike:
                    case UserLogType.CardPersonalPhoneCall:
                    case UserLogType.CardPersonalSave:
                    case UserLogType.CardPersonalShare:
                    case UserLogType.CardPersonalWechat:
                    {
                        string content = null;
                        switch (log.Type)
                        {
                        case UserLogType.CardPersonalAddressNav:
                            content = "复制了您的地址";
                            break;

                        case UserLogType.CardPersonalEmailCopy:
                            content = "复制了您的邮箱";
                            break;

                        case UserLogType.CardPersonalEnterpriseCopy:
                            content = "复制了您的公司";
                            break;

                        case UserLogType.CardPersonalMobileCall:
                            content = "呼叫了您的手机";
                            break;

                        case UserLogType.CardPersonalLike:
                            content = "点赞了您的名片";
                            break;

                        case UserLogType.CardPersonalPhoneCall:
                            content = "呼叫了您的座机";
                            break;

                        case UserLogType.CardPersonalSave:
                            content = "保存了您的名片";
                            break;

                        case UserLogType.CardPersonalShare:
                            content = "分享了您的名片";
                            break;

                        case UserLogType.CardPersonalWechat:
                            content = "复制了您的微信号";
                            break;
                        }
                        iTempMessage = new Common.WeChat.WeChatMessageTemp.PDefaultNotifyWeChatMessage(fromUser.NickName, content, log.CreateDateTime);
                        wechat.SendMessage(openID, form.FormID, null, iTempMessage);
                    }
                    break;

                    default:
                        break;
                    }
                }
                catch (Exception ex)
                {
                }
                finally
                {
                }
            }
        }
Example #7
0
        private ApplicationUser CreateByWeChat(Common.WeChat.UserInfoResult model)
        {
            string  username, nickname, avart, unionId = model.UnionID;
            var     user   = db.Users.FirstOrDefault(s => s.WeChatID == unionId);
            IConfig config = null;

            switch (model.Type)
            {
            case WeChatAccount.AiCardMini:
                config = new ConfigMini();
                break;

            case WeChatAccount.AiCardPersonalMini:
                config = new ConfigMiniPersonal();
                break;

            default:
            case WeChatAccount.PC:
                config = new ConfigWeChatWork();
                break;
            }
            if (user != null)
            {
                string appID = config.AppID;
                var    op1   = new Bll.Users.UserOpenID(user);
                op1.AddOpenID(appID, model.OpenID);
                db.SaveChanges();
                return(user);
            }
            nickname = model.NickName;

            avart = model.HeadImgUrl;
            if (!string.IsNullOrWhiteSpace(avart))
            {
                try
                {
                    avart = this.Download(avart);
                }
                catch (Exception)
                {
                    avart = "~/Content/Images/404/avatar.png";
                }
            }
            unionId = model.UnionID;

            #region 把图片传到七牛
            var path = Server.MapPath(avart);
            avart = new Common.Qiniu.QinQiuApi().UploadFile(path, true);
            #endregion


            do
            {
                username = $"wc{DateTime.Now:yyyyMMddHHmmss}{Comm.Random.Next(1000, 9999)}";
            } while (db.Users.Any(s => s.UserName == username));
            if (string.IsNullOrWhiteSpace(nickname))
            {
                nickname = username;
            }
            user = new ApplicationUser
            {
                WeChatID          = unionId,
                UserName          = username,
                NickName          = nickname,
                Avatar            = avart,
                RegisterDateTime  = DateTime.Now,
                LastLoginDateTime = DateTime.Now,
                UserType          = UserType.Personal
            };
            var option = new Bll.Users.UserOpenID(user);
            option.AddOpenID(config.AppID, model.OpenID);
            var r = UserManager.Create(user);
            user = db.Users.FirstOrDefault(s => s.WeChatID == unionId);

            db.SaveChanges();
            if (!r.Succeeded)
            {
                throw new Exception(r.Errors.FirstOrDefault());
            }

            return(user);
        }
Example #8
0
        public ActionResult LoginByWeiXin(string code, string state = null, WeChatAccount type = WeChatAccount.AiCardMini)
        {
            Func <string, string, ActionResult> error = (content, detail) =>
            {
                if (type != WeChatAccount.PC)
                {
                    return(Json(Comm.ToJsonResult("Error", content, detail)));
                }
                else
                {
                    return(this.ToError("错误", detail, Url.Action("Login", "Account")));
                }
            };

            if (string.IsNullOrWhiteSpace(code))
            {
                return(error("请求有误", "Code不能为空"));
            }
            if (Request.HttpMethod == "GET")
            {
                type = WeChatAccount.PC;
            }
            if (type != WeChatAccount.AiCardMini && type != WeChatAccount.AiCardPersonalMini)
            {
                //非小程序
                switch (type)
                {
                default:
                case WeChatAccount.PC:
                {
                    Common.WeChat.IConfig           config = new Common.WeChat.ConfigWeChatWork();
                    Common.WeChat.WeChatApi         wechat = new Common.WeChat.WeChatApi(config);
                    Common.WeChat.AccessTokenResult result;
                    try
                    {
                        result = wechat.GetAccessTokenSns(code);
                        var openID = result.OpenID;

                        if (state == "openid")
                        {
                            Response.Cookies["WeChatOpenID"].Value = openID;
                            return(Json(Comm.ToJsonResult("Success", "成功", new { OpenID = openID })));
                        }
                        config.AccessToken = result.AccessToken;
                        var unionid = result.UnionID;
                        var user    = db.Users.FirstOrDefault(s => s.WeChatID == unionid);

                        try
                        {
                            if (user != null)
                            {
                                if (user.UserName == user.NickName)
                                {
                                    var    userInfo = wechat.GetUserInfoSns(openID);
                                    string avart;
                                    try
                                    {
                                        avart = this.Download(userInfo.HeadImgUrl);
                                    }
                                    catch (Exception)
                                    {
                                        avart = "~/Content/Images/404/avatar.png";
                                    }
                                    user.NickName = userInfo.NickName;
                                    user.Avatar   = avart;
                                }
                                var option = new Bll.Users.UserOpenID(user);
                                option.AddOpenID(config.AppID, result.OpenID);
                                user.LastLoginDateTime = DateTime.Now;
                                db.SaveChanges();
                            }
                            else
                            {
                                try
                                {
                                    var userInfo = wechat.GetUserInfoSns(openID);
                                    user = CreateByWeChat(userInfo);
                                }
                                catch (Exception)
                                {
                                    user = CreateByWeChat(new Common.WeChat.UserInfoResult {
                                            UnionID = unionid
                                        });
                                }
                            }
                            if (type != WeChatAccount.PC)
                            {
                                return(Json(Comm.ToJsonResult("Success", "成功", new UserForApiViewModel(user))));
                            }
                            SignInManager.SignIn(user, true, true);
                            switch (state.ToLower())
                            {
                            case null:
                            case "":
                            case "ticketindex":
                                return(RedirectToAction("Index", "Tickets"));

                            case "qrcode":
                                return(RedirectToAction("Index", "Tickets", new { mode = "qrcode" }));

                            case "pagelogin":
                            {
                                var card = db.Cards.FirstOrDefault(s => s.UserID == user.Id);
                                if (card != null)
                                {
                                    return(Redirect($"https://radar.dtoao.com/#/Login?userID={user.Id}&enterpriseID={card.EnterpriseID}&cardID={card.ID}&userName={user.UserName}"));
                                }
                                else
                                {
                                    return(Redirect($"https://radar.dtoao.com/#/Login?error=名片不存在"));
                                }
                            }

                            default:
                                return(Redirect(state));
                            }
                        }
                        catch (Exception ex)
                        {
                            return(error("请求有误", ex.Message));
                        }
                    }
                    catch (Exception ex)
                    {
                        return(error("请求有误", ex.Message));
                    }
                }
                }
            }
            else
            {
                Common.WeChat.IConfig config;
                switch (type)
                {
                case WeChatAccount.AiCardMini:
                    config = new Common.WeChat.ConfigMini();
                    break;

                case WeChatAccount.AiCardPersonalMini:
                    config = new Common.WeChat.ConfigMiniPersonal();
                    break;

                default:
                    return(Json(Comm.ToJsonResult("Error", "Type参数有误")));
                }
                //小程序
                WeChatMinApi wechat = new Common.WeChat.WeChatMinApi(config);
                try
                {
                    var             result = wechat.Jscode2session(code);
                    ApplicationUser user   = null;
                    if (!string.IsNullOrWhiteSpace(result.UnionID))
                    {
                        user = db.Users.FirstOrDefault(s => s.WeChatID == result.UnionID);
                        // 把OpenID存进数据库
                        if (user != null)
                        {
                            var option = new Bll.Users.UserOpenID(user);
                            option.AddOpenID(config.AppID, result.OpenID);
                            db.SaveChanges();
                        }
                    }
                    return(Json(Comm.ToJsonResult("Success", "成功", new
                    {
                        result.OpenID,
                        result.UnionID,
                        User = user == null ? null : new UserForApiViewModel(user)
                    })));
                }
                catch (Exception ex)
                {
                    return(Json(Comm.ToJsonResult("Error", ex.Message)));
                }
            }
        }
Example #9
0
        public ActionResult VerufucatuibCard(string phonenumber, string verificationcode, string wxcode, int cardid)
        {
            var  vcodemodel = db.VerificationCodes.FirstOrDefault(s => s.To == phonenumber.Replace(" ", "") && s.Code == verificationcode);
            Card cardmodel  = new Card();

            if (cardid <= 0)
            {
                cardmodel = db.Cards.FirstOrDefault(s => s.Mobile == phonenumber.Replace(" ", ""));
            }
            else
            {
                cardmodel = db.Cards.FirstOrDefault(s => s.ID == cardid);
            }

            //验证手机短信验证码是否正确
            if (vcodemodel == null || vcodemodel.Code != verificationcode)
            {
                return(Json(Comm.ToJsonResult("Error", "验证码不正确")));
            }
            //验证手机短信验证码是否过时
            else
            {
                DateTime date1       = DateTime.Now;
                DateTime date2       = vcodemodel.CreateDate;
                TimeSpan timeSpan    = date1 - date2;
                int      timespanint = Convert.ToInt32(timeSpan.TotalMinutes);
                if (timespanint > 30)
                {
                    return(Json(Comm.ToJsonResult("Error", "验证码超时")));
                }
            }
            if (cardmodel == null)
            {
                return(Json(Comm.ToJsonResult("Error", "名片不存在")));
            }
            else
            {
                Common.WeChat.IConfig           config = new Common.WeChat.ConfigOpen();
                Common.WeChat.WeChatApi         wechat = new Common.WeChat.WeChatApi(config);
                Common.WeChat.AccessTokenResult result;

                try
                {
                    //根据微信code获取到accesstoken、openid
                    result = wechat.GetAccessTokenSns(wxcode);
                    var openID = result.OpenID;
                    config.AccessToken = result.AccessToken;
                    var unionid = result.UnionID;
                    var user    = db.Users.FirstOrDefault(s => s.WeChatID == unionid);
                    try
                    {
                        if (user != null)
                        {
                            if (user.UserName == user.NickName)
                            {
                                var    userInfo = wechat.GetUserInfoSns(openID);
                                string avart;
                                try
                                {
                                    avart = this.Download(userInfo.HeadImgUrl);
                                }
                                catch (Exception)
                                {
                                    avart = "~/Content/Images/404/avatar.png";
                                }
                                user.NickName = userInfo.NickName;
                                user.Avatar   = avart;
                            }
                            var option = new Bll.Users.UserOpenID(user);
                            option.AddOpenID(config.AppID, result.OpenID);
                            user.LastLoginDateTime = DateTime.Now;
                            db.SaveChanges();
                            cardmodel.UserID  = user.Id;
                            cardmodel.Enable  = true;
                            user.EnterpriseID = cardmodel.EnterpriseID.Value;
                            db.SaveChanges();
                        }
                        else
                        {
                            try
                            {
                                var userInfo = wechat.GetUserInfoSns(openID);
                                user              = CreateByWeChat(userInfo);
                                cardmodel.UserID  = user.Id;
                                cardmodel.Enable  = true;
                                user.EnterpriseID = cardmodel.EnterpriseID.Value;
                                db.SaveChanges();
                            }
                            catch (Exception)
                            {
                                user = CreateByWeChat(new Common.WeChat.UserInfoResult {
                                    UnionID = unionid
                                });
                                cardmodel.UserID  = user.Id;
                                cardmodel.Enable  = true;
                                user.EnterpriseID = cardmodel.EnterpriseID.Value;
                                db.SaveChanges();
                            }
                        }
                        return(Json(Comm.ToJsonResult("Success", "激活成功", new UserForApiViewModel(user))));
                    }
                    catch (Exception ex)
                    {
                        return(Json(Comm.ToJsonResult("Error", ex.Message)));
                    }
                }
                catch (Exception ex)
                {
                    return(Json(Comm.ToJsonResult("Error", ex.Message)));
                }
            }
        }