《微信开发日志》之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手机设备号(由微信在安装时随机生成)

出错时返回示例如下:

 
 

 

 

--实例

代码如下:

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; }

    }
 

效果:

imageimage

 

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

 

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

image

 

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

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

 

本节结束

转载于:https://www.cnblogs.com/GarsonZhang/p/4072690.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值