博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信企业号 获取用户信息
阅读量:6251 次
发布时间:2019-06-22

本文共 4542 字,大约阅读时间需要 15 分钟。

业务操作最基础的一个功能是获取访客的身份,传统的获取方式是提供一个登录页面用以访客登录。

在微信企业号中,用户在微信中访问页面时,可以根据相关API获取此用户的微信账号信息,以此来匹配业务服务器存储的相关用户信息。

目录

1.  

2.  

 

1. 介绍

1.1 说明

企业号的网页开发,说白了就是移动端web开发,特殊点在于如何获取微信用户的身份信息。

在企业号中可以进行如下步骤获取微信用户信息:

访问一个业务页面时,可通过获取此用户信息 → 根据code获取userId → 根据userId获取微信信息。

 

1.2 详细流程

① 获取code

API

说明:网页经过OAuth2.0验证后,重定向到原来网页并在url后面添加code信息。

:http://akmsg.com/a.html => OAhth2.0 => http://akmsg.com/a.html?code=CODE&state=STATE

② 根据code获取userId

API

说明:调用此接口后将会获得 userId;注:userId为加密后的微信账号。

③ 根据userId获取微信信息

API

说明:调用此接口后将会获得此访问者在企业号登记的具体信息;如:姓名、微信号、手机号、邮箱、职位等等。

④ 根据微信信息获取逻辑用户信息

说明:从上一步骤获取的微信信息,可以用来跟业务逻辑进行匹配获取此用户在业务层中的用户信息。

 

1.3 流程图

 

2. 代码示例

2.1 代码(C#)

逻辑:Asp.net对客户端发送的请求进行判断,符合微信企业号页面规则的将进行微信企业号用户身份认证操作。

此功能对访问请求的三种情况进行分别判断:

1.第一次访问,没code :进行OAuth验证

2.有code,没cookie :获取code对应的信息

3.有code,有cookie :验证cookie

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/// <summary>
/// 验证微信访问
/// </summary>
public 
static 
void 
Auth(HttpContext webContext)
{
 
    
string 
requestURL = webContext.Request.Url.AbsoluteUri;
 
    
try
    
{
        
// 用户访问微信页面有3种情况:
        
// 1.第一次访问,没code
        
// 2.有code,没cookie;
        
// 3.有code,有cookie
 
        
// 1.第一次访问,没code,没cookie:跳转到Oauth2.0认证
        
if 
(
string
.IsNullOrEmpty(webContext.Request[
"code"
]))
        
{
            
string 
url = 
string
.Format(
"https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect"
, CORPID, webContext.Server.UrlEncode(requestURL));
            
webContext.Response.Redirect(url, 
false
);
        
}
        
else 
if 
(!
string
.IsNullOrEmpty(webContext.Request[
"code"
]) && 
string
.IsNullOrEmpty(CookieHelper.GetCookie(
"WXToken"
)))
        
{
            
// 2.有code,没cookie:根据code获取userID
            
string 
code = webContext.Request[
"code"
];
            
string 
userId = 
""
;
            
string 
userInfo = 
""
;
 
            
#region 1)根据code获取userId
 
            
string 
url = 
string
.Format(
"https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token={0}&code={1}"
, GetAccessToken(), code);
            
string 
responseText = HttpHelper.Instance.
get
(url);
            
/*
                
API:http://qydev.weixin.qq.com/wiki/index.php?title=OAuth%E9%AA%8C%E8%AF%81%E6%8E%A5%E5%8F%A3#.E6.A0.B9.E6.8D.AEcode.E8.8E.B7.E5.8F.96.E6.88.90.E5.91.98.E4.BF.A1.E6.81.AF
                
正确的Json返回示例:
                
{
                   
"UserId":"USERID",
                   
"DeviceId":"DEVICEID"
                
}
                
未关注企业号时返回:
                
{
                   
"OpenId":"OPENID",
                   
"DeviceId":"DEVICEID"
                
}
                
错误的Json返回示例:
                
{
                   
"errcode": "40029",
                   
"errmsg": "invalid code"
                
}
            
*/
            
WeChatUserCodeEntity codeEn = JsonHelper.GetEntity<WeChatUserCodeEntity>(responseText);
            
if 
(codeEn.errcode > 0)
            
{
                
throw 
new 
Exception(codeEn.errmsg);
            
}
            
else 
if 
(
string
.IsNullOrEmpty(codeEn.UserId))
            
{
                
throw 
new 
Exception(
"请先关注企业号!"
);
            
}
            
userId = codeEn.UserId;
 
 
            
#endregion
 
            
#region 2)根据userId获取用户信息
 
            
url = 
string
.Format(
"https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token={0}&userid={1}"
, GetAccessToken(), userId);
            
responseText = HttpHelper.Instance.
get
(url);
            
/*
                
API:http://qydev.weixin.qq.com/wiki/index.php?title=%E7%AE%A1%E7%90%86%E6%88%90%E5%91%98#.E8.8E.B7.E5.8F.96.E6.88.90.E5.91.98
                
正确的Json返回示例:
                
{
                   
"errcode": 0,
                   
"errmsg": "ok",
                   
"userid": "zhangsan",
                   
"name": "李四",
                   
"department": [1, 2],
                   
"position": "后台工程师",
                   
"mobile": "15913215421",
                   
"gender": "1",
                   
"email": "zhangsan@gzdev.com",
                   
"weixinid": "lisifordev", 
                   
"avatar": "http://wx.qlogo.cn/mmopen/ajNVdqHZLLA3WJ6DSZUfiakYe37PKnQhBIeOQBO4czqrnZDS79FH5Wm5m4X69TBicnHFlhiafvDwklOpZeXYQQ2icg/0",
                   
"status": 1,
                   
"extattr": {"attrs":[{"name":"爱好","value":"旅游"},{"name":"卡号","value":"1234567234"}]}
                
}
                
错误的Json返回示例:
                
{
                   
"errcode": "40029",
                   
"errmsg": "invalid code"
                
}
            
*/
            
WeChatUserInfoEntity userInfoEn = JsonHelper.GetEntity<WeChatUserInfoEntity>(responseText);
            
if 
(userInfoEn.errcode > 0)
            
{
                
throw 
new 
Exception(userInfoEn.errmsg);
            
}
            
userInfo = responseText;
 
            
#endregion
 
            
// 3.把userInfo传入到cookie里
            
CookieHelper.SetCookie(
"WXToken"
, userInfo, -1);
        
}
        
else 
if 
(!
string
.IsNullOrEmpty(webContext.Request[
"code"
]) && !
string
.IsNullOrEmpty(CookieHelper.GetCookie(
"WXToken"
)))
        
{
            
#region 3.有code,有cookie:校验cookie
            
// TODO:在上面进行存入cookie时可采用AES加密,在这部进行解密校验
            
// CookieHelper.SetCookie("WXToken", "", -1);
            
#endregion
        
}
        
else
        
{
            
throw 
new 
Exception(
"非授权访问!"
);
        
}
 
    
}
    
catch 
(Exception ex)
    
{
        
throw 
ex;
    
}
}

  

2.2 运行图

1) 用户已关注访问时

 

