public ActionResult LoginByWeiXinSilence(string state) { IConfig config = new ConfigWeChatWork(); var p = new Dictionary <string, string>(); string tempurl = Server.UrlEncode("https://168plas.com/Account/LoginByWeiXin"); p.Add("appid", config.AppID); p.Add("redirect_uri", tempurl); p.Add("response_type", "code"); p.Add("scope", "snsapi_login"); p.Add("state", Server.UrlEncode(state)); //return Redirect($"https://open.weixin.qq.com/connect/oauth2/authorize{p.ToParam("?")}#wechat_redirect"); string tempurls = $"https://open.weixin.qq.com/connect/qrconnect{p.ToParam("?")}#wechat_redirect"; return(Redirect(tempurls)); }
public ActionResult LoginByWeiXin(string code, string state = null) { string returnresultstr = string.Empty; int returncode = 0; //Func<string, string, ActionResult> error = (content, detail) => //{ // return this.ToError("错误", detail, Url.Action("Login", "Account")); //}; IConfig config = new ConfigWeChatWork(); WeChatApi wechat = new WeChatApi(config); AccessTokenResult result; CommonBll cbll = new CommonBll(); DataTable codetb = cbll.GetWxCodeCheck(code, 0); try { if (string.IsNullOrWhiteSpace(code)) { //return error("请求有误", "Code不能为空"); returnresultstr = "请求错误!"; } else if (codetb.Rows.Count <= 0) { //PlasCommon.Common.AddLog("", "开始请求access_token", "开始请求access_token", ""); cbll.AddWxCode(code, 0); //PlasCommon.Common.AddLog("", "开始请求access_token", "请求access_token结束", ""); //PlasCommon.Common.AddLog("", "开始请求access_token", "开始请求access_token", ""); result = wechat.GetAccessTokenSns(code); //PlasCommon.Common.AddLog("", "请求access_token成功", "请求access_token成功", ""); var openID = result.OpenID; if (state == "openid") { PlasCommon.Common.AddLog("", "access_token", result.AccessToken, ""); config.AccessToken = result.AccessToken; //Response.Cookies["WeChatOpenID"].Value = openID; //AccountData.WeChatOpenID = openID; //PlasCommon.Common.AddLog("", "获取用户信息开始1", "获取用户信息开始1", ""); var userInfo = wechat.GetUserInfoSns(openID); //PlasCommon.Common.AddLog("", "获取用户信息成功", "获取用户信息成功", ""); string returnstr = mbll.WxOrQQLoginBll(openID, "0"); if (returnstr != "Fail") { string[] resultstr = returnstr.Split(','); //如果微信已经存在则登录 if (resultstr.Length > 0) { mbll.UpdateUserInfobll("HeadImage", userInfo.HeadImgUrl, resultstr[3]); mbll.UpdateUserInfobll("UserName", userInfo.NickName, resultstr[2]); if (resultstr[0].Equals("Success")) { //var returndata = new //{ // usid = resultstr[1], // phone = resultstr[4] //}; //把重要的用户信息进行加密,存放到cookie this.SetAccountData(new AccountData { UserID = resultstr[1], UserName = resultstr[2], HeadImage = resultstr[3], WeChatOpenID = openID }); //PlasCommon.Common.AddLog("", "微信登录成功", "登录成功", ""); //return RedirectToAction("Home", "Index"); //return new RedirectResult("/Home/Index"); returnresultstr = "登录成功!"; returncode = 1; } else { //return Json(Common.ToJsonResult("Fail", "登录失败"), JsonRequestBehavior.AllowGet); returnresultstr = "登录失败!"; } } else { //return Json(Common.ToJsonResult("Fail", "登录失败"), JsonRequestBehavior.AllowGet); returnresultstr = "登录失败!"; } } //不存在则注册,注册成功则返回用户id,注册失败则返回失败状态 else { cp_userview model = new cp_userview(); model.UserName = userInfo.NickName; model.wxopenid = openID; model.HeadImage = userInfo.HeadImgUrl; string registerresultstr = mbll.WxOrQQSaveRegister(model, "0"); //已经存在 if (registerresultstr == "AlreadyExist") { //return Json(Common.ToJsonResult("Fail", "登录失败"), JsonRequestBehavior.AllowGet); returnresultstr = "登录失败!"; } else if (registerresultstr == "Fail") { //return Json(Common.ToJsonResult("Fail", "登录失败"), JsonRequestBehavior.AllowGet); returnresultstr = "登录失败!"; } else if (registerresultstr == "Success") { string returnstr2 = mbll.WxOrQQLoginBll(openID, "0"); string[] resultstr2 = returnstr2.Split(','); if (resultstr2.Length > 0) { if (resultstr2[0].Equals("Success")) { //var returndata2 = new //{ // usid = resultstr2[1], // phone = resultstr2[4] //}; this.SetAccountData(new AccountData { UserID = resultstr2[1], UserName = resultstr2[2], HeadImage = resultstr2[3], WeChatOpenID = openID }); //PlasCommon.Common.AddLog("", "微信登录成功", "登录成功", ""); //return RedirectToAction("Index", "Home"); //return Redirect("/Home/Index"); returnresultstr = "登录成功!"; returncode = 2; //return new RedirectResult("/Home/Index"); } else { //return Json(Common.ToJsonResult("Fail", "登录失败"), JsonRequestBehavior.AllowGet); returnresultstr = "登录失败!"; } } else { //return Json(Common.ToJsonResult("Fail", "登录失败"), JsonRequestBehavior.AllowGet); returnresultstr = "登录失败!"; } } else { //return Json(Common.ToJsonResult("Fail", "登录失败"), JsonRequestBehavior.AllowGet); returnresultstr = "登录失败!"; } } } else { //return Json(Common.ToJsonResult("Error", "登录失败")); returnresultstr = "登录失败!"; } } else { returnresultstr = "登录成功!"; returncode = 3; } } catch (Exception ex) { //PlasCommon.Common.AddLog("", "微信请求错误", ex.Message, ""); //return error("请求有误", ex.Message); returnresultstr = "系统错误:" + ex.Message; } ViewBag.texing = returnresultstr; ViewBag.typecode = returncode; return(View()); }
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); }