.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, 0, 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, 0, 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之微信企业号开发(三) 回调模式的接口开发

       

时间: 2024-10-19 02:55:55

.net之微信企业号开发(二) 企业号人员身份认证与开发的相关文章

微信企业号开发之 企业号人员身份认证与开发

前言 这里完全可以链接一个登录页面,让用户输入用户名密码进行登录的...2333 但是,这样所就完全失去了微信企业号的意义,本来进入微信企业号的时候,就已经对人员身份进行认证了,你这里再让别人登录,不是显得多余么? 于是,需要考虑的是,如何获取微信企业号中用户的身份,以及将用户身份与自有系统进行关联. 一.建立企业应用并配置可信域名 在微信的管理界面里面,建立一个企业应用.建立的过程很简单,但是这里需要注意的是,建立完以后,一定要配置可信域名!!!!并且如果你不是使用的标准端口,一定也要把端口配

微信公众平台教程,注册申请、认证、开发、推广营销,教你怎么用微信公众号

微信公众平台教程 微信公众平台上至少有580多万公众号,8亿的微信用户参与其中,如此聚宝盆如何挖掘呢?本微信公众平台教程,以ytkah自己的使用体会教你怎么用微信公众号,包括微信公众平台注册申请.认证.开发.推广营销.成功案例,公众平台消息导出,关注用户备份,图文消息排版美化,图片尺寸,微信菜单设置,使用技巧等 教程目录 微信公众平台分类 微信公众平台注册,微信公众平台申请 微信公众平台登录 微信公众平台认证 微信公众平台开发 微信公众平台推广,微信公众平台营销 微信公众平台分类 服务号 给企业

小白日记36:kali渗透测试之Web渗透-手动漏洞挖掘(二)-突破身份认证,操作系统任意命令执行漏洞

手动漏洞挖掘 ###################################################################################### 手动漏洞挖掘原则[会比自动扫描器发现的漏洞要多,要全面] 1.每一个变量都进行尝试 2.所有头[如:cookie中的变量] 3.逐个变量删除 #####################################################################################

ExtJS 4.2 业务开发(二)数据展示和查询

本篇开始模拟一个船舶管理系统,提供查询.添加.修改船舶的功能,这里介绍其中的数据展示和查询功能. 目录 1. 数据展示 2. 数据查询 3. 在线演示 1. 数据展示 在这里我们将模拟一个船舶管理系统,并提供查询.添加.修改的功能. 大致的目录结构如下: ShipMgrTab.js :船舶业务的入口. controller 目录:存放船舶业务的逻辑控制文件. model 目录:存放船舶业务的model文件. store 目录 :存放船舶业务的store文件. view 目录 :存放船舶业务的组件

[转载]微信公众平台二次开发之自定义菜单接口

原文地址:微信公众平台二次开发之自定义菜单接口作者:糊涂人 今天在SAE上运行代码时出现了一个小问题,所以发一篇博客与大家分享,这也是我第一次写关于技术上的博客,希望大家帮忙顶顶 步骤1. 你要有一个公众号,自己申请,过程略,很简单的. 步骤2. 登陆进去->高级功能,这时候要想开发必须要输入url和token,这里方法我引一下别人的文章http://www.cnblogs.com/txw1958/p/wechat-tutorial.html. 步骤3. 如果上面的工作完成了,这个时候你会在高级

基于java的微信公众号二次开发视频教程

详情请交流  QQ  709639943 00.基于java的微信公众号二次开发视频教程 00.leetcode 算法 面试 00.北风网 零基础到数据(大数据)分析专家-首席分析师 00.快速上手JMeter 00.Jmeter 00.2017年Java web开发工程师成长之路 00.R语言速成实战 00.R语言数据分析实战 00.Python+Django+Ansible Playbook自动化运维项目实战 00.Java深入微服务原理改造房产销售平台 00.Python3入门机器学习 经

微信QQ的二维码登录原理浅析

在很多地方就是都出现了使用二维码登录,二维码付款,二维码账户等应用(这里的二维码种马,诈骗就不说了),二维码验证,多终端辅助授权应用开始多起来,这里先说下啥是二维码,其实二维码就是存了二进制数据的黑白图片,当出现要求二维码登录的时候,服务器会生成一条临时的唯一的二维码信息,发送到客户端以二维码(图片)的形式写入到网页,然后你就会看到统一的四个方形的二维码,如果做的好这个二维码信息应该是有时效的,这里暂且不考虑这些,就简单的微信登录作为例子看看吧: 首先说下整个授权流程: 在客户端网页中会不断向服

测试人员需要了解一下开发人员一直在讲的前后端分离

最近做的一个前后端分离的项目,来了补充一下前后端分离的知识点,发现这篇文章特别好,收藏起来, 这篇文章有点长,哈哈 作者:偏头痛杨 来源:https://blog.csdn.net/piantoutongyang 一.前戏 前后端分离已成为互联网项目开发的业界标准使用方式,通过nginx+tomcat的方式(也可以中间加一个nodejs)有效的进行解耦,并且前后端分离会为以后的大型分布式架构.弹性计算架构.微服务架构.多端化服务(多种客户端,例如:浏览器,车载终端,安卓,IOS等等)打下坚实的基

家电二维码售后服务平台系统开发

家电二维码售后服务平台系统开发,家电二维码售后系统开发,小吴183.2071.6434微电,家电二维码售后软件开发,家电二维码售后平台开发. 互联网平台的节点有两大类型:第一基数节点,也就是弱连接的节点,其规模要大,越大越好,互联网的价值与节点数的平比成正比.第二活跃节点,也就是强连接的节点,其能量要强,越强越好,互联网的价值与其强度成正比. 一.家电维修行业"维修黑幕"层出不穷 记者从一位从事家电维修人士那里了解到,目前行业公认当前家电维修行业有陷阱,"维修黑幕"