C#微信开发之旅(八):通过授权code以及openid获取用户信息

要将我们的Web账号和微信账号绑定到一起,必须要用到微信openid的概念,每个账号对于不同公众号都会有一个openid ,可以根据openid与我们的账号关联到一起。

而openid 的获取最主要的:

  1. 微信推送给我们的各种消息
  2. 网页授权

可能用到的地方:

  1. 注册(通过网页授权获取openid,与注册的账户关联起来)
  2. 公众号菜单配置为网页授权Url,免登陆
  3. 统计分析(比如:关注用户中的注册、未注册用户数量)

直接上代码:(由于开发过程中未用到 授权snsapi_userinfo的,所以代码先空着,哪天勤劳的时候补上。。。。请勿鄙视)

 1             #region 应用授权作用域,snsapi_base
 2
 3             //授权获取到的code
 4             string code = "";
 5             //通过code获取用户信息 不需要关注公众号
 6             var sampleInfo = WeiXinHelper.GetUserSampleInfo(code);
 7             string openId = sampleInfo.OpenId;
 8
 9             #endregion
10
11             #region (思路一致,开发过程中没用到,暂时放空。。)snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息)
12
13             //授权获取到的code
14             string code2 = "";
15             //通过code获取用户信息 不需要关注公众号
16             var sampleInfo2 = WeiXinHelper.GetUserSampleInfo(code2);
17             string openId2 = sampleInfo2.OpenId;
18             string accessToken = sampleInfo2.Access_Token;
19
20             //todo:刷新accessToken 获取 refresh_token(如果需要)
21
22             //todo:获取用户信息
23
24
25             #endregion
26
27             //这种方法获取用户信息,需要用户关注公众号
28             WeiXinUserInfo info = WeiXinHelper.GetUserInfo(openId);

用到的两个类WeiXinUserInfo、WeiXinUserSampleInfo:

 1     /// <summary>
 2     /// 用户详细信息
 3     /// </summary>
 4     public class WeiXinUserInfo
 5     {
 6         /// <summary>
 7         /// 用户是否订阅该公众号标识,值为0时,代表此用户没有关注该公众号,拉取不到其余信息。
 8         /// </summary>
 9         public int Subscribe { get; set; }
10
11         /// <summary>
12         /// 用户的标识,对当前公众号唯一
13         /// </summary>
14         public string OpenId { get; set; }
15
16         /// <summary>
17         /// 用户的昵称
18         /// </summary>
19         public string NickName { get; set; }
20
21         /// <summary>
22         /// 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
23         /// </summary>
24         public string Sex { get; set; }
25
26         /// <summary>
27         /// 用户所在城市
28         /// </summary>
29         public string City { get; set; }
30
31         /// <summary>
32         /// 用户所在国家
33         /// </summary>
34         public string Conuntry { get; set; }
35
36         /// <summary>
37         /// 用户所在省份
38         /// </summary>
39         public string Province { get; set; }
40
41         /// <summary>
42         /// 用户的语言,简体中文为zh_CN
43         /// </summary>
44         public string Language { get; set; }
45
46         /// <summary>
47         /// 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空
48         /// </summary>
49         public string HeadImgUrl { get; set; }
50
51         /// <summary>
52         /// 用户关注时间,为时间戳。如果用户曾多次关注,则取最后关注时间
53         /// </summary>
54         public string Subscribe_Time { get; set; }
55
56         /// <summary>
57         /// 只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段
58         /// </summary>
59         public string UnionId { get; set; }
60
61
62     }
63
64     /// <summary>
65     /// 只包含OpenId的用户信息
66     /// </summary>
67     public class WeiXinUserSampleInfo
68     {
69         public string Access_Token { get; set; }
70         public string Expires_In { get; set; }
71         public string Refresh_Token { get; set; }
72         public string OpenId { get; set; }
73
74         public string Scope { get; set; }
75     }

最后,WeiXinHelper内方法:

 1         #region 获取用户信息
 2
 3         /// <summary>
 4         /// 根据用户Code获取用户信息(包括OpenId的简单信息)
 5         /// </summary>
 6         /// <param name="code"></param>
 7         /// <returns></returns>
 8         public static WeiXinUserSampleInfo GetUserSampleInfo(string code)
 9         {
10             string url = string.Format(WeiXinConst.WeiXin_User_OpenIdUrl, code);
11             WeiXinUserSampleInfo info = HttpClientHelper.GetResponse<WeiXinUserSampleInfo>(url);
12             return info;
13         }
14
15         /// <summary>
16         /// 根据用户Code获取用户信息(包括OpenId的简单信息)
17         /// </summary>
18         /// <param name="code"></param>
19         /// <returns></returns>
20         public static string GetUserOpenId(string code)
21         {
22             return GetUserSampleInfo(code).OpenId;
23         }
24
25         /// <summary>
26         /// 根据OpenID 获取用户基本信息(需关注公众号)
27         /// </summary>
28         /// <param name="openId"></param>
29         public static WeiXinUserInfo GetUserInfo(string openId)
30         {
31             var token = AccessToken.Instance;
32             string url = string.Format(WeiXinConst.WeiXin_User_GetInfoUrl, token.Access_Token, openId);
33
34             string result = HttpClientHelper.GetResponse(url);
35
36             if (string.IsNullOrEmpty(result))
37                 return null;
38
39             WeiXinUserInfo info = JsonConvert.DeserializeObject<WeiXinUserInfo>(result);
40             //解析用户信息失败,判断 失败Code ,40001 为AccessToken失效,重新创建Token并获取用户信息
41             if (info == null || string.IsNullOrEmpty(info.OpenId))
42             {
43                 ErrorMessage msg = JsonConvert.DeserializeObject<ErrorMessage>(result);
44                 if (msg.TokenExpired)
45                 {
46                     return GetUserInfoByNewAccessToken(openId);
47                 }
48             }
49
50             return info;
51         }
52
53         /// <summary>
54         /// 创建新的AccessToken 并获取用户信息
55         /// </summary>
56         /// <param name="openId"></param>
57         /// <returns></returns>
58         private static WeiXinUserInfo GetUserInfoByNewAccessToken(string openId)
59         {
60             var token = AccessToken.NewInstance;
61             string url = string.Format(WeiXinConst.WeiXin_User_GetInfoUrl, token.Access_Token, openId);
62             WeiXinUserInfo info = HttpClientHelper.GetResponse<WeiXinUserInfo>(url);
63             return info;
64         }
65
66         #endregion
时间: 2024-11-08 20:53:23

C#微信开发之旅(八):通过授权code以及openid获取用户信息的相关文章

微信订阅号里实现oauth授权登录,并获取用户信息 (完整篇)

摘要 这段时间一直有人问我,订阅号实现的oauth授权登录的问题,之前写的比较简单,很多人不明白.众所周知,微信公众号分订阅号.服务号.企业号:每个号的用途不一样,接口开放程度也不一样.微信还有个扯淡的开放平台,号称统一管理众多公众号的.反正都是交钱的功能多,两个平台把我弄得傻傻分不清楚.切入正题,上个公司有个微信订阅号,内嵌了一个微网站,并且要实现授权登录. oauth 授权登录 前段时间一直有人问我有关订阅号实现的oauth授权登录的问题,之前一篇写的比较简单,很多人不明白. 众所周知,微信

微信开发(八)微信网页授权( Oauth )通过Oauth获取用户信息

div#cpmenu {height:200px;float:left;} div#cpcontent {height:200px;width:150px;float:left;} 文章作者:松阳 原文链接:http://blog.csdn.net/fansongy/article/details/45340951 网页授权 微信开发时,我们总是想要尽可能多的活动用户的信息.但微信官方和用户本身,又不想暴露这些信息.搞来搞去,就出现了很多奇形怪状的规则和交互方式.微信网页授权就是其中之一,它可以

.net MVC微信开发自定义View类型菜单时在相应控制器获取用户OpenID的问题

因为公司的项目在接收微信服务器Post过来的数据包是有指定的入口,所以在相应控制器里无法接收到微信服务器Post过来的数据,所以无法获得OpenID,也尝试过先在入口哪里解析获得OpenID再通过Session的方式传递过去的方法,但失败了,最后得出的方法是先在微信开发者中心进行网页授权设置相对应需要授权网页的域名,再把自定义菜单里View的URl节点按照相应的回调页链接设置就可以在所需要获得用户OpenID的控制器里通过获取回调页所携带的Code参数去调用 https://api.weixin

微信授权登录并获取用户信息接口开发

总结一下微信授权登录并获取用户信息 这个接口的开发流程. 一.首先你的微信公众号要获得相应的AppID和AppSecret,申请微信登录且通过审核后,才可开始接入流程. 二.授权流程 1.流程说明 (1). 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数: (2). 通过code参数加上AppID和AppSecret等,通过API换取access_token: (3). 通过access_token进行接口调用,获取

微信公众号开发_如何获取用户信息?

如何获取用户信息? sence: 1)有微信服务认证号,并已开通功能:网页服务>>网页账号>>网页授权获取用户基本信息 2)设置:网页授权获取用户基本信息 后面的 修改 ,设置成 www.jianshu.com [注脚1] 3)用户已经关注公众号 实现功能:获取用户信息userinfo. THINK: 网页授权获取用户基本信息 具体而言,网页授权流程分为四步: 1.引导用户进入授权页面同意授权,获取code 2.通过code换取网页授权access_token(与基础支持中的acc

微信公众号开发入门---STATE 2:获取用户信息

微信以openid获取用户信息 //先获取access_token $wxin_conf = Yii::$app->params['oauth_conf']['oauth_wx_in']; $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$wxin_conf['app_id']."&secret=".$wxin_conf['

php微信网页授权获取用户信息

配置回调域名: 1. 引导用户进入授权页面同意授权,获取code 2. 通过code换取网页授权access_token(与基础支持中的access_token不同) 3. 如果需要,开发者可以刷新网页授权access_token,避免过期 4. 通过网页授权access_token和openid获取用户基本信息 先自己建立两个文件: index.php  和  getUser.php 代码实例 index.php如下: 1 <?php 2 $appid = "公众号的appid"

PHP版微信第三方实现一键登录及获取用户信息的方法

本文实例讲述了PHP版微信第三方实现一键登录及获取用户信息的方法.分享给大家供大家参考,具体如下: 注意,要使用微信在第三方网页登录是需要"服务号"才可以哦,所以必须到官方申请. 一开始你需要进入微信公众平台开启开发模式,并且填写oauth2的回调地址,地址填写你项目的域名就可以了.比如:www.baidu.com或zhidao.baidu.com.如果你的项目在二级域名就写二级域名 前端url授权地址,在url中填写appid与你项目中方法中的oauth的地址,具体在下面的代码中可以

微信第三方登陆,无需注册一键登录,获取用户信息,PHP实现方法.

今天讲讲利用微信oauth2实现第三方登陆的实现方法. 先说说前提吧! 首先你得是服务号,并且是经过认证的.这样微信会给你很多第三方接口的权限,如果是订阅号或者没有认证的服务号那就不用想了! 一开始你需要进入微信公众平台开启开发模式,并且填写oauth2的回调地址,地址填写你项目的域名就可以了.比如:www.baidu.com或zhidao.baidu.com.如果你的项目在二级域名就写二级域名 前端url授权地址,在url中填写appid与你项目中方法中的oauth的地址,具体在下面的代码中可