C# MVC获取微信openId

控制器端

此项目使用的是.Net FrameWork4.5、MVC5

微信登录界面

  public ActionResult WX()
        {
          
            return View();
        }

绑定微信时调用的方法

//wx.aaa.cn是你这个微信公众号对应的网址
 public ActionResult WXBind()
        {
            string appid = "你的appId";
            return Redirect("https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid + "&redirect_uri=" + Url.Encode("http://wx.aaa.cn/控制器/WxRegisterAndLogin") + "&response_type=code&scope=snsapi_userinfo&state=state#wechat_redirect");

        }

判断是否有code如果数据库里有对应的用户则直接用这个用户账号登录,如果没有则调用对应的微信登录。

//传入的是openid和返回路径
  public async Task<ActionResult> WxRegisterAndLogin(string code, string ReturnUrl = "")
        {

           
              string url = ReturnUrl;
             

            string appid = ConfigurationManager.AppSettings["配置文件里的微信appid名"];
            string secret = ConfigurationManager.AppSettings["配置文件里的微信secret名 "];
          
            var client = new System.Net.WebClient();
            client.Encoding = System.Text.Encoding.UTF8;
            string url2 = GetAccessTokenUrl(appid, secret, code);
            var data = client.DownloadString(url2);
            var obj = JsonConvert.DeserializeObject<Dictionary<string, string>>(data);
            string accessToken;
            if (!obj.TryGetValue("access_token", out accessToken))
            {
			#if DEBUG
               // httpContext.Response.Write("构造网页授权获取access_token的URL时出错");
               // httpContext.Response.End();
			#endif
            }
            var openid = obj["openid"];

            string openId2 = openid;
                if (openId2 == null|| openId2=="")
                {
                 //没有获取到微信的openId
                }
                else
            {
            //根据openID去数据库里查询,是否有这个openid对应的用户
                UserEntity userEntity = CommonApp.GetUserByWeChat(openId2);
                //如果返回的用户实体不为空,则说明此openid绑定了用户,则直接登录
                if (userEntity != null)
                {
                    //如果用户不等于空则直接登录

						//做登录相关操作,之后跳转到首页
                  
                        //跳转到某个特定的页面
                        url = "../Home/Index";



                    }
                else
                    {
                    //由于code会传入前端,所以需进行加密。
                   string dec=DESEncrypt.Encrypt(openId2);
                   //此路径为登录界面。可输入密码和账户。进行登录
                    url = "../login/wx?code="+ dec;
                	}
                }
               
               
                return Redirect(url);
           
        }


返回请求Code的路径

		
        public string GetAccessTokenUrl(string appId, string secret, string code, string grantType = "authorization_code")
        {
            object[] args = new object[] { appId, secret, code, grantType };
            string requestUri = string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type={3}", args);
            return requestUri;
        }

微信登录

WX前端点击登录时触发这个函数

//传入的的值是用户名,密码,openId,客户端IP,地址
public ActionResult WXCheckLogin(string username, string password, string code, string IP, string Address)
        {
			//对Code进行解密
            code = DESEncrypt.Decrypt(code);
            try
            {
					//根据用户输入的用户名和密码查询数据库返回用户实体
                用户实体 userEntity = new UserApp().CheckLogin(username, password);
                //判断用户输入的账号是否已绑定微信
              if (userEntity.微信openId字段== null || userEntity.微信openId字段== "")
                {
                    string sql = " Update 表  set 微信openId字段='" + code.Trim() + "' where 用户Id='" + userEntity.用户Id + "'";
                    //执行sql修改对应用户的openid
                    DBHelper.ExecuteNonQuery(sql);
                }
                 else
                {
                    //提示输入的用户名和密码已绑定微信
                }
                if (userEntity != null)
                {
             		//登录相关操作。   
                }
            }
            catch (Exception ex)
            {
               //登录失败。
            }
        }

微信开发时需要将项目的端口设置为127.0.0.1
在这里插入图片描述

修改hosts

【hosts文件路径:C:\Windows\System32\drivers\etc】
hosts文件后面添加
127.0.0.1 微信对应的网址
例如
127.0.0.1 wx.aaa.cn

下载微信调试工具

微信开发者工具下载路径
在输入栏内输入【http://wx.aaa.cn/控制器名/WXBind】就可以进行微信绑定测试了

C是计算机科学中的一种编程语言。它是由美国贝尔实验室的丹尼斯·里奇于1972年为开发UNIX操作系统而设计的。C语言是一种高级语言,但也具有接近底层的功能和性能。它为程序员提供了更高的灵活性和控制力。 C语言是一种结构化的编程语言,它使用简单的语法和关键字,使程序员能够编写高效的代码。C语言具有良好的可移植性,因此可以在不同的操作系统和硬件上运行,这也使得C语言成为了广泛使用的编程语言之一。 C语言的特点包括强大的指针操作功能、内存管理的能力、丰富的运算符和数据类型。它还提供了丰富的标准库,包括输入输出函数、字符串处理函数等,简化了编程过程。 C语言的应用范围非常广泛。它被用于开发操作系统、编译器、数据库系统、嵌入式系统以及各种科学和工程领域的应用程序。许多其他编程语言,如C++和Java,都是以C语言为基础发展而来的。 学习C语言对于计算机科学专业的学生来说非常重要。掌握C语言可以帮助他们理解计算机底层的工作原理,并提高他们的编程能力。此外,C语言也是很多公司和科研机构招聘时的必备技能之一。 总之,C语言是一种重要的编程语言,具有广泛的应用和重要的教育价值。掌握C语言可以帮助人们成为优秀的程序员,并为他们的职业发展带来更多的机会。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

或与且与或非

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值