当前位置:
首页 > Python基础教程 >
-
C#教程之C#微信公众号开发--网页授权(oauth2.0)获取
前言
微信网页授权共分为两种方式: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转化成实体类。
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
|
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}&secret={1}&code={2}&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&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<OAuthUserInfo>( 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(); } |
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
|
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 ; } } |
总结
这里获取用户信息的接口是https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN。和网页授权二获取用户接口是不一样的。
代码全部上传到github里:https://github.com/garfieldzf8/WeChat
参考
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式