《微信开发日志》之OAuth2验证接口

OAuth2接口说明:

企业应用中的URL链接(包括自定义菜单或者消息中的链接),可以通过OAuth2.0验证接口来获取员工的身份信息。

通过此接口获取用户身份会有一定的时间开销。对于频繁获取用户身份的场景,建议采用如下方案:

1、企业应用中的URL链接直接填写企业自己的页面地址

2、用户跳转到企业页面时,企业校验是否有代表用户身份的cookie,此cookie由企业生成

3、如果没有获取到cookie,重定向到OAuth验证链接,获取用户身份后,由企业生成代表用户身份的cookie

4、根据cookie获取用户身份,进入相应的页面

注意,此URL的域名,必须完全匹配企业应用设置项中的‘可信域名‘,否则获取用户信息时会返回50001错误码。

企业获取code

企业如果需要员工在跳转到企业网页时带上员工的身份信息,需构造如下的链接:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

  • 参数说明
    参数 必须 说明
    appid 企业的CorpID
    redirect_uri 授权后重定向的回调链接地址,请使用urlencode对链接进行处理
    response_type 返回类型,此时固定为:code
    scope 应用授权作用域,此时固定为:snsapi_base
    state 重定向后会带上state参数,企业可以填写a-zA-Z0-9的参数值
    #wechat_redirect 微信终端使用此参数判断是否需要带上身份信息

    员工点击后,页面将跳转至 redirect_uri/?code=CODE&state=STATE,企业可根据code参数获得员工的userid。

    根据code获取成员信息

  • 请求说明

    Https请求方式:GET

    https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE&agentid=AGENTID

    • 参数说明
    参数 必须 说明
    access_token 调用接口凭证
    code 通过员工授权获取到的code,每次员工授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期
    agentid 跳转链接时所在的企业应用ID
    • 权限说明

    管理员须拥有agent的使用权限;agentid必须和跳转链接时所在的企业应用ID相同。

    • 返回结果

    a)正确时返回示例如下:

    {
       "UserId":"USERID",
       "DeviceId":"DEVICEID"
    }
    
    参数 说明
    UserId 员工UserID
    DeviceId 手机设备号(由微信在安装时随机生成)

    出错时返回示例如下:

    {
       "errcode": "40029",
       "errmsg": "invalid code"
    }

    --实例

    代码如下:

    protected void Page_Load(object sender, EventArgs e)
            {
                //return;
                if (!this.IsPostBack)
                {
                    BLL = new bllWX();
    
                    //从数据库中获取配置信息
                    DataTable dt = BLL.GetWXConfig();
                    string CorpToken = ConvertEx.ToString(dt.Rows[0][tb_WXConfig.CorpToken]);
                    string CorpID = ConvertEx.ToString(dt.Rows[0][tb_WXConfig.CorpID]);
                    string EncodingAESKey = ConvertEx.ToString(dt.Rows[0][tb_WXConfig.EncodingAESKey]);
                    string Secret = ConvertEx.ToString(dt.Rows[0][tb_WXConfig.Secret]);
                    string AccessToken = ConvertEx.ToString(dt.Rows[0][tb_WXConfig.AccessToken]);
    
                    CorpCommonData data = CorpCommonData.IniCorpCommonData(AccessToken, CorpID, Secret, "1");
    
                    data.accesstokenChanged += data_accesstokenChanged;
    
                    string code = Request["code"];
                    handle = new ActiveMessageHandler();
                    //根据Code参数获得用户ID
                    var userid = handle.OAuth2_GetUserInfo(code, null, null);
                    if (ConvertEx.ToInt(userid.errcode, 0) == 0)//获取成功
                    {
                        //根据用户ID获得用户信息
                        var UserModel = handle.GetUserModel(userid.UserId, null);
                        //var UserModel = handle.GetUserModel("zgs", null);
                        UserName = UserModel.name;
                    }
    
                }
            }
    
            /// <summary>
            /// 将新的AccessToken写入数据库
            /// </summary>
            /// <param name="AccessToken"></param>
            void data_accesstokenChanged(string AccessToken)
            {
                BLL.UpdateAccessToken(AccessToken);
            }

    UserModel是用户信息格式:

    /// <summary>
        /// 企业员工信息
        /// </summary>
        public class ModelUser
        {
            /// <summary>
            /// 员工UserID
            /// </summary>
            public string userid { get; set; }
            /// <summary>
            /// 成员名称
            /// </summary>
            public string name { get; set; }
            /// <summary>
            /// 成员所属部门id列表
            /// </summary>
            public string department { get; set; }
            /// <summary>
            /// 职位信息
            /// </summary>
            public string position { get; set; }
            /// <summary>
            /// 手机号码
            /// </summary>
            public string mobile { get; set; }
            /// <summary>
            /// 性别。gender=0表示男,=1表示女
            /// </summary>
            public string gender { get; set; }
            /// <summary>
            /// 办公电话
            /// </summary>
            public string tel { get; set; }
            /// <summary>
            /// 邮箱
            /// </summary>
            public string email { get; set; }
            /// <summary>
            /// 微信号
            /// </summary>
            public string weixinid { get; set; }
            /// <summary>
            /// 头像url。注:如果要获取小图将url最后的"/0"改成"/64"即可
            /// </summary>
            public string avatar { get; set; }
            /// <summary>
            /// 关注状态: 1=已关注,2=已冻结,4=未关注
            /// </summary>
            public string status { get; set; }
            /// <summary>
            /// 扩展属性
            /// </summary>
            public string extattr { get; set; }
    
        }
     

    效果:

    这时候已经完成了OAuth2接口,我们可以根据不同用户展示不同

    其中用到自己写的微信开发API

    因为刚开始做微信,API功能还在不断完善中,所以还没开源,等功能都实现了再放出来开源

    如果有需要,请留言联系!!!!

    本节结束

    时间: 2024-08-27 00:15:49

    《微信开发日志》之OAuth2验证接口的相关文章

    微信企业号简单的OAuth2验证接口实例(使用SpringMVC非注解方式)

    目前企业号只提供了scope为"snsapi_base"的应用授权作用域,也就是不会跳转到让用户授权的页面. 之前写了使用注解方式验证并获取用户信息的实例,大家不是很理解,问题很多,现在附上简单的验证获取用户信息的实例! 微信企业号OAuth2验证接口实例(使用SpringMVC) OAuth2.0验证需要注意: 1.redirect_uri参数是授权回调地址,也就是说这个地址外网是可以访问的,所以如果使用本地映射服务器的猿们请修改为外网可以访问的地址! 2.配置可信域名,可信域名是1

    微信企业号OAuth2验证接口实例(使用SpringMVC)

    微信企业号OAuth2验证接口(使用SpringMVC) 企业应用中的URL链接(包括自定义菜单或者消息中的链接),可以通过OAuth2.0来获取员工的身份信息. 注意,此URL的域名,必须完全匹配企业应用设置项中的'可信域名',否则获取用户信息时会返回50001错误码. 可信域名设置不包含"http://",只需域名或IP即可. OAuth2验证可以使用多种方式,此处使用注解方式.设计思路是在需要获取用户信息的GET请求上添加注解,然后在调用的时候判断是否包含此注解,然后做处理流程.

    微信开发关注回复 oauth2(1)

    服务器配置 第一步:服务器选择: 我选的是新浪的 http://sae.sina.com.cn/ ,具体如何配置就不用细说了,就相当于租用一台服务器一样 第二步:上传代码:共三个件,分别是index.php,oauth2.php,redirectUri.php index.php 代码如下: <?php /** 微信公众平台 */ define("TOKEN", "weixin");//与管理平台的TOKEN设置一致 $wechatObj = new wech

    微信开发-业务域名、JS接口安全域名、网页授权域名

    1.业务域名:在微信浏览器中点击文本框,会弹出提示,很不爽,通过配置业务域名可以将该提示去掉 比如密码输入不安全这类的 2.JS接口安全域名:分享到朋友圈(js-sdk)时用上,此接口要求将当前的界面url加密后,才可以分享到朋友圈.采用前后端分离开发时,js-sdk的验证参数通过php接口获得时,会报invalid signature错误.解决方法:前端将当前的window.location.href传到php接口,php代码中将下图中的$url换成前端传过来的url,生成验证相应参数,再返回

    微信开发笔记-调用自定义分享接口

    文章来自:http://www.cnblogs.com/ysyn/archive/2015/07/23/4665897.html 引言: 工作中开发微信网站,简称微网站.由于微网站的分享内容是系统自动选取的当前网址,客户需要改变分享的内容,即点击屏幕右上角的分享按钮,选择发送给朋友和发送到朋友圈,其中的内容和图片需要自定义.于是查找文档微信JS-SDK说明文档一文和网站众多高手的经验,大体知道了调用的步骤,但是具体如何调用才能成功却是不了解的.经过一番试验,终于成功调用发送朋友和发送到朋友圈两个

    夺命雷公狗---微信开发49----获取用户列表接口(1)

    一般说,微信公众账号运营一段时间,会积累一定数量的用户,一些用户很少会主动发送信息,我们可以通过微信提供的高级接口来获取用户列表,对这些用户(不管是活跃用户还是潜水用户)进行有效的管理,将公司的公众帐号的营销效果做到最后价值. 因此我们看看用户管理接口 获取用户列表 是如何使用到实际开发中的. 获取用户列表接口,可以一次性将公众号的所有用户信息拉取下来 公众号可以通过接口获取帐号的关注者列表,关注者列表由一串openid(加密后的微信帐号,每个用户的openid是一样的)组成. 一次最多拉取10

    夺命雷公狗---微信开发47----获取用户地理位置接口(2)

    我们现在要做的是查找距离最近的“肯德基”,我们需要通过百度提供的LBS云服务定位距离您最近的肯德基,该程序需要到LBS后台进行相关设置,然后在完成程序 用户在客户端输入“肯德基”公众号就会自动回复距离用户最近的”肯德基“ 废话不多说,我们先到http://developer.baidu.com/里面找到LBS云------再到服务接口--------再到LBS云,如下图所示: 点击进来后,我们首先要获取一个密钥, 然后出了红色框部分填下数据即可,别的地方都不用改,直接提交即可 上面的0.0.0.

    PHP微信开发ReplyModel(封装验证,数据获取,信息返回)

    <?phpclass ReplyModel{ //验证token, public function ValidationToken($token){ if(isset($_GET["echostr"])){ $tokenInfo["token"]=$token; $tokenInfo["echostr"]=$_GET["echostr"]; $tokenInfo["signature"]=$_GET[

    夺命雷公狗---微信开发48----获取用户地理位置接口(3)

    这节课程我们来做一个游戏,这个游戏的名字叫“寻找美女做老婆”, 用户该游戏后,每隔5s(秒)会收到他距离未来老婆的信息,如果找到美女后,输入“老婆”即可成功. 这次我们涉及到一个车联网API,我们先来看下他在哪,张成什么样. http://lbsyun.baidu.com/index.php?title=car 找到接口说明,里面有一个测距,如下所示: 我们可以看到这就是他的接口 参数说明以及返回的参数如下所示: 很明显他就是返回一个XML或者是json格式的数据,默认返回的是一个XML格式的数