2) 用户不属于企业通讯录访问时

  

2.3 Dmeo下载(C#)

下载地址

 

==================================系列文章==========================================

本篇文章:1.3 微信企业号 获取用户信息

1.微信企业号

  1.1 

  1.2 

  1.3 

  1.4 

2.微信公众号

  2.1 

  2.2 

 
分类: 

转载地址:http://yjysa.baihongyu.com/

你可能感兴趣的文章
第四次作业
查看>>
4196. [NOI2015]软件包管理器【树链剖分】
查看>>
Apache Spark源码走读之20 -- ShuffleMapTask计算结果的保存与读取
查看>>
Ext 4.2.1 教大家如何去规避ext-all和动态加载机制的优缺点
查看>>
异常处理汇总 ~ 修正果带着你的Code飞奔吧!
查看>>
jdbc
查看>>
百度地图需要的效果-有感
查看>>
查看 NPM、Yarn 全局安装的包
查看>>
[BZOJ 2140]稳定婚姻(强连通分量)
查看>>
人工智能工程师学习路线
查看>>
Nginx入门(2)反向代理和负载均衡
查看>>
MySQL库表状态查询
查看>>
【鲁班学院】干货分享!《面试必备之Mysql索引底层原理分析》
查看>>
第十一周项目0-是春哥啊
查看>>
poi做一个简单的EXCAL
查看>>
几种查询emacs帮助的办法
查看>>
Python_基础_(模块,time,random,os,sys,json,shelve,xml,序列化反序列化)
查看>>
异常:Project configuration is not up-to-date with pom.xml解决方案
查看>>
HDU2647 拓扑排序
查看>>
ThinkPHP/---微信支付PC流程
查看>>