当前位置: 主页 > 网络资讯 > 小程序

C#微信公众号开发--网页授权(oauth2.0)获取用户基本信息一

发布时间:2017-01-16 11:02   浏览次数:次   作者:网络

前言

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

 

踩坑注意     

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

  • 区分清楚全局access_token和网页授权access_token

36.jpg

37.jpg

这里注意只填写到域名

 

看效果

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

38.jpg

看思路

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<oauthtoken>
(string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&amp;secret={1}&amp;code={2}&amp;grant_type=authorization_code", appID, appsecret, code));
                    
string accesstoken = string.Empty;                    
AccessToken token = HttpUtility.Get<accesstoken>(string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&amp;appid={0}&amp;secret={1}",
appID,appsecret));                    
if (token != null &amp;&amp; !string.IsNullOrEmpty(token.access_token))                    
{                        
accesstoken = token.access_token;                    
}                                        
if (oauthToken != null &amp;&amp; !string.IsNullOrEmpty(oauthToken.openid))                    
{                                                
OAuthUserInfo userInfo = HttpUtility.Get<oauthuserinfo>(string.Format("https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&amp;openid={1}&amp;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}&amp;redirect_uri={1}&amp;response_type=code&amp;scope=snsapi_base&amp;state=123456
#wechat_redirect", appID,"http://"+Request.Url.Host + Url.Action("OAuthSnsApiBase")));                
}            
}            
catch (Exception ex)            
{                         
ViewData["errmsg"] = ex.Message;            
}                        
return View();        
}</oauthuserinfo></accesstoken></oauthtoken>


# 宋体  # 也就  # 弹出  # 这一  # 是在  # 相关内容  # 两种  # 用了  # 中文网  # 看我  # 解决问题  # 刚开始  # 写到  # 后才  # 先在  # 先看  # 不可用  # 会先  # 转化成  # 浏览过 


相关栏目: 【 网站优化84359 】 【 站长学院75356 】 【 运营推广7218 】 【 小程序18188 】 【 运维技术36808 】 【 营销推广32536 】 【 SEO优化41416 】 【 百度推广27695 】 【 AI推广83940


相关推荐: Go 框架如何解决跨平台兼容性问题?  双引号是否过多,这就是问题所在!  手把手带你在小程序中怎么实现3d裸眼轮播效果  利用Taro + Vue3如何开发小程序?(实践)  浅谈怎么使用小程序实现一个变速大转盘  Android中微信小程序支付倒计时功能  总结关于Referer丢失的问题(微信H5支付)  互联网那些卖一天赚一年的产品(上篇)(派代网)  微信开发者平台小程序怎么开发  如何使用wrk2对golang框架进行性能测试?  unordered_map  C++ 函数的定义和具体用法  streamlit怎么改机器人头像  C++ 自身函数未来的发展趋势如何?  微信小程序中的button按钮宽度设置无效怎么办  聊聊怎么利用小程序生成海报(插件推荐)  【分享阅读】学习Python基础书籍——快速易懂  浅谈小程序怎么实现列表滚动上下联动效果  PHP 函数如何获取匿名函数参数?  unordered_map底层数据结构  PHP 函数如何处理 PHP 8 中引入的错误处理?  聊聊小程序与App间怎么进行跳转  微信8.0状态视频怎么设置  订阅号跟小程序的区别是什么  memset函数原型  printf格式什么意思  王双雄:微商怎么做视频营销?  golang框架如何与安全团队协作?  微信小程序 教程之注册页面  PHP 函数分类的常见陷阱和解决方案  C++ 函数参数传递中异常处理机制是如何设计的?  一个手机号可以注册几个微信号  unordered_map是什么  C++ 函数的单元测试与覆盖率  C++ 函数中默认参数与可变参数的使用  【派代&amp;生意参谋电商论剑征文大赛】重磅!不看江湖地位,只论技法高下,等你来战!  微信小程序 限制1M的瘦身技巧与方法详解  微信小程序有哪几个特点  浅谈微信小程序搭建后台的具体步骤  streamlit怎么导入ai照片  printf输出双精度格式  怎们实现微信小程序拨号功能  寻洲:微商警戒线,你知道几个?()  streamlit怎么运行 streamlit中文教程  微信小程序 教程之模板  微信公众平台开发--表情符号  golang框架的安全性考虑:如何防止缓存中毒攻击?  小程序开发怎么实现视频上传功能  怎么将小程序分享到朋友圈  输出函数printf的一般格式