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功能还在不断完善中,所以还没开源,等功能都实现了再放出来开源

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

    本节结束

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

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

      微信企业号OAuth2验证接口(使用SpringMVC) 企业应用中的URL链接(包含自己定义菜单或者消息中的链接).能够通过OAuth2.0来获取员工的身份信息. 注意.此URL的域名,必须全然匹配 ...

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

      在微信公众平台上可配置这些域名. 1.业务域名:在微信浏览器中点击文本框,会弹出下面的提示,很不爽,通过配置业务域名可以将该提示去掉 2.JS接口安全域名:分享到朋友圈(js-sdk)时用上,此接口要 ...

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

      <?phpclass ReplyModel{ //验证token, public function ValidationToken($token){ if(isset($_GET["e ...

    4. 微信开发网页授权OAuth2.0注意事项

      如图所示

    5. 微信oauth2验证

      微信公众号进行oauth2验证时的要求: 需要两个地方配置: (1)   Oauth2验证链接中的appid.redirecturi (2)   微信公众号授权回调页面域名: Appid为公众号的ap ...

    6. 微信开发+百度AI学习:微信网页开发环境搭建

      参考微信官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 两步即可获取微信网页开发能力 STEP1: ...

    7. C#微信开发-微信JS-SDK(1)之通过config接口注入权限验证配置

      官方文档是微信JS-SDK的使用步骤http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html#JSSDK.E4.BD.B ...

    8. 微信开发(2):微信js sdk分享朋友圈,朋友,获取config接口注入权限验证(转)

      进行微信开发已经一阵子了,从最初的什么也不懂,到微信授权登录,分享,更改底部菜单,素材管理,等. 今天记录一下微信jssdk 的分享给朋友的功能,获取config接口注入. 官方文档走一下简单说:四步 ...

    9. Force.com微信开发系列(七)OAuth2.0网页授权

      OAuth是一个开放协议,允许用户让第三方应用以安全且标准的方式获取该用户在某一网站上存储的私密资源(如用户个人信息.照片.视频.联系人列表),而无须将用户名和密码提供给第三方应用.本文将详细介绍OA ...

    随机推荐

    1. ajax讲解:“创建用户”和“用户登录”练习

      ajax可以在不重新加载整个网页的情况下,对网页的某部分进行更新. 传统的网页(不使用 AJAX)如果需要更新内容,必须重载整个网页页面.   接下来,将以例子的形式进行讲解   例一:创建用户   ...

    2. 为VirtualBox里的Linux系统安装增强功能

      先说下为什么要安装增强功能, 很重要的原因是分辨率,没有安装增强功能的虚拟机里的系统往往不能全屏的,屏幕显示的内容没有充满整个屏幕. 还有主机和客户机之间共享文件夹也需要客户机的系统安装了增强功能. ...

    3. Writable、WritableComparable和comparators

      hadoop的序列化格式 hadoop自身的序列化存储格式就是实现了Writable接口的类,他只实现了前面两点,压缩和快速.但是不容易扩展,也不跨语言. 我们先来看下Writable接口,Writa ...

    4. android 学习随笔九(网络:简单新闻客户端实现)

      1.简单新闻客户端 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xm ...

    5. Git 使用规范流程

      Git教程:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 团队开发中,遵循一个合 ...

    6. Java URLClassLoader和ClassLoader

      开始:看名字都带有ClassLoader,叫做类加载器,事实上是可以理解为动态的加载类,不过,也不是只能加载类,也可以加载其他形式的文件,比如说.properties属性文件. 区别:其实在两个类加载 ...

    7. org.apache.cxf.transport.servlet.CXFServlet cannot be cast to javax.servlet.Servlet

      java.lang.ClassCastException: org.apache.cxf.transport.servlet.CXFServlet cannot be cast to javax.se ...

    8. YTU 2344: 先序遍历二叉树

      原文链接:https://www.dreamwings.cn/ytu2344/2603.html 2344: 先序遍历二叉树 时间限制: 1 Sec  内存限制: 128 MB 提交: 4  解决:  ...

    9. SDUT 2603:Rescue The Princess

      Rescue The Princess Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 Several days ago, a b ...

    10. c# monitor锁

      当多个线程在并发的时候,难免会碰到相互冲突的事情,比如最经典的ATM机的问题,并发不可怕,可怕的是我们没有能力控制. 线程以我的理解可以分为三种 ① 锁. ② 互斥. ③ 信号. 好,这一篇主要整理“ ...