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

author author     2022-08-01     267

关键词:

前言

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

          

wex5开发基础之微信支付

一、企业开通微信支付条件      微信支付是集成在微信客户端的支付功能,用户可以通过手机完成快速的支付流程。微信支付以绑定银行卡的快捷支付为基础,向用户提供安全、快捷、高效的支付服务。 ... 查看详情

新书《微信企业号开发揭秘》已出版,全书采用wechatenterprise框架开发

    新书《微信企业号开发揭秘》已出版,全书基于源码与API逐步讲解,采用WeChatEnterprise框架开发  纸质书购买地址: 天猫  京东  当当  亚马逊 WeChatEnterprise框架源码下载、克隆地址:https://github.com/Mr-Jia... 查看详情

微信内登陆与认证

之前一直做PC端比较多,最近在做公司的微信企业号,涉及到一个问题,我们这个公众号是为特定的企业开放的,用于园区资产平台管理,所以涉及到一个用户登录认证的问题。一、描述。在微信的内部页面运行:当用户未关注... 查看详情

前端工程实训(代码片段)

...础课的内容,复习时可以参考发的小程序ppt小程序概念、微信开发概念小程序账号申请、工具下载使用学习一下小程序项目结构、小程序生命周期概念小程序中写页面的模板语法小程序中写交互的事件的相关知识小程序页面跳转... 查看详情

微信开发小结——积累与沉淀(代码片段)

前言微信开发是个人、企业或组织在拥有超大用户群体的微信应用上,利用微信公众平台,开发类似插件或服务的轻应用。微信公众平台分为三种:订阅号:主要面向媒体和个人,旨在为用户提供信息资讯ÿ... 查看详情

微信公众号开发笔记1(nodejs开发的)

本篇记录了微信公众号开发的一些笔记一、微信服务器与我们服务器的交流微信开发者拥有自己的服务器,在我们服务器上可以与微信服务器进行交流。既然可以交流,那就必定需要前提条件(微信认证),也就是说,只有自己... 查看详情

微信公众号及小程序开发入门(代码片段)

开发过程中一些对微信公众号和小程序的认识。一、服务号在公众号开发入门一中提到,微信公众号分为订阅号和服务号,其中服务号功能最强,只准企业申请,并且要每年交300元认证费。如果企业想拥有自己的... 查看详情

微信企业号开发:微信用户信息和web网页的session的关系

   微信企业号的用户是须要验证的,因此能关注企业号的用户事实上就是已经通过验证的用户。但企业应用中打开一个网页,在这个网页中怎样依据微信用户的信息创建web应用中最长使用的session呢?微信用户怎样和we... 查看详情

微信企业号第三方应用开发[四]——用户登录应用

应用被授权方企业号授权后,授权方企业号用户即可以登录应用。至此,接入企业号第三方应用的开发到了最后一步——获取登录用户信息。 在企业号开发中要获取用户信息,需要获取到用户经OAuth2.0验证时生成的code... 查看详情

公众平台服务号订阅号企业号的相关说明

公众号:是开发者/商家在微信公众平台上申请的应用账号,该账号与QQ账号互通,通过公众号,商家可在微信平台上实现和特定群体的文字、图片、语音、视频的全方位沟通、互动,公众号包括服务号+订阅号。 订阅号、服... 查看详情

企业号微信支付公众号支付h5调起支付api示例代码jssdkc#.net

 先看效果:1.本文演示的是微信【企业号】的H5页面微信支付2.本项目基于开源微信框架WeiXinMPSDK开发:https://github.com/JeffreySu/WeiXinMPSDK感谢作者苏志巍的开源精神 一、准备部分相关参数:AppId:公众号的唯一标识(登陆微... 查看详情

php之微信公众号发送模板消息

讲一下开发项目中微信公众号发送模板消息的实现过程(我用的还是Thinkphp5.0)。先看一下效果,如图:就是类似于这样的,下面讲一下实现过程:第一步:微信公众号申请模板消息权限:立即申请:申请过程就不说了,提交并且... 查看详情

新书《微信企业号开发揭秘》已出版,全书采用wechatenterprise框架开发

    新书《微信企业号开发揭秘》已出版,全书基于源码与API逐步讲解,采用WeChatEnterprise框架开发  纸质书购买地址: 天猫  京东  当当  亚马逊 WeChatEnterprise框架源码下载、克隆地址:https://github.com/Mr-Jia... 查看详情

新书《微信企业号开发揭秘》已出版,全书采用wechatenterprise框架开发

    新书《微信企业号开发揭秘》已出版,全书基于源码与API逐步讲解,采用WeChatEnterprise框架开发  纸质书购买地址: 天猫  京东  当当  亚马逊 WeChatEnterprise框架源码下载、克隆地址:https://github.com/Mr-Jia... 查看详情

微信服务号订阅号和企业号的区别(运营和开发两个角度)

...谢原博主的无私分享.一、运营的角度1.1、概括订阅号:微信最初的形态是一个纯粹的社交工具,也就是人与人之间的联系工具,其中又分熟人之间的联系和陌生人之间的联系,于是就诞生了朋友圈和订阅号。而订阅号的作用就... 查看详情

微信企业号开发[一]——创建应用

...面,后续文章中将对填写的URL进行改造4、成功创建后在微信中打开企业号即可看见已创建的应用 [目录][下一篇]微信企业号开发[二]—& 查看详情

微官网是微信公众号还是其他啥的,公司想开一个,怎么弄?

参考技术A微官网是微信公众号还是其他什么的,公司想开一个,怎么弄?微官网是基于微信公众帐号上进行二次开发的用来展示企业信息的手机网站。方法/步骤1、注册微信帐号,并且认证帐号(认证后的帐号,可以使用开发者... 查看详情

[wechat]微信开放平台下绑定微信公众号并创建网站应用的操作指南(代码片段)

注:微信开放平台:=微信公众平台Step0申请独立的新邮箱账号作为【微信开放平台】的账号主体的注册管理员一般只有大型公司才会搭建自己的邮箱服务器;可以个人申请QQ邮箱或者163、outlook作为独立的邮箱账号、这是阔以的。St... 查看详情