基于ASP.NET MVC 微信网页登录授权(scope为snsapi_base) 流程 上 获取OPENID

我们需要判断是否存在OPENID  首先我们得先定义一个全局的OPENID 类似于普通账号密码登录系统的 当前登录用户ID  因为我是MVC 框架  我这里定义一个控制器基类 BaseController 然后将OPENID定义在BaseController中

复制代码
 1  public class BaseController : Controller
 2     {
 3         public string openid
 4         {
 5             get {
 6                 return Session["openid"].ToString();
 7             }
 8             set {
 9                 Session["openid"] = value;
10             }
11         }
12 
13     }
复制代码

 然后定义一个HomeController   写一个 测试登录功能

复制代码
 1     public class HomeController : BaseController
 2     {
 3         // GET: Home
 4         public ActionResult Login()
 5         {
 6             if (string.IsNullOrEmpty(openid)) //openid不存在  跳转授权
 7             {
 8                 //此处忽略10万行授权相关代码
 9             }
10             //此处忽略3000行获取用户信息相关
11             return View();
12         }
13     }
复制代码

 以上为一个大概 忽略大部分无关紧要代码后的微信授权登录功能代码     当然很多人要的都不是这些  接下来 是一些更详细的代码  大概分为2个大模块

  1. 获取OPENID 
  2. 获取用户信息

这里我将这2个模块写成2个方法定义在WXHelper类中

复制代码
    public class WXHelper {
        public string GetOpenID() {
            return "openid";
        }
        public User_UserInfo GetUserInfo() {
            User_UserInfo model_UserInfo = new User_UserInfo();

            return model_UserInfo;
        }
    }
复制代码

 

然后之前的Login Action 可以改成这样

复制代码
        public ActionResult Login()
        {
            if (string.IsNullOrEmpty(openid)) //openid不存在  跳转授权
            {
                openid = WXHelper.GetOpenID();
            }
            //LoginUserInfo 是我当前登录用户信息  你们自行找方式存 Session 或者全局变量之类的
            LoginUserInfo = WXHelper.GetUserInfo();
            return View();
        }
复制代码

下面我们开始实现第一个方法    GetOpenID  官方API

这里具体请求我就不 多说了   主意 几个地方  这里我是采用的 方式为 scope=snsapi_base  

因为这里回调地址 无法写本地地址进行调试 所以我采用 手动记录code  并在有效期内手动在本地写入code 继续往下调试

不情愿的贴上代码

复制代码
        /// <summary>
        /// 获取code 方法
        /// </summary>
        private static void GetWeChat_Code()
        {
            string urlhead = "https://";
            string rediretUrl = "https%3a%2f%2fxxxx.com%2fHome%2fLoadCode";
            string strUrl = $"{urlhead}open.weixin.qq.com/connect/oauth2/authorize?appid={appid}&redirect_uri={rediretUrl}&response_type=code&scope=snsapi_base&state=qwe12e12e#wechat_redirect";
            //此处省略n行get请求方法
        }    
复制代码

 

细心的朋友可能会发现上面的redireUrl 地址指向的是Home 控制器下面 LoadCode 这个 方法  SO

       #region 微信授权回调
        public ActionResult LoadCode(string code, string state)
        {
            return View();
        }
        #endregion

 

因为MVC 的参数映射 所以我只需要把 code  和state  写成方法参数即可 这里我就可以获取到code方法了 然后我们直接通过code 获取OPENID 

复制代码
        #region 获取OpenID

        public static string GetOpenId(string code)
        {
            string urlhead = "https://";
            string strUrl = $"{urlhead}api.weixin.qq.com/sns/oauth2/access_token?appid={appid}&secret={secret}&code={code}&grant_type=authorization_code";
            Access_openid token = new Access_openid();
            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(strUrl);  //用GET形式请求指定的地址 
            req.Method = "GET";

            using (WebResponse wr = req.GetResponse())
            {
                //HttpWebResponse myResponse = (HttpWebResponse)req.GetResponse();  
                StreamReader reader = new StreamReader(wr.GetResponseStream(), Encoding.UTF8);
                string content = reader.ReadToEnd();
                reader.Close();
                reader.Dispose();

                //在这里对Access_token 赋值  
                token = JsonConvert.DeserializeObject<Access_openid>(content);
            }
            return token.openid;
        }

        #endregion
复制代码

 

如果有人对这个Access_openid 对象感到懵逼的话  这里说一下 这个对象就是下图中 红框 获取到的JSON数据 的对象 这里我们是  snsapi_base  所以只需要 openid 切 整个授权过程到次结束


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值