企业号的网页开发,说白了就是移动端web开发,特殊点在于如何获取微信用户的身份信息。
在企业号中可以进行如下步骤获取微信用户信息:
访问一个业务页面时,可通过OAuth验证接口获取此用户信息 → 根据code获取userId → 根据userId获取微信信息。
说明:网页经过OAuth2.0验证后,重定向到原来网页并在url后面添加code信息。
如:http://akmsg.com/a.html => OAhth2.0 => http://akmsg.com/a.html?code=CODE&state=STATE
说明:调用此接口后将会获得 userId;注:userId为加密后的微信账号。
说明:调用此接口后将会获得此访问者在企业号登记的具体信息;如:姓名、微信号、手机号、邮箱、职位等等。
说明:从上一步骤获取的微信信息,可以用来跟业务逻辑进行匹配获取此用户在业务层中的用户信息。
逻辑: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": "[email protected]",
"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;
}
}
|
下载地址:http://files.cnblogs.com/files/polk6/Wechat.QYH.zip
==================================系列文章==========================================
本篇文章:1.3 微信企业号 获取用户信息
文章浏览阅读6.9k次,点赞20次,收藏139次。论文地址:密集连接的卷积神经网络博客地址(转载请引用):https://www.cnblogs.com/LXP-Never/p/13289045.html前言 在计算机视觉还是音频领域,卷积神经网络(CNN)已经成为最主流的方法,比如最近的GoogLenet,VGG-19,Incepetion、时序TCN等模型。CNN史上的一个里程碑事件是ResNet模型的出现,Res..._带denseblock的神经网络结构
文章浏览阅读4w次,点赞7次,收藏23次。一、 先去maven官网:http://maven.apache.org/download.cgi#下载压缩包,下拉页面可以看到好多版本,注意下载的版本为红色标注版本:apache-maven-3.5.0-bin.zip,点击下载即可。 二、 将下载好的压缩包解压到任意目录_maven环境 win
文章浏览阅读1.4w次,点赞14次,收藏84次。一、功能描述 树莓派网关采集485温湿度传感器以及485门磁开关状态数据上报到涂鸦云平台;同时收到云端的指令,树莓派网关处理之后,控制继电器动作,同时继电器返回当前的状态给云端。树莓派与涂鸦云平台交互代码:demo1下载地址树莓派与485子设备通信代码: demo2下载地址二、硬件准备树莓派(Pi4B) 树莓派有两个串口可以使用,一个是硬件串口(/dev/ttyAMA0),另一个是mini串口(/dev/ttyS0)。硬件串口有单独的波特率时钟源,性能好,稳定_树莓派 家庭网关
文章浏览阅读2.3k次,点赞2次,收藏18次。使用docker安装jdk、tomcat、mysql、nginx_docker安装jdk
文章浏览阅读3.7k次。Http 健康检查通过发送周期健康检查,监视 upstream 组中 HTTP 服务的健康状态。包括有NGINX Plus 的自定义主动健康检查。简介NGINX 和NGINX Plus 能够持续的检测 upstream 中的服务,剔除宕机的服务,还可以优雅的将恢复的的服务添加到负载均衡组群中。前提对于被动健康检查,你需要使用开源 NGINX 或者 NGINX Plus对于主动健康检查和实时活动监视仪表板,你需要使用 NGINX Plus一个HTTP upstream 负载均衡群组被动健康_http健康检查
Linux下Python升级步骤:下载源tar包,安装成功后需修改yum配置,使其正常使用。
文章浏览阅读1.7k次,点赞3次,收藏22次。点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤别君去兮何时还?且放白鹿青崖间。须行即骑访名山。1. 前言群控,相信大部..._自己写群控
文章浏览阅读2.5k次,点赞2次,收藏16次。带你真正认识Linux 系统结构Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。1. linux内核内核是操作系统的核心,具有很多最基本功能,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。Linu_带你真正认识linux系统结构
文章浏览阅读4.1w次,点赞74次,收藏840次。Navicat连接Mysql教程 Navica作为一个数据库管理工具,容易上手轻便,这里就当介绍给大家认识认识,同时加深自己的使用过程。文章目录Navicat连接Mysql教程一、检查mysql环境二、测试Navicat连接mysql数据库一、检查mysql环境 在介绍 navicat之前先检查一下 mysql安装环境是否成功。命令行输入:mysql -V出现下图表示你的mysql环境安装是成功的。这个时候我们通过命令行进入mysql查看自己建立过得数据库mysql -_navicat中mysqldump
文章浏览阅读1.8w次,点赞13次,收藏148次。Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。......_springboot
文章浏览阅读103次。C语言字符(&串&数组)处理复习笔记几个函数1.putchar(ch):输出一个字符2.getchar():输入一个字符#include<stdio,h>int main(){ char a,b,c; a = getchar(); b = getchar(); c = getchar(); putchar(a); putchar(b); putchar(c); putchar('\n'); return 0;3.puts(str):输出一个字符串_char str2[] = new char[3]{'w','o','r'}
文章浏览阅读4.9w次,点赞38次,收藏105次。仿射密码是一种表单代换密码,字母表的每个字母相应的值使用一个简单的数学函数对应一个数值,再把对应数值转换成字母。A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 ..._仿射密码