• Web开发框架微平台公众号一个登陆页面实现代码


    Web开发框架微平台登陆公众号

    直接贴上代码:

     /// <summary>
        ///Web开发框架 WXLogin1 的摘要说明
        /// </summary>
        public partial class WXLogin1 : AjaxBase, IRequiresSessionState
        {
            string code = ""; //微信返回的Code
            //页面初始化
            protected override void PageLoad()
            {
                base.PageLoad();
                code = Parse.String("code", "");
            }
            //Web开发框架发起微信登录请求
            [QD.Web.Ajax.AjaxMethod]
            public void Login()
            {
                //第一步: 获取code
                Response.Redirect(string.Format(WXLoginConfig.Url_Sep1, WXLoginConfig.APPID, WXLoginConfig.Redirect_Uri));
            }
            //微信授权后,回调函数
            [QD.Web.Ajax.AjaxMethod]
            public void CallBack()
            {
                if (string.IsNullOrEmpty(code))
                    JsonResult(500, "授权失败,code参数无效!");
                mShop model = Oauth();                    //微信授权
                if (model != null)
                    UserLogin(model, model.open_id);                //验证成功后,注册用户、登录
            }
            mShop Oauth()
            {
                //第二步:根据code获取token失败
                string url2 = string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", WXLoginConfig.APPID, WXLoginConfig.APPSECRET, code);
                string html2 = GetHtml(url2);
                MWXLogin json = JsonParse<MWXLogin>(html2);
                if (json == null || string.IsNullOrEmpty(json.Access_Token))
                    JsonResult(500, "'授权失败!无法获取access_token,返回值:' " + html2);
                //第三步: 根据openid和access_token查询用户信息
                string url3 = string.Format("https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}&lang=zh_CN", json.Access_Token, json.OpenID);
                string html3 = GetHtml(url3);
                json = JsonParse<MWXLogin>(html3);
                //web开发框架获取昵称、性别、头像、国家、省份、城市,openid等参数
                if (string.IsNullOrEmpty(json.OpenID))
                    JsonResult(500, "授权失败!无法获取昵称、头像等信息,返回值:" + html3);
                return GetModel(json);
            }
            void UserLogin(mShop model, string unionid)
            {
                //登录成功后的信息
                int userid = 0;
                int code = DaoUser.Login(model, out userid);
                model.Id = userid;
                //获取会员版本
                if (model.Id > 0)
                {
                    model.GroupId = GetGroupId(model.Id);
                }
                if (code == 4007)
                    ShowLoginError(4007);   //账户被禁用
                if (code == 4005)
                {
                    //用户名不存在,注册新账号
                    code = Register(model);
                    //添加积分
                    ShopPointBLL.AddByOption(model.Id, PointOption.MyRegister);
                }
                if (code == 0 || code == 4005)
                {
                    //通过二维码方式邀请的, 加入亲友圈
                    string msg = string.Empty;
                    if (Request.Cookies["fromid"] != null)
                        msg = AddFriend(model.Id);
                    ShowLoginSuccess(model, msg);
                }
                else
                    ShowLoginError(code);
            }
            int Register(mShop model)
            {
                int user_id = 0;
                int code = new ShopBLL().Regist(RegisterType.WeChart, model.NickName, model.Logo, model.open_id, customId, out user_id);
                model.Id = user_id;
                return code;
            }
            mShop GetModel(MWXLogin json)
            {
                Random rand = new Random();
                mShop model = new mShop();
                model.Name = "wx" + rand.Next(10000000, 99999999);
                model.NickName = json.NickName;
                model.Logo = json.HeadImgUrl;   //头像,完整URL
                model.login_type = 3;           //1 账号密码登录,2 QQ登录,3微信登录
                model.Phone = "";
                model.Password = "";
                model.QQ = "";
                model.Email = "";
                model.open_id = json.UnionID;    //必须用unionID,这样才能保证app和网页登录是同一个微信账号
                return model;
            }
            /// <summary>
            /// 获取会员版本
            /// </summary>
            int GetGroupId(int userid)
            {
                Dictionary<string, object> dic = new ShopDAO().Get(userid, "group_id,expiretime");
                if (dic != null && dic["expiretime"] != DBNull.Value)
                {
                    DateTime expiretime = Convert.ToDateTime(dic["expiretime"]);
                    if (expiretime.Subtract(DateTime.Now).TotalDays >= 0)
                        return Convert.ToInt32(dic["group_id"]);
                }
                return 0;
            }
            /// <summary>
            /// 通过二维码邀请方式,添加亲友
            /// </summary>
            /// <param name="userid"></param>
            string AddFriend(int login_userid)
            {
                MoFriend modelFriend = new MoFriend()
                   {
                       userid = Convert.ToInt32(Request.Cookies["fromid"].Value),
                       union_id = login_userid,
                       circle_id = Convert.ToInt32(Request.Cookies["from_circleid"].Value),
                       state = 1,
                       date = DateTime.Now
                   };
                return FriendBLL.AddFriendByCode(modelFriend, login_userid);
                //DaoShopGroup dalGroup = new DaoShopGroup();
                //try
                //{
                //    int add_shop_id = Convert.ToInt32(Request.Cookies["fromid"].Value);
                //    //获取会员的版本
                //    Dictionary<string, object> group = dalGroup.GetMyUsed(add_shop_id);
                //    //更新会员VIP版本
                //    if (group != null)
                //        UserBLL.UpdateVersion(userid, Convert.ToInt32(group["groupid"]), Convert.ToDateTime(group["endtime"]), add_shop_id);
                //}
                //catch (Exception ex)
                //{
                //    new DaoLog().add("wxreg", string.Format("注册后自动升级VIP失败,{0}", ex.Message));
                //}
            }
            void ShowLoginError(int code)
            {
                Response.Redirect(string.Format("{0}/wap/error.html?code={1}&msg=", ZYBConfig.Path.Domain, code));
            }
            void ShowLoginSuccess(mShop model, string msg)
            {
                //记录登录状态
                HttpCookie c1 = new HttpCookie("logintype", "3");
                HttpCookie c2 = new HttpCookie("nick_name", QD.WX.Utill.Util.UrlEncode(model.NickName));
                HttpCookie c3 = new HttpCookie("userid", model.Id.ToString());
                HttpCookie c4 = new HttpCookie("groupid", model.GroupId.ToString());
                c1.Expires = c2.Expires = c3.Expires = c4.Expires = DateTime.Now.AddDays(30);
                Response.Cookies.Add(c1);
                Response.Cookies.Add(c2);
                Response.Cookies.Add(c3);
                Response.Cookies.Add(c4);
                //跳转到亲友页面
                if (Request.Cookies["fromid"] != null)
                {
                    string circle_id = Request.Cookies["from_circleid"].Value;
                    HttpCookie c5 = new HttpCookie("fromid", "0");
                    HttpCookie c6 = new HttpCookie("from_circleid", "0");
                    c5.Expires = c6.Expires = DateTime.Now.AddDays(-1);
                    Response.Cookies.Add(c5);        //清空from_userid
                    Response.Cookies.Add(c6);       //清空from_circleid
                    Response.Redirect(string.Format("/wap/qy_friend.html?circle_id={0}&addmsg={1}", circle_id, msg));
                }
                else if (Request.Cookies["backurl"] != null)
                {
                    //跳转到Web开发框架
    Web开发框架微云登陆
    指定页面,如:扫码绑定血压、血糖设备
                    Response.Redirect(HttpContext.Current.Server.UrlDecode(Request.Cookies["backurl"].Value));    //登录后跳转,在扫描二维码绑定设备中用到
                }
                else
                {
                    //跳转到会员中心
                    Response.Redirect(string.Format("{0}/wap/my.html?code={1}&userid={2}&groupid={3}&logintype={4}&nick_name={5}", ZYBConfig.Path.Domain, code, model.Id, model.GroupId, 3, model.NickName));
                }
            }
            string GetHtml(String url)
            {
                return WebHttpHelper.Request(url);
            }
        }

    本站文章除注明转载外,均为本站原创或翻译,欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,共创和谐网络环境。
    转载请注明:文章转载自:软件开发框架 » Web开发框架微平台公众号一个登陆页面实现代码
    本文标题:Web开发框架微平台公众号一个登陆页面实现代码

  • 相关阅读:
    NIFI简介
    STM32L4R9xxxx图形加速器DMA2D实例使用——32位带alpha透明通道的位图ARGB8888显示时地址对齐问题
    25、如何计算车辆的出车次数?
    26、计算每年每月每天的数据
    11、【打印】打印发票—如何在页面合适地打印发票?
    12、如何将pdf改成word文档呢?
    2、如何设置签名?
    1、outlook邮箱如何撤回邮件?
    【其他】在洛谷上的最优解记录
    【笔记】积性函数、莫比乌斯反演
  • 原文地址:https://www.cnblogs.com/frfwef/p/14574578.html
Copyright © 2020-2023  润新知