您的位置:首页 > 运维架构 > 网站架构

.Net-mvc微信公众号和网站微信授权登录的实现

2018-07-25 22:51 796 查看
  最近一段时间一直在做关于微信方面的网站应用开发,这段时间也收获的不少关于微信开发方面的开发技能,接触的比较多的主要有微信公众号和微信网站登录授权,以及微信会员卡,优惠券和扫描二位码的功能,今天我主要想要总结的是微信公众号登录和网站微信授权登录这两者之间的区别于关联。

  首先我们必须区别开来微信公众平台开发是指微信公众号进行业务开发(https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432),为网站微信登录授权是需要在微信开发平台中创建网站应用来使用的(https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&lang=zh_CN)。但是要想把微信公众号于微信网站授权登录获取到的Oppenid关联起来的话我们可以通过UnionID关联起来。

微信开发平台公众账号关联的如下图:

步骤:登录进入微信开发平台----进行微信公众号绑定

1 /// <summary>
2 /// 微信登录注册
3 /// </summary>
4 /// <param name="code">获取用户凭证换取用户网页授权</param>
5 /// <param name="ReturnUrl">跳转地址</param>
6 /// <returns></returns>
7 public async Task<ActionResult> WxRegisterAndLogin(string code, string ReturnUrl = "")
8 {
9
10 try
11 {
12
13 //登录成功后跳转的地址
14
15 string url=ReturnUrl;
16 //通过Code以及微信appscrect和wxappid换取网页授权access_token和用户oppenid
17 HttpClient webClient = new HttpClient();
18 //获取用户微信信息
19 jsonString = await (await webClient.GetAsync("https://api.weixin.qq.com/sns/oauth2/access_token?appid=" +公众号appid+ "&secret=" + 公众号AppSecret + "&code=" + code + "&grant_type=authorization_code")).Content.ReadAsStringAsync();
20
21 //异步获取的用户oppenid和access_token
22 jsonOAuthorObj = JsonConvert.DeserializeObject(jsonString, new { access_token = "", openid = "" }.GetType());
23
24 if (jsonOAuthorObj.openid == null)
25 {
26 return Content(jsonString + "出现错误请重试");
27 }
28
29 var myuser = new user { WxOpenId = jsonOAuthorObj.openid }.SelectObject();
30
31 //注册成功后直接登录,授权会判断是否有账户
32 if (myuser == null)
33 {
34 //拉取用户信息(需scope为 snsapi_userinfo)
35 jsonString = await (await webClient.GetAsync("https://api.weixin.qq.com/sns/userinfo?access_token=" + jsonOAuthorObj.access_token + "&openid=" + jsonOAuthorObj.openid + "&lang=zh_CN")).Content.ReadAsStringAsync();
36 dynamic jsonObj = JsonConvert.DeserializeObject(jsonString, new { nickname = "", headimgurl = "", sex = "", openid = "", country = "", province = "", city = "" }.GetType());
37
38 //创建用户
39 int cUserId = new user { Wximage= jsonObj.headimgurl, WxNickName = jsonObj.nickname, WxOpenId = jsonObj.openid, Sex = Convert.ToInt32(jsonObj.sex), Country = jsonObj.country, Province = jsonObj.province, City = jsonObj.city }.Create();
40
41 return RedirectToAction("WxRegister", "Login", new { ReturnUrl = url });
42
43 }
44 else
45 {
46 //存在用户信息直接登录
47 return Redirect(url);
48 }
49 }
50 catch (Exception e)
51 {
52 return View("MessageInfo", "", e.ToString());
53 }
54 }


View Code

我的总结到这里结束了,我在这里要感谢我身边的那些大佬教会了我很多思考的方法,很多东西只要自己亲身经历过了才会更加的了解,这是小菜今天的总结,有不足的请各位大神指教,同时也希望大家多提提意见,.Net的学习方向该侧重于哪一方面,谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: