首页 > 代码库 > C#微信开发之旅(八):通过授权code以及openid获取用户信息
C#微信开发之旅(八):通过授权code以及openid获取用户信息
要将我们的Web账号和微信账号绑定到一起,必须要用到微信openid的概念,每个账号对于不同公众号都会有一个openid ,可以根据openid与我们的账号关联到一起。
而openid 的获取最主要的:
- 微信推送给我们的各种消息
- 网页授权
可能用到的地方:
- 注册(通过网页授权获取openid,与注册的账户关联起来)
- 公众号菜单配置为网页授权Url,免登陆
- 统计分析(比如:关注用户中的注册、未注册用户数量)
直接上代码:(由于开发过程中未用到 授权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 #endregion10 11 #region (思路一致,开发过程中没用到,暂时放空。。)snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息)12 13 //授权获取到的code14 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 #endregion26 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_CN43 /// </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 WeiXinUserSampleInfo68 {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
C#微信开发之旅(八):通过授权code以及openid获取用户信息
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。