博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#微信公众号开发--网页授权(oauth2.0)获取用户基本信息一
阅读量:5892 次
发布时间:2019-06-19

本文共 4289 字,大约阅读时间需要 14 分钟。

前言

     微信网页授权共分为两种方式:snsapi_base、snsapi_userinfo。 snsapi_base需要关注公众号,获取用户信息时不弹出用户授权界面。 snsapi_userinfo是在用户未关注公众号的情况下浏览页面,会先弹出一个用户授权界面,用户授权后才能拿到用户信息。这一篇我们先看snsapi_base实现。

 

踩坑注意     

  • 刚开始我调试时snsapi_base方式,点击页面地址时提示地址链接不可用,网页授权需要先在公众号里设置网页授权基本信息,也就是设置域名。
  • 区分清楚全局access_token和网页授权access_token

   

这里注意只填写到域名

 

看效果

       这里看我们通过oauth  snsapi_base已经拿到用户的基本信息,对于一般咨询类的开发也就够用了。

 

看思路

1、通过回掉地址先拿到code。

2、通过code拿到openid。

3、通过appid和appsecret拿到全局access_token(这一点区别于snsapi_userinfo)。

4、通过全局access_token和openid拿到用户信息。

 

看代码

     到这里也就简单了,主要是get方式调微信接口,同时准备好你的get和post请求方式,返回参数用json转化成实体类。

public ActionResult OAuthSnsApiBase() {      string code = Request.QueryString["code"];      try     {           if (!string.IsNullOrEmpty(code))           {                   OAuthToken oauthToken = HttpUtility.Get
(string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", appID, appsecret, code)); string accesstoken = string.Empty; AccessToken token = HttpUtility.Get
(string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}",appID,appsecret)); if (token != null && !string.IsNullOrEmpty(token.access_token)) { accesstoken = token.access_token; } if (oauthToken != null && !string.IsNullOrEmpty(oauthToken.openid)) { OAuthUserInfo userInfo = HttpUtility.Get
(string.Format("https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}&lang=zh_CN", accesstoken, oauthToken.openid)); if (userInfo != null) { ViewData["headImage"] = userInfo.headimgurl; ViewData["openid"] = userInfo.openid; ViewData["nickName"] = userInfo.nickname; if (userInfo.sex == 0) { ViewData["sex"] = "未知"; } else if (userInfo.sex == 1) { ViewData["sex"] = "男"; } else { ViewData["sex"] = "女"; } ViewData["province"] = userInfo.province; ViewData["city"] = userInfo.city; } else { } } else { } } else { return Redirect(string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state=123456#wechat_redirect", appID,"http://"+Request.Url.Host + Url.Action("OAuthSnsApiBase"))); } } catch (Exception ex) { ViewData["errmsg"] = ex.Message; } return View(); }
public class OAuthToken    {        public string access_token { get; set; }        public int expires_in { get; set; }        public string refresh_token { get; set; }        public string openid { get; set; }        public string scope { get; set; }    } public class AccessToken    {        public string access_token { get; set; }        public int expires_in { get; set; }    }public class OAuthUserInfo    {        public string openid { get; set; }        public string nickname { get; set; }        public int sex { get; set; }        public string province { get; set; }        public string city { get; set; }        public string country { get; set; }        public string headimgurl { get; set; }        public string privilege { get; set; }        public string unionid { get; set; }            }

  

总结

     这里获取用户信息的接口是。和网页授权二获取用户接口是不一样的。

    代码全部上传到github里:

参考

 

 

转载地址:http://rhysx.baihongyu.com/

你可能感兴趣的文章
[小白技巧]在Ubuntu 14.04中,如何从Unity启动器上移除盘符图标
查看>>
POI导出JavaWeb中的table到excel下载
查看>>
只有数据分析师才能看懂的十大吐槽
查看>>
《无人机DIY》——4 制作四轴直升机I:选择 机身 
查看>>
《单页Web应用:JavaScript从前端到后端》——1.3 精心编写的单页应用的用户效益...
查看>>
记录一些React的一些细节,会不断更新
查看>>
自己常用的mixin(持续更新)
查看>>
[译] 移动技术在改善财务健康方面的作用
查看>>
播放音频的工具类
查看>>
人工智能:是拿什么向奇点迫近的?
查看>>
南京a货翡翠,天津a货翡翠
查看>>
css3 渐变
查看>>
SystemCenter2012SP1实践(26)VMM下HyperV的高可用(下)
查看>>
Hadoop源代码分析(*IDs类和*Context类)
查看>>
钢丝流-BISU的战斗哲学
查看>>
struts2中的自定义拦截器
查看>>
解决opensips启动时出现PID file /var/run/opensips.pid does not exist 的错误
查看>>
33.Azure创建自动伸缩虚拟机规模集(上)
查看>>
Linux基础知识之命令的语法通用格式
查看>>
我的友情链接
查看>>