来源:自学PHP网 时间:2015-04-14 12:58 作者: 阅读:次
[导读] 要将我们的Web账号和微信账号绑定到一起,必须要用到微信openid的概念,每个账号对于不同公众号都会有一个openid ,可以根据openid与我们的账号关联到一起。而openid 的获取最主要的:微...
|
要将我们的Web账号和微信账号绑定到一起,必须要用到微信openid的概念,每个账号对于不同公众号都会有一个openid ,可以根据openid与我们的账号关联到一起。 而openid 的获取最主要的:
可能用到的地方:
直接上代码:(由于开发过程中未用到 授权snsapi_userinfo的,所以代码先空着,哪天勤劳的时候补上。。。。请勿鄙视)
#region 应用授权作用域,snsapi_base
//授权获取到的code
string code = "";
//通过code获取用户信息 不需要关注公众号
var sampleInfo = WeiXinHelper.GetUserSampleInfo(code);
string openId = sampleInfo.OpenId;
#endregion
#region (思路一致,开发过程中没用到,暂时放空。。)snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息)
//授权获取到的code
string code2 = "";
//通过code获取用户信息 不需要关注公众号
var sampleInfo2 = WeiXinHelper.GetUserSampleInfo(code2);
string openId2 = sampleInfo2.OpenId;
string accessToken = sampleInfo2.Access_Token;
//todo:刷新accessToken 获取 refresh_token(如果需要)
//todo:获取用户信息
#endregion
//这种方法获取用户信息,需要用户关注公众号
WeiXinUserInfo info = WeiXinHelper.GetUserInfo(openId);
用到的两个类WeiXinUserInfo、WeiXinUserSampleInfo:
/// <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
|
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com