/// <summary> /// 微信认证 /// https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx24e47efa56c2e554&redirect_uri=http%3a%2f%2fmap.lywenkai.cn%2fWeChatManage%2fWeiXinHome%2fRedirect&response_type=code&scope=snsapi_userinfo&state=http%3a%2f%2fmap.lywenkai.cn%2fWeChatManage%2fLogin%2fIndex#wechat_redirect /// </summary> /// <param name="code">snsapi_userinfo</param> /// <param name="state">回调url</param> /// <returns></returns> public ActionResult Redirect(string code, string state) { LogHelper.AddLog($"微信认证请求地址:{System.Web.HttpContext.Current.Request.Url.ToString()} 参数code: {code},参数state: {state}"); //若用户禁止授权,则重定向后不会带上code参数 if (string.IsNullOrEmpty(code)) { return(Redirect(state)); } else { WeixinToken token = new WeixinToken(); //判断是否保存微信token,用户网页授权,不限制 if (Session[WebSiteConfig.WXTOKEN_SESSION_NAME] != null) { token = Session[WebSiteConfig.WXTOKEN_SESSION_NAME] as WeixinToken; } else { string tokenUrl = string.Format(WeixinConfig.GetTokenUrl2, code); LogHelper.AddLog($"请求tokenUrl地址: {tokenUrl}"); token = AnalyzeHelper.Get <WeixinToken>(tokenUrl); if (token.errcode != null) { return(Content("网页授权Error:" + token.errcode + ":" + token.errmsg)); } Session[WebSiteConfig.WXTOKEN_SESSION_NAME] = token; } Session["OpenId"] = token.openid;//进行登录 LogHelper.AddLog($"token.openid: {Session["OpenId"]}"); //查询用户是否存在 var userEntity = wechatUserBll.GetEntity(token.openid); if (userEntity == null) { string userInfoUrl = string.Format(WeixinConfig.GetUserInfoUrl2, token.access_token, token.openid); var userInfo = AnalyzeHelper.Get <WeixinUserInfo>(userInfoUrl); if (userInfo.errcode != null) { Response.Write(userInfo.errcode + ":" + userInfo.errmsg); Response.End(); } else { userEntity = new WeChat_UsersEntity() { City = userInfo.city, Country = userInfo.country, HeadimgUrl = userInfo.headimgurl, NickName = userInfo.nickname, OpenId = userInfo.openid, Province = userInfo.province, Sex = userInfo.sex, AppName = Config.GetValue("AppName2") }; wechatUserBll.SaveForm("", userEntity); } } Session[WebSiteConfig.WXUSER_SESSION_NAME] = userEntity; return(Redirect(state)); } }
internal static void CreateWeixinToken(WeixinToken item) { string connectionString = GlobalConfig.DbConn; string commandText = @"INSERT INTO weixintoken ( Access_token, SellerId, Token_Expire ) VALUES ( ?Access_token, ?SellerId, ?Token_Expire )" ; List <MySqlParameter> parameters = new List <MySqlParameter>(); parameters.Add(new MySqlParameter("?Access_token", item.Access_token)); parameters.Add(new MySqlParameter("?SellerId", item.SellerId)); parameters.Add(new MySqlParameter("?Token_Expire", item.Token_Expire)); MySqlHelper.ExecuteNonQuery(connectionString, CommandType.Text, commandText, parameters.ToArray()); }
internal static WeixinToken GetWeixinToken(string access_token, int sellerId) { var wt = new WeixinToken(); string commandText = @"select * from weixintoken where access_token = ?access_token and sellerId = ?sellerId"; List <MySqlParameter> parameters = new List <MySqlParameter>(); parameters.Add(new MySqlParameter("?access_token", access_token)); parameters.Add(new MySqlParameter("?sellerId", sellerId)); try { using (var conn = Utility.ObtainConn(Utility._gameDbConn)) { //MySqlDataReader reader = MySqlHelper.ExecuteReader(GlobalConfig.DbConn, CommandType.Text, commandText, parameters.ToArray()); MySqlDataReader reader = MySqlHelper.ExecuteReader(conn, CommandType.Text, commandText, parameters.ToArray()); while (reader.Read()) { wt.Id = reader.GetInt32(0); wt.SellerId = (int)reader["SellerId"]; wt.Access_token = reader["Access_token"].ToString(); wt.Token_Expire = (DateTime)reader["UserId"]; } } } catch (System.Exception ex) { throw; } return(wt); }
//跳转 public ActionResult Redirect(string code, string state) { //若用户禁止授权,则重定向后不会带上code参数 if (string.IsNullOrEmpty(code)) { return(Redirect(state)); } else { WeixinToken token = new WeixinToken(); //判断是否保存微信token if (Session[WebSiteConfig.WXTOKEN_SESSION_NAME] != null) { token = Session[WebSiteConfig.WXTOKEN_SESSION_NAME] as WeixinToken; } else { string tokenUrl = string.Format(WeixinConfig.GetTokenUrl, code); token = AnalyzeHelper.Get <WeixinToken>(tokenUrl); if (token.errcode != null) { return(Content(token.errcode + ":" + token.errmsg)); } Session[WebSiteConfig.WXTOKEN_SESSION_NAME] = token; } //查询用户是否存在 var userEntity = userBll.GetEntity(token.openid); if (userEntity == null) { string userInfoUrl = string.Format(WeixinConfig.GetUserInfoUrl, token.access_token, token.openid); var userInfo = AnalyzeHelper.Get <WeixinUserInfo>(userInfoUrl); if (userInfo.errcode != null) { Response.Write(userInfo.errcode + ":" + userInfo.errmsg); Response.End(); } else { userEntity = new WeChat_UsersEntity() { City = userInfo.city, Country = userInfo.country, HeadimgUrl = userInfo.headimgurl, NickName = userInfo.nickname, OpenId = userInfo.openid, Province = userInfo.province, Sex = userInfo.sex, AppName = WeixinConfig.AppName }; userBll.SaveForm("", userEntity); } } Session[WebSiteConfig.WXUSER_SESSION_NAME] = userEntity; return(Redirect(state)); } }
public ActionResult WeixinQYHSignIn(string code) { try { if (string.IsNullOrEmpty(code)) { return(Json(new { code = 1, Msg = "参数错误" })); } string corpId = "wwa26d4508575b5fe9"; string secret = "cwcclxDJ0GMIlxsn2U_3kWQUPoiDupZOZMrKFqDDcnI"; WebClient wcl = new WebClient(); string url = string.Format("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={0}&corpsecret={1}", corpId, secret); string json = wcl.DownloadString(url); WeixinToken token = JsonConvert.DeserializeObject <WeixinToken>(json.Replace("\\", "")); if (token.errcode != 0) { return(Json(new { Code = 1, Msg = "获取信息失败" })); } //获取微信用户OpenId url = string.Format("https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token={0}&code={1}", token.access_token, code); json = wcl.DownloadString(url); WeixinQYHUser wxUser = JsonConvert.DeserializeObject <WeixinQYHUser>(json.Replace("\\", "")); if (wxUser.errcode != 0) { return(Json(new { Code = 1, Msg = "获取信息失败" })); } //获取微信用户信息 url = string.Format("https://qyapi.weixin.qq.com/cgi-bin/user/getuserdetail?access_token={0}", token.access_token); json = wcl.UploadString(url, "{\"user_ticket\": \"" + wxUser.user_ticket + "\"}"); WeixinQYHUserDetail wxUserDetial = JsonConvert.DeserializeObject <WeixinQYHUserDetail>(json.Replace("\\", "")); if (wxUserDetial.errcode != 0) { return(Json(new { Code = 1, Msg = "获取信息失败" })); } SysUser user = dbContext.Set <SysUser>().Where(x => x.UserCode == wxUserDetial.userid).FirstOrDefault(); if (user == null) { return(Json(new { Code = 1, Msg = wxUserDetial.userid + "不存在!" })); } SSOClient.SignIn(user.UserId); return(Redirect("/pages/home/weixin.html")); } catch (Exception ex) { LogHelper.SaveLog(ex); return(Json(new { Code = 1, Msg = "服务器异常,请联系管理员!" })); } }
internal static void UpdateWeixinToken(WeixinToken item) { string commandText = @"UPDATE weixintoken SET SellerId = ?SellerId, Access_token = ?Access_token, Token_Expire = ?Token_Expire WHERE Id = ?Id"; List <MySqlParameter> parameters = new List <MySqlParameter>(); parameters.Add(new MySqlParameter("?Id", item.Id)); parameters.Add(new MySqlParameter("?SellerId", item.SellerId)); parameters.Add(new MySqlParameter("?Access_token", item.Access_token)); parameters.Add(new MySqlParameter("?Token_Expire", item.Token_Expire)); MySqlHelper.ExecuteNonQuery(GlobalConfig.DbConn, CommandType.Text, commandText, parameters.ToArray()); }
/// <summary> /// 微信认证 /// https://open.weixin.qq.com/connect/oauth2/authorize /// ?appid=wx24e47efa56c2e554 /// &redirect_uri=http%3a%2f%2fmap.lywenkai.cn%2fWeChatManage%2fWeiXinHome%2fRedirect /// &response_type=code&scope=snsapi_userinfo /// &state=http%3a%2f%2fmap.lywenkai.cn%2fWeChatManage%2fLogin%2fIndex /// #wechat_redirect /// </summary> /// <param name="code">snsapi_userinfo</param> /// <param name="state">回调url</param> /// <returns></returns> public ActionResult Redirect(string code, string state) { //若用户禁止授权,则重定向后不会带上code参数 if (string.IsNullOrEmpty(code)) { return(Redirect(state)); } else { WeixinToken token = new WeixinToken(); //判断是否保存微信token,用户网页授权access_token,不限制,,拿到授权access_token和openid if (Session[WebSiteConfig.WXTOKEN_SESSION_NAME] != null) { token = Session[WebSiteConfig.WXTOKEN_SESSION_NAME] as WeixinToken; } else { string tokenUrl = string.Format(WeixinConfig.GetTokenUrl, code); token = AnalyzeHelper.Get <WeixinToken>(tokenUrl); if (token.errcode != null) { return(Content(token.errcode + ":" + token.errmsg)); } Session[WebSiteConfig.WXTOKEN_SESSION_NAME] = token; } //查询用户是否存在 var userEntity = wechatUserBll.GetEntity(token.openid); if (userEntity == null) { #region CacheFactory方式获取token ////全局token--基础access_token,每日限额2000 //var cacheToken = CacheFactory.Cache().GetCache<string>("access_token"); //if (cacheToken == null) //{ // var userInfoBase = AnalyzeHelper.Get<WeixinTokenBase>(WeixinConfig.GetTokenBaseUrl); // cacheToken = userInfoBase.access_token; // CacheFactory.Cache().WriteCache(cacheToken, "access_token", DateTime.Now.AddSeconds(7000)); //} #endregion //改成盛派容器获取基础token string base_token = TemplateWxApp.getToken(); //获取AccessToken结果 string userInfoUrl = string.Format(WeixinConfig.GetUserInfoUrl, base_token, token.openid); var userInfo = AnalyzeHelper.Get <WeixinUserInfo>(userInfoUrl); if (userInfo.errcode != null) { Response.Write(userInfo.errcode + ":" + userInfo.errmsg); Response.End(); } else { LogHelper.AddLog("用户关注状态:" + userInfo.subscribe.ToString()); if (userInfo.subscribe != 1) { //未关注 //未关注先跳转关注https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzU3MzczNTY4Mw==#wechat_redirect //微信7.0之后限制,加载完成之后按钮一闪而逝,WeixinConfig.BizUrl,生成二维码,从微信打开该链接即可 return(RedirectToAction("Guanzhu", "Brand")); } userEntity = new WeChat_UsersEntity() { City = userInfo.city, Country = userInfo.country, HeadimgUrl = userInfo.headimgurl, NickName = userInfo.nickname, OpenId = userInfo.openid, Province = userInfo.province, Sex = userInfo.sex, AppName = Config.GetValue("AppName") }; wechatUserBll.SaveForm("", userEntity); } } Session[WebSiteConfig.WXUSER_SESSION_NAME] = userEntity; return(Redirect(state)); } }
public ActionResult WeixinGZHSignIn(string code) { try { if (string.IsNullOrEmpty(code)) { return(Json(new { code = 1, Msg = "参数错误" })); } string appId = "wx806943202a75a124"; string appSecret = "d52257abea1018eec3a798005ba4f841"; WebClient wcl = new WebClient(); string url = string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", appId, appSecret, code); string json = wcl.DownloadString(url); WeixinToken token = JsonConvert.DeserializeObject <WeixinToken>(json.Replace("\\", "")); LogHelper.SaveLog("wxgzhsignin", url); LogHelper.SaveLog("wxgzhsignin", json); if (token.errcode != null) { return(Json(new { Code = 1, Msg = "获取信息失败" })); } SysUserOpenId userOpenId = dbContext.Set <SysUserOpenId>().Where(x => x.OpenId == token.openid).FirstOrDefault(); if (userOpenId != null && userOpenId.UserId != Guid.Empty) { SSOClient.SignIn(userOpenId.UserId.Value); return(Redirect("/pages/home/weixin.html")); } else { return(Redirect("/pages/account/bind.html?sign=wx&openid=" + token.openid)); } //自动创建本地用户,适用面向公众网站,项目根据需要调整逻辑。 //url = string.Format("https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}&lang=zh_CN", token.access_token, token.openid); //json = wcl.DownloadString(url); //WeixinGZHUser wxUser = JsonConvert.DeserializeObject<WeixinGZHUser>(json.Replace("\\", "")); //if (wxUser.errcode != null) // return Json(new { Code = 1, Msg = "获取信息失败" }); //SysUser user = new SysUser(); //user.UserId = Guid.NewGuid(); //user.UserName = wxUser.nickname; //user.UserCode = Guid.NewGuid().ToString("N").Substring(20); //user.DepartmentId = new Guid("2379788E-45F0-417B-A103-0B6440A9D55D"); //dbContext.SysUser.Add(user); //userOpenId = new SysUserOpenId(); //userOpenId.OpenId = token.openid; //userOpenId.UserId = user.UserId; //userOpenId.CreateTime = DateTime.Now; //userOpenId.BindTime = DateTime.Now; //dbContext.SysUserOpenId.Add(userOpenId); //dbContext.SaveChanges(); //SSOClient.SignIn(userOpenId.UserId.Value); //return Redirect("/pages/home/weixin.html"); } catch (Exception ex) { LogHelper.SaveLog(ex); return(Json(new { Code = 1, Msg = "服务器异常,请联系管理员!" })); } }