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))); } }
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); }
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); }