第一步:获取AppID AppSecret(去微信开放平台申请网址https://open.weixin.qq.com/)
第二步:生成扫描二维码,获取code
https://open.weixin.qq.com/connect/qrconnect?appid=yourAppId&redirect_uri=http%3A%2F%2Fwww.shisezhe.com%2Fcallback%2FweixinLogin.html&response_type=code&scope=snsapi_login&state=" + random + “#wechat_redirect”
(注:
appid是在微信开入平台申请通过后获得的appID,
redirect_uri(重定向地址,需要进行UrlEncode,实现登录接口后自己网站的页面处理,比如跳转到会员后台页面)
response_type:code(写死的,不用管它)
state:(用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验,我是用的生成的随机数,放在session里,等一下验证)
然后就是调用接口代码
用一个
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.Security; public partial class callback_WeixinLogin : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (Session["loginState"] != null && Request.QueryString["state"] != null && Request.QueryString["code"] != null) { string state = Request.QueryString["state"].ToString(); if (!Session["loginState"].ToString().Equals(state)) { Response.Redirect("../Reminder-reviewError.html"); Response.End(); } else { string code = Request.QueryString["code"].ToString(); QQ_callback qq_callback = new QQ_callback(); //通过code获取微信用户的资料,下面贴代码 Weixin_info weixin_info = qq_callback.getWeixinUserInfoJSON(code); string openId = weixin_info.unionid; Handler handler = new Handler(); string userId = handler.GetCallback(openId); string userName = weixin_info.nickname; string sex = weixin_info.sex; if ("1".Equals(sex)) { sex = "男"; } else if ("0".Equals(sex)) { sex = "女"; } else { sex = "保密"; } string userSex = sex; string pwd = "123456;//初始密码 pwd = Encrypt.MD5.MD5Encrypt(pwd); string province = weixin_info.province; //string city = weixin_info.city; string prId = ""; string dqqy = ""; string lgoinMode = "WeiXin"; //获取ip string memberIP = handler.GetHostAddress(); //登录信息存到数据库,初始密码123456 handler.AddQQTempMember(openId, pwd, memberIP, userName, userSex, prId, dqqy, lgoinMode); //登录成功,跳转到会员中心首页 Response.Redirect("../member/index.html"); } } else { //如果没有获得几个参数就重定向到自己定义的错误提示页面 Response.Redirect("../Reminder-reviewError.html"); //Response.End(); } } }
通过微信code获到用户微信的资料信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77using System; using System.Collections.Generic; using System.Linq; using System.Web; using Newtonsoft.Json.Linq; using Newtonsoft.Json; using System.IO; using System.Net; using System.Text; /// <summary> ///QQ_callback 的摘要说明 /// </summary> public class QQ_callback { public QQ_callback() { // //TODO: 在此处添加构造函数逻辑 // } /// <summary> /// 获得Weixn回调信息字符串json /// </summary> /// <param name="code">Authorization Code</param> /// <returns></returns> public Weixin_info getWeixinUserInfoJSON(string code) { string appid = "你在微信开放平台申请通过后的获得的appid"; string secret = "你在微信开放平台申请通过后的获得的secret"; string apiurl = string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", appid,secret, code); System.GC.Collect(); System.Net.ServicePointManager.DefaultConnectionLimit = 200; WebRequest request = WebRequest.Create(apiurl); WebResponse response = request.GetResponse(); Stream stream = response.GetResponseStream(); Encoding encode = Encoding.UTF8; StreamReader reader = new StreamReader(stream, encode); string jsonText = reader.ReadToEnd(); JObject jo1 = (JObject)JsonConvert.DeserializeObject(jsonText); string access_token = jo1["access_token"].ToString(); string refresh_token = jo1["refresh_token"].ToString(); string openid = jo1["openid"].ToString(); string url_me = string.Format("https://api.weixin.qq.com/sns/oauth2/refresh_token?appid={0}&grant_type=refresh_token&refresh_token={1}",appid, refresh_token); request = WebRequest.Create(url_me); response = request.GetResponse(); stream = response.GetResponseStream(); reader = new StreamReader(stream, encode); string openIdStr = reader.ReadToEnd(); JObject jo = (JObject)JsonConvert.DeserializeObject(openIdStr); //string access_token = jo["access_token"].ToString(); string openId = jo["openid"].ToString(); 根据OpenID获取用户信息 可以显示更多 用的就几个 需要的可以自己在下面加 string getinfo = string.Format("https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}", access_token, openId); request = WebRequest.Create(getinfo); response = request.GetResponse(); stream = response.GetResponseStream(); reader = new StreamReader(stream, encode); string userStr = reader.ReadToEnd(); //this.Label1.Text = userStr; //this.Label2.Text = openIdStr; JObject info = (JObject)JsonConvert.DeserializeObject(userStr); Weixin_info weixin_info = new Weixin_info();//自己定义的dto weixin_info.openId = openId; weixin_info.nickname = info["nickname"].ToString(); weixin_info.sex = info["sex"].ToString(); weixin_info.province = info["province"].ToString(); weixin_info.city = info["city"].ToString(); weixin_info.headimgurl = info["headimgurl"].ToString();//大小为30×30像素的QQ空间头像URL。 weixin_info.unionid = info["unionid"].ToString();//用户统一标识。针对一个微信开放平台帐号下的应用,同一用户的unionid是唯一的。 reader.Close(); stream.Flush(); stream.Close(); response.Close(); return weixin_info; } }
自己定义的Weixin_infodto
1
2
3
4
5
6
7
8
9
10
11public class Weixin_info { public string openId { get; set; }//普通用户的标识,对当前开发者帐号唯一 public string nickname { get; set; }//普通用户昵称 public string sex { get; set; }//普通用户性别,1为男性,2为女性 public string province { get; set; }//普通用户个人资料填写的省份 public string city { get; set; }//普通用户个人资料填写的城市 public string headimgurl { get; set; }//用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空 public string unionid { get; set; }//用户统一标识。针对一个微信开放平台帐号下的应用,同一用户的unionid是唯一的。 }
以上代码就可以实现微信扫码登录
演示网址(https://www.shisezhe.com/login.html),点击上面的微信登录图标就可以实现微信扫码登录,如果有不明白的可以评论
最后
以上就是喜悦寒风最近收集整理的关于C#实现微信扫码登录的全部内容,更多相关C#实现微信扫码登录内容请搜索靠谱客的其他文章。
发表评论 取消回复