开始开发

最后更新:2022/10/11

企业微信提供了OAuth的授权登录方式,可以让从企业微信终端打开的网页获取成员的身份信息,从而免去登录的环节。
企业应用中的URL链接(包括自定义菜单或者消息中的链接),均可通过OAuth2.0验证接口来获取成员的UserId身份信息。

OAuth2简介

OAuth2的设计背景,在于允许用户在不告知第三方自己的帐号密码情况下,通过授权方式,让第三方服务可以获取自己的资源信息。
详细的协议介绍,开发者可以参考RFC 6749。

下面简单说明OAuth2中最经典的Authorization Code模式,流程如下:

流程图中,包含四个角色。

  • ResourceOwner为资源所有者,即为用户
  • User-Agent为浏览器
  • AuthorizationServer为认证服务器,可以理解为用户资源托管方,比如企业微信服务端
  • Client为第三方服务

调用流程为:
A) 用户访问第三方服务,第三方服务通过构造OAuth2链接(参数包括当前第三方服务的身份ID,以及重定向URI),将用户引导到认证服务器的授权页
B) 用户选择是否同意授权
C) 若用户同意授权,则认证服务器将用户重定向到第一步指定的重定向URI,同时附上一个授权码。
D) 第三方服务收到授权码,带上授权码来源的重定向URI,向认证服务器申请凭证。
E) 认证服务器检查授权码和重定向URI的有效性,通过后颁发AccessToken(调用凭证)

D)与E)的调用为后台调用,不通过浏览器进行

获取访问用户身份

最后更新:2022/09/23

该接口用于根据code获取成员信息,适用于自建应用与代开发应用

请求方式:GET(HTTPS
请求地址:https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?access_token=ACCESS_TOKEN&code=CODE
参数说明:

参数 必须 说明
access_token 调用接口凭证
code 通过成员授权获取到的code,最大为512字节。每次成员授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。

权限说明:
跳转的域名须完全匹配access_token对应应用的可信域名,否则会返回50001错误。
返回结果:
a) 当用户为企业成员时(无论是否在应用可见范围之内)返回示例如下:

{"errcode": 0,"errmsg": "ok","userid":"USERID","user_ticket": "USER_TICKET"
}

获取访问用户敏感信息

最后更新:2022/09/19

自建应用与代开发应用可通过该接口获取成员授权的敏感字段

