当前位置: 首页 > news >正文

企业微信身份验证

本篇主要是在上一篇获取第三方凭证基础上,用户通过三方网站自定义授权登录后获取用户信息,以实现用户绑定登录功能。

构造第三方应用授权链接

如果第三方应用需要在打开的网页里面携带用户的身份信息,

第一步需要构造如下的链接来获取授权code。

请求方式

GET

请求地址

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

参数说明

参数

必须

说明

appid

第三方应用id(即ww或wx开头的suite_id)。注意与企业的网页授权登录不同

redirect_uri

授权后重定向的回调链接地址,请使用urlencode对链接进行处理 ,注意域名需要设置为第三方应用的可信域名

response_type

返回类型,此时固定为:code

scope

应用授权作用域。

snsapi_base:静默授权,可获取成员的基础信息(UserId与DeviceId);

snsapi_privateinfo:手动授权,可获取成员的详细信息,包含头像、二维码等敏感信息。

state

重定向后会带上state参数,企业可以填写a-zA-Z0-9的参数值,长度不可超过128个字节

#wechat_redirect

固定内容

企业员工点击后,页面将跳转至 redirect_uri?code=CODE&state=STATE,第三方应用可根据code参数获得企业员工的corpid与userid。code长度最大为512字节。

权限说明

使用snsapi_privateinfo的scope时,第三方应用必须有“成员敏感信息授权”的权限。

服务层业务代码

设置一个参数就是应用的SuiteId。这里的回调地址需要前端传递过来,因为是测试所以写一个固定的。返回一个网址需要在手机端企业微信中点击触发。

具体代码如下:

/*** 构建企业微信授权链接* @param $backUrl*/
public function getCompanyWxOauth()
{$backUrl = 'https://www.test.net/api/test';$url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=三方应用suiteID&redirect_uri={$backUrl}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect";echo "<a href='{$url}'>点击</a>";
}

开通调用许可

在企业微信手机端点击链接后,提示需要开通【接口调用许可】。

解决方式

首先账号需要是测试企业,并且测试企业加入到测试企业列表中。

【应用管理】->【购买接口许可】企业微信接口许可 【购买】

 需要添加企业客户ID,也就是之前企业授权安装获取的corpid。

这时候发现就变成0元可以购买了,购买后就可以访问了。

scope的特殊情况

当oauth2中appid=corpid时,scope为snsapi_userinfo或snsapi_privateinfo时,必须填agentid参数,否则系统会视为snsapi_base,不会返回敏感信息。

第三方服务商配置scope为snsapi_privateinfo时,agentid所对应的应用必须有“成员敏感信息授权”的权限。

“成员敏感信息授权”的开启方法为:登录服务商管理后台->标准应用服务->本地应用->进入应用->点击基本信息栏“编辑”按钮->勾选"成员敏感信息"。

获取访问用户身份

 

请求方式

GET


请求地址

https://qyapi.weixin.qq.com/cgi-bin/service/auth/getuserinfo3rd?suite_access_token=SUITE_ACCESS_TOKEN&code=CODE

参数说明

参数

必须

说明

suite_access_token

第三方应用凭证:suite_access_token

code

通过成员授权获取到的code,最大为512字节。每次成员授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。

业务处理

通过上篇《企业微信获取第三方凭证》得到三方凭证也就是suite_access_token和授权链接得到的code,可用来获取访问用户身份信息。

具体代码如下:

/*** 获取企业微信 suite_access_token* @return array|mixed*/
public function companyAccessToken()
{$url = "https://qyapi.weixin.qq.com/cgi-bin/service/get_suite_token";$params = json(['suite_id' => '三方应用的suitId','suite_secret' => '三方应用Secret','suite_ticket' => 'redis存储的回调解析得到的ticket']);$info = $this->linkCurl($url, 'POST', $params);$res = djson($info);if (isset($res['errcode'])) {return toFail('error', $res);}return toSuccess('success', ['access_token' => $suite_access_token]);
}/*** 获取企业微信用户信息* @param $code* @return array|mixed*/
public function getWxUserInfo($code)
{if (empty($code)) {return toFail('请输入code参数!');}$get_access_token = $this->companyAccessToken();if ($get_access_token['status'] != 1) {return $get_access_token;}$access_token = $get_access_token['data']['access_token'];$url = "https://qyapi.weixin.qq.com/cgi-bin/service/auth/getuserinfo3rd?suite_access_token={$access_token}&code={$code}";$info = $this->linkCurl($url, 'GET');print_r($info);die;}

