Beispiel #1
0
 public ActionResult RegisterByWeiXin(Common.WeChat.UserInfoResult model)
 {
     try
     {
         if (string.IsNullOrWhiteSpace(model.UnionID))
         {
             if (string.IsNullOrWhiteSpace(model.OpenID))
             {
                 return(Json(Comm.ToJsonResult("OpenIDNoFound", $"OpenID不能为空")));
             }
             //如果用户没关注公众号,获取不了UnionID,从EncryptedData从解密用户数据
             var session = Common.WeChat.Jscode2sessionResultList.GetSession(model.OpenID);
             var str     = Common.WeChat.Jscode2sessionResultList.AESDecrypt(model.EncryptedData, session, model.IV);
             try
             {
                 string debug = JsonConvert.SerializeObject(new
                 {
                     model.EncryptedData,
                     session,
                     model.IV,
                     AES = str
                 });
                 //Comm.WriteLog("WeiXin", debug, DebugLogLevel.Normal);
                 var jUser   = JsonConvert.DeserializeObject <JObject>(str);
                 var unionID = jUser["unionId"]?.Value <string>();
                 if (unionID == null)
                 {
                     return(Json(Comm.ToJsonResult("UnionIDNoFound", "获取不了UnionID")));
                 }
                 model.UnionID = unionID;
             }
             catch (Exception)
             {
                 //如果解密后发现昵称有乱码
                 //如"nickName\":\"涓€鐪兼湜宸?,\"gender\":1,
                 //把乱码部分全部去掉重新解析
                 try
                 {
                     var index   = str.IndexOf("\"unionId\"");
                     var newStr  = str.Remove(1, index - 1);
                     var jUser   = JsonConvert.DeserializeObject <JObject>(newStr);
                     var unionID = jUser["unionId"]?.Value <string>();
                     model.UnionID = unionID;
                 }
                 catch (Exception)
                 {
                     return(Json(Comm.ToJsonResult("AESDecryptFail", "解密失败", new { Info = model, Aes = str, Session = session })));
                 }
             }
         }
         var user = CreateByWeChat(model);
         return(Json(Comm.ToJsonResult("Success", "成功", new UserForApiViewModel(user))));
     }
     catch (Exception ex)
     {
         return(Json(Comm.ToJsonResult("Error", "注册失败", ex.Message)));
     }
 }
Beispiel #2
0
        private ApplicationUser CreateRandom(Common.WeChat.UserInfoResult model)
        {
            string username, nickname, avart, unionId = model.UnionID;
            var    user = db.Users.FirstOrDefault(s => s.WeChatID == unionId);

            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 = $"rm{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
            };

            return(user);
        }
Beispiel #3
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);
        }