请求方式:POST(HTTPS
请求地址:https://qyapi.weixin.qq.com/cgi-bin/auth/getuserdetail?access_token=ACCESS_TOKEN

请求包体:

{"user_ticket": "USER_TICKET"
}

参数说明:

参数 必须 说明
access_token 调用接口凭证
user_ticket 成员票据

权限说明:
成员必须在应用的可见范围内。

返回结果:

{"errcode": 0,"errmsg": "ok","userid":"lisi","gender":"1","avatar":"http://shp.qpic.cn/bizmp/xxxxxxxxxxx/0","qr_code":"https://open.work.weixin.qq.com/wwopen/userQRCode?vcode=vcfc13b01dfs78e981c","mobile": "13800000000","email": "zhangsan@gzdev.com","biz_mail":"zhangsan@qyycs2.wecom.work","address": "广州市海珠区新港中路"
}

参数说明:

参数 说明
errcode 返回码
errmsg 对返回码的文本描述内容
userid 成员UserID
gender 性别。0表示未定义,1表示男性,2表示女性。仅在用户同意snsapi_privateinfo授权时返回真实值,否则返回0.
avatar 头像url。仅在用户同意snsapi_privateinfo授权时返回
qr_code 员工个人二维码(扫描可添加为外部联系人),仅在用户同意snsapi_privateinfo授权时返回
mobile 手机,仅在用户同意snsapi_privateinfo授权时返回,第三方应用不可获取
email 邮箱,仅在用户同意snsapi_privateinfo授权时返回,第三方应用不可获取
biz_mail 企业邮箱,仅在用户同意snsapi_privateinfo授权时返回,第三方应用不可获取
address 仅在用户同意snsapi_privateinfo授权时返回,第三方应用不可获取

注:对于自建应用与代开发应用,敏感字段需要管理员在应用详情里选择,且成员oauth2授权时确认后才返回。敏感字段包括:性别、头像、员工个人二维码、手机、邮箱、企业邮箱、地址。

上一篇


https://open.weixin.qq.com/connect/oauth2/authorize?appid=wwd70ee88af370290f&redirect_uri=http://yuying-api.xutongbao.top/index1.html&response_type=code&scope=snsapi_privateinfo&agentid=1000004&state=STATE#wechat_redirect

https://open.weixin.qq.com/connect/oauth2/authorize?appid=wwd70ee88af370290f&redirect_uri=http://yuying-api.xutongbao.top/index1.html&response_type=code&scope=snsapi_privateinfo&agentid=1000004&state=STATE#wechat_redirect

https://developer.work.weixin.qq.com/document/path/91022

接口:

const toolsQiWeUserInfo = async (req, res) => {const { code } = req.bodyaxios({url: 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=wwd70e*****290f&corpsecret=JrPSfOHlNzPiF******CV4VPwUuuHwAxyUdUDu8',}).then((resData) => {let access_token = resData.data.access_tokenaxios({url: `https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo`,params: {access_token,code,debug: 1,},}).then((resData) => {console.log(res)let userInfo = resData.dataaxios({url: `https://qyapi.weixin.qq.com/cgi-bin/auth/getuserdetail?access_token=${access_token}&debug=1`,data: {user_ticket: userInfo.user_ticket},method: 'post'}).then((resData) => {console.log(res)res.send({code: 200,data: {userInfo,userDetail: resData.data},message: '成功',})})})})
}

前端:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><script src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script><scriptsrc="https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js"referrerpolicy="origin"ref></script><script src="lib/axios.min.js"></script><style>.m-info {white-space: pre;}.m-img {width: 200px;height: 200px;}</style></head><body><div><div>信息</div><div><span id="m-info" class="m-info"></span></div><div>群ID:<span id="m-chat-id"></span></div></div><script src="lib/vconsole.min.js"></script><script>// VConsole will be exported to `window.VConsole` by default.var vConsole = new window.VConsole()</script><script>console.log(location.href)axios({url: `http://yuying-api.xutongbao.top/api/light/tools/qiWeToken`,method: 'post',data: {url: location.href,},}).then((res) => {console.log(res)const agentFun = () => {const { timestamp, noncestr, signature } = res.data.data.agentDatawx.agentConfig({corpid: 'wwd70e*****290f', // 必填,企业微信的corpid,必须与当前登录的企业一致agentid: '1000004', // 必填,企业微信的应用id (e.g. 1000247)timestamp, // 必填,生成签名的时间戳nonceStr: noncestr, // 必填,生成签名的随机串signature, // 必填,签名,见附录-JS-SDK使用权限签名算法jsApiList: ['getCurExternalChat'], //必填,传入需要使用的接口名称success: function (res) {console.log(666, res)wx.invoke('getCurExternalChat', {}, function (res) {console.log(777, res)if (res.err_msg == 'getCurExternalChat:ok') {let chatId = res.chatId //返回当前外部群的群聊IDdocument.getElementById('m-chat-id').innerHTML = chatId} else {//错误处理}})// 回调},fail: function (res) {console.log(res)if (res.errMsg.indexOf('function not exist') > -1) {alert('版本过低请升级')}},})console.log(timestamp, noncestr, signature)}agentFun()getUserInfo({access_token: res.data.data.corpData.tokenData.access_token,})})const parseQueryString = (url) => {let params = {}let arr = url.split('?')if (arr.length <= 1) {return params}arr = arr[1].split('&')for (let i = 0, l = arr.length; i < l; i++) {let a = arr[i].split('=')params[a[0]] = a[1]}return params}const getUserInfo = ({ access_token }) => {let qs = parseQueryString(location.href)let code = qs.codeaxios({url: `http://yuying-api.xutongbao.top/api/light/tools/qiWeUserInfo`,method: 'post',data: {code,},}).then((res) => {console.log(res)if (res.data.code === 200) {const { mobile, userid, avatar, qr_code } = res.data.data.userDetailconsole.log(avatar)console.log(qr_code)document.getElementById('m-info').innerHTML = `手机号:${mobile}UserId: ${userid}<div><img src="${avatar}" class="m-img" /></div><div><img src="${qr_code}" class="m-img" /></div>`}})}</script></body>
</html>

企业微信自建应用手动授权,获取用户详细信息相关推荐

  1. 微信公众号开发之授权获取用户信息

    微信开发交流群:148540125 系列文章参考地址 极速开发微信公众号 欢迎留言.转发.打赏 项目源码参考地址 点我点我--欢迎Start 前几篇文章已讲完如何导入项目,如何启动配置项目,如何成为开 ...

  2. asp.net获取浏览器的唯一标识_vue单页面应用如何在微信浏览器里进行网页授权获取用户信息

    前言 在vue单页面应用比较流行的时代,如何把vue应用和微信公众号两者结合在一起也是比较常见的功能.如果仅仅是把一个vue应用放在公众号上,没有进行额外的微信功能开发,如:获取用户信息,支付,分享等 ...

  3. android 微信授权获取用户个人信息

    微信官方文档API:https://developers.weixin.qq.com/doc/oplatform/Mobile_App/WeChat_Login/Development_Guide.h ...

  4. 微信公众号开发之微信网页授权获取用户个人信息

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 一丶概述 微信网页授权 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑 ...

  5. uniapp同步获取用户信息_微信小程序云开发教程微信小程序的API入门获取用户身份信息系列API...

    同学们大家好,我是小伊同学,上一节我们介绍了一些常用API,今天我们接着来学习一组API,那就是获取用户身份信息的API. 在微信小程序中,我们往往需要获取用户的身份信息,比如昵称.头像.性别.地区等 ...

  6. 微信小程序(uniapp)获取用户位置信息及选择位置

    1. 开发前准备 注册微信小程序账号并配置相关信息: 注册腾讯地图开放平台并完成应用创建等: 下载qqmap-wx-jssdk.min.js放到项目中: 2. 获取用户当前位置wx.getLocati ...

  7. python图片修改过、有原图、怎么得到改动的地方_Python-根据照片信息获取用户详细信息(微信发原图或泄露位置信息)...

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 蒙娜丽胖 ps:如有需要python学习资料的小伙伴可以加点击下方 ...

  8. 利用Python根据照片信息获取用户详细信息(微信发原图或泄露位置信息)

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 有媒体曝出,微信发原图或存在泄露位置信息的风险. 对此,腾讯微信团队微博1 ...

  9. Python-根据照片信息获取用户详细信息(微信发原图或泄露位置信息)

    前言 有媒体曝出,微信发原图或存在泄露位置信息的风险. 对此,腾讯微信团队微博12月1日发布声明称,朋友圈发送的照片都经过系统自动压缩,不带位置等信息,实在担心的话,可以P完图再发,如下图: 微信团队 ...

  10. Java微信公众平台开发(十六)--微信网页授权(OAuth2.0授权)获取用户基本信息

    转自:http://www.cuiyongzhi.com/post/78.html 好长时间没有写文章了,主要是最近的工作和生活上的事情比较多而且繁琐,其实到现在我依然还是感觉有些迷茫,最后还是决定静 ...

最新文章

  1. 最近要换个主机,现在的太慢了
  2. 传统KTV向互联网+量贩式低头,KTV也需O2O
  3. 在Hadoop 2.3上运行C++程序各种疑难杂症(Hadoop Pipes选择、错误集锦、Hadoop2.3编译等)
  4. Windos7下VirtualBox的几项误操作恢复
  5. PHP开发erp账号登陆问题,浪潮ERP软件E系列创建账套时提示“由于登陆不正确、请重新登陆” | 浪潮888博客...
  6. visio科学图形包_科学网—科研必备:几款好用的流程图工具,助力你的论文/科研绘图...
  7. html判断是否在页面,html判断当前页面是否在iframe中的实例
  8. linux的运行级别如何更改成6,把Linux运行级别设置为6后如何解决的经验分享
  9. Yarn的资源调度与隔离
  10. Multiresolution Recurrent Neural Networks: An Application to...
  11. 普及风险管理的一些环节
  12. live555学习笔记-RTSPClient分析
  13. Django2.0——实现简易登陆、注册
  14. DevExpress中使用ChartControl绘制折线图和导出图表为Excel文件
  15. 鼠标右键菜单管理,自己就是右键管家,右键菜单清理
  16. python迭代法求极值_4计算函数零点和极值点的迭代法
  17. 电磁循迹小车赛后总结
  18. mac网络设置_如何在Mac上设置和使用网络位置
  19. 时间序列进行分析的一些手法以及代码实现(移动平均、指数平滑、SARIMA模型、时间序列的(非)线性模型)
  20. 计算机英语输入法怎么,电脑为什么输入法总是英文怎么办

热门文章

  1. 服务器系统盘是否需要阵列,服务器硬盘必须设置阵列吗
  2. 企业发文的红头文件_公司红头文件格式范文6篇
  3. mysql创建数据库表bank_数据库创建表fk
  4. 虚拟机(vmware)linux中ctrl按键失灵 解决办法
  5. Java如何实现浅克隆与深克隆_Java浅谈克隆clone
  6. Python爬虫之协程
  7. java获取网页源文件
  8. xxl_job部分源码解读
  9. win下装django
  10. 阿里巴巴基础设施挑战与芯片策略