首页 > 代码库 > 《微信开发日志》之OAuth2验证接口
《微信开发日志》之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); }
/// <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验证接口