返回内容

返回的是通过请求授权链接,经过用户允许后获取基本用户信息。

{"errcode":0,"errmsg":"ok","corpid":"ww0d127fa51eaab","userid":"YuanLaiShiNi","parents":[],"open_userid":"woxL4YTwAAvAGu3mLUy8dkchzW"
}

返回参数说明

参数

说明

errcode

返回码

errmsg

对返回码的文本描述内容

corpid

用户所属企业的corpid

userid

用户在企业内的UserID,如果该企业与第三方应用没有授权关系时,返回密文UserId,有授权关系时,按照升级后的ID策略返回明文或密文

user_ticket

成员票据,最大为512字节。
scope为snsapi_userinfo或snsapi_privateinfo,且用户在应用可见范围之内时返回此参数。
后续利用该参数可以获取用户信息或敏感信息,参见"第三方使用user_ticket获取成员详情"。

expires_in

user_ticket的有效时间(秒),随user_ticket一起返回

open_userid

全局唯一。对于同一个服务商,不同应用获取到企业内同一个成员的open_userid是相同的,最多64个字节。仅第三方应用可获取

总结

本篇主要是在上一篇获取第三方凭证基础上,用户通过三方网站自定义授权登录后获取用户信息,以实现用户绑定登录功能。

相关文章:

  • 2023全球数字贸易创新大赛-人工智能元宇宙-11-12,数据二十条,数字产业化和产业数字化
  • 【bug】uniapp的image组件渲染gif图,只有第一次点击的时候有动效,需要每次点击都有gif效果,已解决
  • 【音视频-FFMPEG相关命令使用】
  • SELinux零知识学习二十五、SELinux策略语言之类型强制(10)
  • 微信小程序面试题【100道】
  • ORA-28003: password verification for the specified password failed,取消oracl密码复杂度
  • 【开源】基于JAVA的高校实验室管理系统
  • Web 自动化神器 TestCafe(三)—用例编写篇
  • 免费图书教材配套资料:Spark大数据技术与应用(第2版)
  • 基于opencv+ImageAI+tensorflow的智能动漫人物识别系统——深度学习算法应用(含python、JS、模型源码)+数据集(一)
  • 【ARM 嵌入式 编译 Makefile 系列 18 -- Makefile 中的 export 命令详细介绍】
  • C++学习之路(二)C++如何实现一个超简单的学生信息管理系统?C++示例和小项目实例
  • 4G5G智能执法记录仪在保险公司车辆保险远程定损中的应用
  • ubuntu22.04中ros2 安装rosbridge
  • JVM中判断对象是否需要回收的方法
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • bootstrap创建登录注册页面
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • Git 使用集
  • JavaScript创建对象的四种方式
  • js 实现textarea输入字数提示
  • Js基础知识(一) - 变量
  • JS学习笔记——闭包
  • Laravel Telescope:优雅的应用调试工具
  • linux安装openssl、swoole等扩展的具体步骤
  • MySQL QA
  • Transformer-XL: Unleashing the Potential of Attention Models
  • vue 配置sass、scss全局变量
  • 产品三维模型在线预览
  • 从零开始在ubuntu上搭建node开发环境
  • 动态魔术使用DBMS_SQL
  • 入手阿里云新服务器的部署NODE
  • 我的业余项目总结
  • 译有关态射的一切
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • #控制台大学课堂点名问题_课堂随机点名
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (function(){})()的分步解析
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (力扣)1314.矩阵区域和
  • (五)MySQL的备份及恢复
  • (学习日记)2024.01.09
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .Net IE10 _doPostBack 未定义
  • .NetCore部署微服务(二)
  • .net的socket示例
  • .NET开发不可不知、不可不用的辅助类(一)
  • .NET中两种OCR方式对比