.net之微信企业号开发(二) 企业号人员身份认证与开发
前言
这里完全可以链接一个登录页面,让用户输入用户名密码进行登录的。。。2333
但是,这样所就完全失去了微信企业号的意义,本来进入微信企业号的时候,就已经对人员身份进行认证了,你这里再让别人登录,不是显得多余么?
于是,需要考虑的是,如何获取微信企业号中用户的身份,以及将用户身份与自有系统进行关联。
一、建立企业应用并配置可信域名
在微信的管理界面里面,建立一个企业应用。建立的过程很简单,但是这里需要注意的是,建立完以后,一定要配置可信域名!!!!并且如果你不是使用的标准端口,一定也要把端口配置进去,比如你的网址是m.xxx.com,端口是10000,那么这个可信域名就一定要配置成m.xxx.com:10000。这点一定要注意,否则会走很多弯路!!!(PS现在微信的文档现在把端口号这一条加上了,当时我看文档时没有这个端口号的说明。。。。。。)
二、微信认证接口
1.获取企业code。
微信企业号的认证入口为一个公用地址,采用的是url跳转的方式进行传参。
比如,我的链接地址为 m.xxx.com:10000/WeiXin/Auth
那么,在Auth里面就进行这样的处理
public ActionResult Auth(string id="") {
string url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect";
string redirecturl = "http://m.xxx.com:10000/WeiXin/GetUser/" + id;
redirecturl = Server.UrlEncode(redirecturl);
url = String.Format(url, m_Corpid, redirecturl);
Response.Redirect(url);
return View();
}
这里有两个参数,一个是appid,这个是企业号的Corp_id,这个在企业号左边菜单的“设置”中可以查询。另外一个redirect_uri,指微信认证成功后跳转的地址,这里我的地址是 "http://m.xxx.com:10000/WeiXin/GetUser/"。
微信认证成功后,会自动跳转到“http://m.xxx.com:10000/WeiXin/GetUser/"这里,并且会带一个参数code,这个code是获取用户id的重要参数。
”
public ActionResult GetUser(string id="") {
string code = Careysoft.Basic.Public.BConvert.ToString(Request.QueryString["code"]);
//........
}
2.获取access_token
微信的文档在这里坑爹了,文档里面并没有这一步,而是直接跳过获取用户id。这也让我当时看微信文档觉得莫名其妙,这里一定要注意一下。
获取access_token的方式是http get请求的方式,返回一个json字符串,解析获得access_token。顺便说一下,我这里对json的解析采用了Newtonsoft.Json.dll这个类库,很不错,直接把json转化成需要的类。代码如下:
string url = string.Format("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={0}&corpsecret={1}", m_Corpid, m_CorpSecret);
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "GET";
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
StreamReader reader = new StreamReader(response.GetResponseStream());
string strResponse = reader.ReadToEnd(); //获取微信认证字符
WeiXinTokenModel tokenModel = JsonConvert.DeserializeObject<WeiXinTokenModel>(strResponse);
token = tokenModel.access_token;
}
这里的 corpid 和 corpsecret都可以企业号管理平台的:”设置“->"权限管理"中进行查询。
3.根据code和access_token获取userid
还是通过http get方式获取,这里说一下实效性,code5分钟内有效,只能使用一次,而access_token有效性为7200秒,没什么好说的,直接贴码:
url = String.Format("https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token={0}&code={1}", access_token, code);
request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "GET";
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
StreamReader reader = new StreamReader(response.GetResponseStream());
string strResponse = reader.ReadToEnd(); //获取微信认证字符
WeiXinUserIdModel userModel = JsonConvert.DeserializeObject<WeiXinUserIdModel>(strResponse);
userid = userModel.UserId;
}
4.根据用户userid和access_token获取用户资料信息
方式不变,直接贴码(这里我只需要了用户的手机号码和微信企业号用户名):
url = String.Format("https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token={0}&userid={1}", token, userid);
request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "GET";
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
StreamReader reader = new StreamReader(response.GetResponseStream());
string strResponse = reader.ReadToEnd(); //获取微信认证字符
mobile = strResponse;
WeiXinUserInfoModel userInfoModel = JsonConvert.DeserializeObject<WeiXinUserInfoModel>(strResponse);
mobile = userInfoModel.mobile;
xm = userInfoModel.name;
}
5.根据用户名userid和access_token,获取用户的open_id,或者open_id和app_id
获取的方式同上,但这里需要说明一下,open_id,以及open_id和appid是怎么一回事。用户open_id,主要用于发红包和转账支付时使用,一个用户在企业号中有个以主open_id,他对应于企业的Corp_id;同时用该用户还存在多个对应的open_id和app_id,原因是应为企业号可以创建多个应用,一个用户加入一个应用,就存在一对app_id和open_id。这里发红包的时候必须通过应用的app_id和open_id发送!!!这里注意,如果你使用企业号的Corp_id和open_id发送的话,可以发送成功,但是用户没有地方认领红包,也就无法完成红包功能。当然,如果使用企业转账的话,用哪一组open_id都可以的。
与前面的获取方式有所区别的是,这次获取open_id采用的是post的方式,需要将一段json格式的字符串post过去,然后获取返回值,贴代码:
获取Corp_id对应的open_id:
url = String.Format("https://qyapi.weixin.qq.com/cgi-bin/user/convert_to_openid?access_token={0}", token);
request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "POST";
request.ContentType = "application/json;charset=utf-8";
string data = "{\"userid\":\"" + userid + "\"}";//这里注意
byte[] byteData = UTF8Encoding.UTF8.GetBytes(data.ToString());
request.ContentLength = byteData.Length;
using (Stream postStream = request.GetRequestStream())
{
postStream.Write(byteData, , byteData.Length);
}
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
StreamReader reader = new StreamReader(response.GetResponseStream());
string strResponse = reader.ReadToEnd(); //获取微信认证字符
//mobile = strResponse;
WeiXinOpenIdModel openIdModel = JsonConvert.DeserializeObject<WeiXinOpenIdModel>(strResponse);
openid = openIdModel.openid;
}
获取应用中的app_id和open_id(以后的红包和转账功能会再继续讲解):
url = String.Format("https://qyapi.weixin.qq.com/cgi-bin/user/convert_to_openid?access_token={0}", token);
request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "POST";
request.ContentType = "application/json;charset=utf-8";
data = "{\"userid\":\"" + userid + "\",\"agentid\":" + agentid + "}"; //建立一个企业应用后,会有一个应用ID,点开应用就可以看到agentid
byteData = UTF8Encoding.UTF8.GetBytes(data.ToString());
request.ContentLength = byteData.Length;
using (Stream postStream = request.GetRequestStream())
{
postStream.Write(byteData, , byteData.Length);
}
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
StreamReader reader = new StreamReader(response.GetResponseStream());
string strResponse = reader.ReadToEnd(); //获取微信认证字符
WeiXinOpenIdModel openIdModel = JsonConvert.DeserializeObject<WeiXinOpenIdModel>(strResponse);
appid = openIdModel.appid;
openid=openIdModel.openid;
}
获取了微信用户这些信息,基本可以满足你对用户认证以及微信支付的应用啦!在下一节,我准备写一下微信回调模式的消息接口。
下一节:.net之微信企业号开发(三) 回调模式的接口开发
.net之微信企业号开发(二) 企业号人员身份认证与开发的更多相关文章
- 小白日记36:kali渗透测试之Web渗透-手动漏洞挖掘(二)-突破身份认证,操作系统任意命令执行漏洞
手动漏洞挖掘 ###################################################################################### 手动漏洞挖掘 ...
- (Java)微信之个人公众账号开发(二)——接收并处理用户消息(下)
接下来,我们再讲一下图文消息: 如图: 大家可以先从开发者文档中了解一下图文消息的一些参数: 如上图,用户回复4时,ipastor返回了几条图文消息,上图中属于多图文消息,当然还有单图文消息,图文消息 ...
- SharePoint Server 2013开发之旅(二):使用在线的开发人员网站进行SharePoint App开发
上一篇我已经介绍了新版本的SharePoint Server提供了四种主要的开发场景,其中一个全新的App开发模型让我们眼前一亮.这一篇我将介绍如何在线进行SharePoint App开发. 谈到Sh ...
- Java Web高性能开发(二)
今日要闻: 性价比是个骗局: 对某个产品学上三五天个把月,然后就要花最少的钱买最多最好的东西占最大的便宜. 感谢万能的互联网,他顺利得手,顺便享受了智商上的无上满足以及居高临下的优越感--你们一千块买 ...
- 微信小程序参数二维码6问6答
微信小程序参数二维码[基础知识篇],从6个常见问题了解小程序参数二维码的入门知识. 1.什么是小程序参数码? 微信小程序参数二维码:针对小程序特定页面,设定相应参数值,用户扫描后进入相应的页面. 2. ...
- 微信QQ的二维码登录原理js代码解析
这篇文章主要大家详细解析了微信QQ的二维码登录原理js代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 在很多地方就是都出现了使用二维码登录,二维码付款,二维码账户等应用(这里的二维码种马,诈骗 ...
- iOS开发-二维码扫描和应用跳转
iOS开发-二维码扫描和应用跳转 序言 前面我们已经调到过怎么制作二维码,在我们能够生成二维码之后,如何对二维码进行扫描呢? 在iOS7之前,大部分应用中使用的二维码扫描是第三方的扫描框架,例如Z ...
- javaweb学习之Servlet开发(二)
javaweb学习总结(六)--Servlet开发(二) 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个< ...
- 微信小程序(有始有终,全部代码)开发--- 新增【录音】以及UI改进
开篇语 寒假发了一篇练手文章,不出意外地火了: <简年15: 微信小程序(有始有终,全部代码)开发---跑步App+音乐播放器 > 后来又发了BUG修复的版本,出乎意料的火了: 简年18: ...
随机推荐
- linux下服务端实现公网数据转发
之前在腾讯上使用了一个免费的公网服务器,只有7天,linux系统. 其实有这样的想法,是因为有个研二的师弟问我怎么样才能让连个局域网的电脑通信. 我跟他说了两种方法,一种是找个公网服务器来转发数据,另 ...
- Java调用第三方dll文件的使用方法 System.load()或System.loadLibrary()
Java调用第三方dll文件的使用方法 public class OtherAdapter { static { //System.loadLibrary("Connector") ...
- 关于Servlet手动配置web.xml部分代码
<servlet> <!-- 文件名 --> <servlet-name>deleteServlet</servlet-name> <!-- 文件 ...
- Python模块:struct
各个编程语言都有自己的数据类型,当python需要接受其他语言或者网络传输来交互数据的时候,需要考虑到python的数据类型与其他平台之间交互问题.而python的struct就是解决这个问题的. s ...
- 哈哈,修改PHP5.4.44语法成功
作为一个脚本语言,面向对象的继承基本上不想用到,强类型比较也想使用==直接比较.作为专业程序员不想让PHP解释器代劳过多. 修改了这个MOD版本,效果杠杠的.
- Python切片
切片是啥, 可以吃么 切片肿么用哈 辣么长,记不住 切片是啥, 可以吃么 嘛,所谓切片故名思意就有选取的意思啦, 跟java里面的subString()意思差不多, 从原始的字符串中按规则提取出新的字 ...
- Java String,StringBuffer和StringBuilder的区别
[可变与不可变] String是字符串常量,不可变. StringBuffer和StringBuilder是字符串变量,可变. [执行速度方面] StringBuilder > StringBu ...
- 用datagrid实现完整的一个页面
打怪升级真的好难,记录一点一滴,一滴一点,先上效果图. 1.想完成一个界面,先得有界面.界面是在WebRoot下的根目录文件中新建的zjqktj.jsp中建立的,再通过java在后台调用数据库取出数据 ...
- html5新特性之画布
1.canvas的理解 canvas是一个矩形区域,在这个区域内,通过js可以对区域内的每一帧像素控制 2.js操作canvas对象 canvas对象.getContext("2d" ...
- delphi XE5皮肤的使用
做皮肤其实是项浩大的工程,从美工设计.到贴图.到程序设计,都非常的麻烦,如果不是一个非常成熟的产品且有很大的用户群体,并且公司具有相当实力,一般都不会去自己做皮肤,毕竟涉及的东西太多,一旦出现问题 ...