前言

这里完全可以链接一个登录页面,让用户输入用户名密码进行登录的。。。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,点开应用就可以看到agentidbyteData = 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之微信企业号开发(三) 回调模式的接口开发

       

转载于:https://www.cnblogs.com/poplau/p/5819617.html

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

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

    前言 这里完全可以链接一个登录页面,让用户输入用户名密码进行登录的...2333 但是,这样所就完全失去了微信企业号的意义,本来进入微信企业号的时候,就已经对人员身份进行认证了,你这里再让别人登录,不 ...

  2. 【 Apifox】一款前端开发、后端开发、测试人员连连叫好的开发工具

    Apifox官网地址:http://apifox.cn/a103abcc 前言 作为一名程序员,除了开发之外最重要的事就是测试了,谈到测试我们避免不了的事就是如何选择测试工具. 在后端开发我们经常配置 ...

  3. 微信公众号开发获取微信用户openid及访问url身份认证方式

    技术要点: 1.如何获取业务系统中用户身份标识. OPENID是微信公众号中用户的唯一标识,通过OPENID与业务系统中USRID建立一对一的对应关系,这样获取到了OPENID也就能知道所对应的USR ...

  4. 企业微信接入第三方应用并配置身份认证

    这里以百度贴吧为第三方应用为例,url为:https://tieba.baidu.com/index.html 1.创建企业微信第三方应用 第一步,企业微信管理员登录企业微信管理后台添加应用 第二步, ...

  5. 安卓作业----慕课移动应用开发作业15之模仿实现微信界面效果(二)

    此篇综合运用自定义ActionBar.ContextMenu.PopupWindow.Fragment.ViewPager 以及RecyclerView等实现微信页面效果. 同时这也是中国大学慕课移动 ...

  6. 基于MTD的NAND驱动开发(二)

    基于MTD的NAND驱动开发(二) 基于MTD的NAND驱动开发(三) http://blog.csdn.net/leibniz_zsu/article/details/4977853 http:// ...

  7. 微信公众号python_wechat: 微信 Python SDK,支持微信公众号以及企业号的上行消息及 OAuth 接口...

    微信公众号Python-SDK 本SDK支持微信公众号以及企业号的上行消息及OAuth接口.本文档及SDK假设使用者已经具备微信公众号开发的基础知识,及有能力通过微信公众号.企业号的文档来查找相关的接 ...

  8. 微信端中的企业号、订阅号、服务号之前的区别

    微信端中的企业号.订阅号.服务号之前的区别 一直在开发微信端的企业号和订阅号,却还不太清楚两者之间的区别到底在哪,以下是找的文档区别. 企业号: 面向人群:面向企业,政府.事业单位和非政府组织,实现生 ...

  9. 适合新手学习的laravel接入微信接口,实现微信公众号二次开发

    2019独角兽企业重金招聘Python工程师标准>>> 最近使用laravel做微信公众号二次开发,发现网上能够参考的资料基本上很少,很多地方都讲的不够详细,致使许多新手采坑无数,所 ...

  10. 敏捷外包工程系列之二:人员结构(敏捷外包工程,敏捷开发,产品负责人,客户价值)...

    本文是敏捷外包工程系列的第二篇.(之一,之二,之三,之四) 敏捷开发整体上适合小团队.产品研发(所以才有product owner一称)的环境,而外包软件开发中常常存在的则相反,因此在创建团队的时候要 ...

最新文章

  1. 谷歌云TPU服务正式全面开放:「AlphaGo背后的芯片」进入商用化
  2. java多张图片合成一张_OLIS 多张图片合成分享
  3. 商汤三体梦幻联动,能遭遇水滴的那种元宇宙要来了!我在现场听见了次元壁破碎的声音...
  4. ALV OO的栏位属性
  5. androdi 中listview.setTextFilterEnabled(boolean)的作用
  6. Streams全库复制
  7. python - work3
  8. C#的RSA加密解密签名,就为了支持PEM PKCS#8格式密钥对的导入导出
  9. 如何拆计算机主机箱,一种方便拆卸的计算机主机箱的制作方法
  10. 二、Web服务器——ServletHTTPRequest笔记
  11. 敏捷开发框架_力软敏捷开发框架,不需要程序员也能做的开发工具
  12. HDOJ--2544--最短路
  13. 存在链接注入漏洞_【安全提示】CNVD发布上周关注度较高的产品安全漏洞(20200817-20200823)...
  14. 编写xml文件不当时会出现R文件找不到情况
  15. 直线扫描转换-DDA算法
  16. HammerDB造数报错
  17. java实现excel 行列转置,行列转换。附完整代码
  18. Flappy Bird游戏——Python
  19. 如何压缩图片jpg大小?怎么缩小jpg大小kb?
  20. 图书馆信息管理系统文档

热门文章

  1. 黑客白皮书:如何成为一名黑客(附FAQ)
  2. Microsoft Help Viewer无法打开的问题
  3. 怎么用阿里云服务器部署项目?上传简单项目
  4. USYD悉尼大学INFO1110 详细作业解析Week4 revision(未更新完)
  5. 网贷平台倒闭了钱要还吗?网贷平台倒闭了怎么还钱
  6. VMware14下载安装ubuntu14.04.6(VMware系列二)
  7. SpringCloud-使用熔断器防止服务雪崩-Ribbon和Feign方式(附代码下载)
  8. 为什么越来越多的人放弃欧美市场,转做Starday日本市场?
  9. Emoji 映射编码
  10. [译]-100行代码从零实现 Facebook 的 Recoil 库