企业微信代开发应用登录操作

news2024/12/28 11:02:06

首先声明:企微的文档写得真烂!!!有一些问题,官方情愿在问答区给用户一个个解答,也不愿意在文档写清楚,生怕自己工作量不饱和被优化。

概念说明

代开发应用,是相对于自建应用来说的。自建应用是指企业内部自己开发应用、自己使用应用。
代开发应用,则是服务商(后续称乙方)开发应用,企业(后续称甲方)使用应用。甲、乙双方是不同的企业主体。

乙方创建代开发模板及上线

这边比较简单,进入服务商管理后台创建即可,这里的重点是回调URL,需要自己提前实现好,这个URL要同时支持GET和POST请求,Token和EncodingAESKey随机生成并记录下来。后续企微服务器会调该URL,对于接收到的数据,要解密成明文,供查看和保存。
这个回调URL域名可以是任意主体。
模版创建好后,立即提交审核,十几分钟便能审核通过,审核通过后,立即提交上线。

甲方扫码授权

此时,这个模版便有了一个二维码,甲方的超级管理员去扫码并授权,该模板下班便多了一个应用,这个应用就是给甲方使用的。
进入这个应用,配置权限、可信域名、IP白名单、试用期。
配置好权限后,甲方管理员会收到消息,要点进去确认授权。
配置的可信域名,必须是与甲方同主体,如果不同主体,则无法登录,会抛回调URI参数错误,在配置可信域名时,必须看到输入框下方出现绿色的“已验证”三个字才行。
试用期一定要配置,建议配最大,否则会抛应用已过期的错误。
配置好以后,立即把应用提交审核,审核通过后,立即提交上线。如果不上线,则无法登录,会抛应用已下线的错误。
后续便可以进行应用的真正开发了。

获取应用Secret

这种代开发应用的secret不能直接在管理后台看到,必须需要通过多个接口去获取,下面是步骤:

1、获取suite_access_token

URL:https://qyapi.weixin.qq.com/cgi-bin/service/get_suite_token
MEDTH:POST请求
参数:{
“suite_id”:“xxxxx” ,
“suite_secret”: “xxxxx”,
“suite_ticket”: “xxxxx”
}
响应:{
“suite_access_token”: “kc6D7gYybApa9yeQWsux0s06VDnzyxuhV43DzZx4bW8Xo9paCydzXYN2ZznMR92D_32PDPG8s31hJLdJACxk6UtcleGkhWIJcviAjg5L2V4zsIHhVy8S0HUcZPwOkSb6”,
“expires_in”: 7200
}

suite_id是代开发模板的ID
suite_secret是代开发模板的secret
suite_ticket从回调URL获取,如下图,点击“刷新Ticket”按钮,这个回调URL便会被触发,其Body携带了一条消息,解密它,便能看到suite_ticket。
在这里插入图片描述

2、获取临时授权码auth_code

在这里插入图片描述
如图,进入应用详情页,点击Secret的“重新获取”按钮,此时,回调URL会收到一条消息,解密它,便能得到一个属性叫AuthCode的字段,其值便是auth_code。

3、获取应用Secret

URL:https://qyapi.weixin.qq.com/cgi-bin/service/get_permanent_code?suite_access_token=<suite_access_token>
MEDTH:POST
参数:{
“auth_code”: “6gPzUsXwGS7V-Mvun4bmIxh-4rbq1OUKTGMNB3eL6qrdYSwVFQzFTLSeg_Hb8oVm4yceZe2-2eq_1-meWSwd2fCb1CUv-HzhIgqFyAdHJo8”
}
响应:{
“permanent_code”: “xxxxxxxxxxxxxxxxxxxxxxxxxx”,
“auth_corp_info”: {

},
“auth_info”: {

},
“auth_user_info”: {

}
}

suite_access_token便是我们第一步获取到的suite_access_token,auth_code便是我们第二步获取到的临时授权凭证,响应里面的permanent_code便是应用的secret,保存记录下来。

获取OAuth2的code

自己建一个web应用,部署到服务器,配置Nginx,可以用域名访问这个web。
构造链接

https://open.weixin.qq.com/connect/oauth2/authorize?appid=&redirect_uri=<redirect_uri>&response_type=code&scope=snsapi_privateinfo&state=STATE&agentid=#wechat_redirect

appid是甲方的企业ID
redirect_uri是我们刚刚部署的web应用,域名主体必须是甲方
agentid是应用ID,如下图,甲方进入企微管理后台的应用管理页面,找到应用,便可以看到AgentId。
竟然已经进入甲方管理后台了,也顺便确保应用是已启用状态,可见范围也提前配置好吧。
在这里插入图片描述
最后,把我们构建的链接,丢到甲方的企微聊天记录里,点击打开,如下图,把打开的页面的链接复制出来,就会发现后面附着了code参数
在这里插入图片描述

获取access_token

URL: https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=&corpsecret=
MEDTH: GET
响应:{
“errcode”: 0,
“errmsg”: “ok”,
“access_token”: “hq5yWadgAaZevRQpI_sIGiDWr34IwR7Ii4UDQhntBYi2JQ_U696p4VTo_DlIXCnJo_e2RkS1Qfn6xRMc1UzRi1J84LfnnaF2V2gVdy31pRROzxqx7RjStvLge7_Xb7XTfLHFhcXL3T6WUTpJXCPOaImwCOUcfw7uxDRMN0TJuXOjP9NKJhKitEWcFpj5GVfUTwF30o_JWQ6NXpWEkQIprw”,
“expires_in”: 7200
}

corpid是甲方的企业ID,secret是上一步获取到的应用Secret,响应里面的access_token就是我们要的token。

获取userid

URL: https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?access_token=<access_token>&code=
MEDTH: GET
响应:{
“userid”: “wog41ZCAAA8_XXXXXXXXXXXXXXXXXXXXXX”,
“errcode”: 0,
“errmsg”: “ok”,
“user_ticket”: “yatRc3J3nJnz9X_ohppvRaJdkhglNzWQrSAmp2TXEU_TrYHTOxLNH3qQt_TJaf2ohamlvpx_XXXXXXXXXXXXXXXXXXXXXXXXXXXXX”,
“expires_in”: 1800
}

access_token是上一步获取的access_token,code是上上步获取到的OAuth2的Code,此时,我们便得到了企微签发的userid,这个userid是唯一的。
里面还有一个重要的字段,就是user_ticket,后续如果要获取成员敏感数据,则需要用到这个user_ticket。

获取成员信息

URL: https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=<access_token>&userid=
MEDHT: GET
响应:{
“errcode”: 0,
“errmsg”: “ok”,
“userid”: “wog41ZCAAA8_XXXXXXXXXXXXXXXXXXXXXX”,
“name”: “大胸弟”,
“department”: [
1
],
“status”: 1,
“isleader”: 0,
“enable”: 1,
“hide_mobile”: 0,
“order”: [
0
],
“main_department”: 1,
“alias”: “”,
“is_leader_in_dept”: [
0
],
“direct_leader”: []
}

参数我就不解释了,一目了然。
其实代开发应用现在通过这个接口能获取到的数据非常少了,像手机号、邮箱这些都拿不到了。
如果想拿敏感信息,则需要使用下一步的接口。

获取成员明细

URL: https://qyapi.weixin.qq.com/cgi-bin/auth/getuserdetail?access_token=<access_token>
MEDTH: POST
参数:{
“user_ticket”: <user_ticket>
}
响应:{
“errcode”: 0,
“errmsg”: “ok”,
“userid”: “wog41ZCAAA8_XXXXXXXXXXXXXXXXXXXXXX”,
“gender”: “0”,
“email”: “xxxxxxxx”,
“avatar”: “xxxxxxxx”,
“biz_mail”: “xxxxxxxx”
}

参数我就不解释了,一目了然。access_token、user_ticket都是在前面步骤获取到了。
对于响应的信息,能获取到什么,就看你在配置权限时,配置了什么了。
我这边通过userid来确定唯一性,姓名、邮箱用来前端显示,此时就可以完成登录操作了。

里面还有一个难点,就是怎么去解密数据,这个可以参照官方文档,去找SDK,或者官方的例子,我就不贴代码了,但是要记得,回调URL要同时支持GET和POST请求,两种请求方法都会有请求参数,要分别去解密。

最后,对于自行测试,其实并不需要真正的甲方,乙方也可以充当甲方的角色。也就是说,乙方作为服务商开发应用的同时,也可以作为甲方角色,去授权并使用应用,这样测试就方便多了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1624720.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络和因特网

Internet: 主机/端系统&#xff08;end System / host&#xff09;&#xff1a; 硬件 操作系统 网络应用程序 通信链路&#xff1a; 光纤、网络电缆、无线电、卫星 传输效率&#xff1a;带宽&#xff08;bps&#xff09; 分组交换设备&#xff1a;转达分组 包括&#…

Centos的一些基础命令

CentOS是一个基于开源代码构建的免费Linux发行版&#xff0c;它由Red Hat Enterprise Linux (RHEL) 的源代码重新编译而成。由于 CentOS是基于RHEL构建的&#xff0c;因此它与RHEL具有非常类似的特性和功能&#xff0c;包括稳定性、安全性和可靠性。并且大部分的 Linux 命令在C…

SpringBoot学习之Redis下载安装启动【Mac版本】(三十七)

一、下载Redis 1、下载地址:Downloads - Redis 往下滑,找到Downloads区域,这里有若干版本,这里我们选择了7.0的稳定版本 2、我们下载的是redis-7.0.15.tar.gz,这是一个压缩包,我们双击解压这个压缩包,可以得到如下文件 二、安装Redis 1、我们进入redis根目录安装mak…

Orange3数据可视化(树查看器-决策树)

树视图 分类和回归树的可视化。 输入 树&#xff1a;决策树 输出 选中的数据&#xff1a;从树节点中选中的实例 数据&#xff1a;带有额外一列&#xff0c;显示每个点是否被选中 这是一个多功能的小部件&#xff0c;用于展示分类和回归树的2D可视化。用户可以选择一个节点…

jvm知识点总结(二)

Java8默认使用的垃圾收集器是什么? Java8版本的Hotspot JVM,默认情况下使用的是并行垃圾收集器&#xff08;Parallel GC&#xff09; 如果CPU使用率飙升&#xff0c;如何排查? 1.先通过top定位到消耗最高的进程id 2.执行top -h pid单独监控该进程 3.在2中输入H&#xff…

Laravel 6 - 第十八章 模型

​ 文章目录 Laravel 6 - 第一章 简介 Laravel 6 - 第二章 项目搭建 Laravel 6 - 第三章 文件夹结构 Laravel 6 - 第四章 生命周期 Laravel 6 - 第五章 控制反转和依赖注入 Laravel 6 - 第六章 服务容器 Laravel 6 - 第七章 服务提供者 Laravel 6 - 第八章 门面 Laravel 6 - …

SN75107BDR 总线接收器 中文资料_PDF中文资料_参数_引脚图

SN75107BDR 规格信息&#xff1a; 制造商:Texas Instruments 产品种类:总线接收器 RoHS:是 接收机数量:2 Receiver 接收机信号类型:Differential 电源电压-最小:/- 4.75 V 电源电压-最大:/- 5.25 V 工作电源电流:30 mA 最小工作温度:0 C 最大工作温度: 70 C 封装 / 箱…

Honor of Kings PC Simulator S35

Honor of Kings PC Simulator S35 [王者荣耀PC模拟器S35] 1&#xff09;卡顿&#xff0c;延迟高 2&#xff09;技能方向控制麻烦 3&#xff09;技能释放位置麻烦 4&#xff09;方向控制麻烦 2024-04-26 04-00-16-Honor of Kings PC Simulator S35 [王者荣耀PC模拟器S35]_哔…

小白学习SpringCloud之Eureka

前言 需要搭建springcloud项目&#xff0c;eureka是其中的一个模块&#xff0c;依赖主要继承父依赖 学习视频&#xff1a;b站狂神说 便于理解,我修改了本地域名》这里!!! 127.0.0.1 eureka7001.com 127.0.0.1 eureka7002.com 127.0.0.1 eureka7003.comEureka入门案例 eureka…

Pytorch迁移学习训练病变分类模型

划分数据集 1.创建训练集文件夹和测试集文件夹 # 创建 train 文件夹 os.mkdir(os.path.join(dataset_path, train))# 创建 test 文件夹 os.mkdir(os.path.join(dataset_path, val))# 在 train 和 test 文件夹中创建各类别子文件夹 for Retinopathy in classes:os.mkdir(os.pa…

【STM32 IIC通信与温湿度传感器AHT20(I2C_AHT20)】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 最终效果展示AHT20温湿度传感器&#xff08;I2C_AHT20&#xff09; 1、工程配置2、代码如果您发现文章有错误请与我留言&#xff0c;感谢 最终效果展示 详细讲解视频…

Vivado-IP-DDS and Testbench Learning

DDS内部结构 实现流程 首先新建一个工程&#xff0c;创建bd文件&#xff0c;添加DDS Compiler核&#xff0c;此处不多赘述 Block Design 在观测输出的信号时&#xff0c;需要将最高位符号位的信号取反&#xff0c;这样才能输出正弦波&#xff0c;否则输出的波形如下图所示 将t…

深度学习--RNN循环神经网络和LSTM

RNN RNN简介 我们来看一看百度百科给的解释 下面是循环神经网络的一部分 黑色直线代表权重&#xff0c;a1&#xff0c;a2代表存储单元&#xff0c;黄色框框代表输入&#xff0c;曲线是激活函数 RNN常用领域 语言建模&#xff08;Language Modeling&#xff09;&#xff1a;…

视频抽帧转图片,opencv和ffmpeg效果测评

最近在做一个项目&#xff0c;需要从视频中抽帧转图片&#xff0c;于是对opencv和ffmpeg效果进行了测评。 文章目录 1. open cv2. ffmpeg3.抽帧效果对比 1. open cv open cv 视频抽图片的教程&#xff0c;推荐以下链接&#xff0c;抽的帧数可以自行调节&#xff01; 用pythono…

重磅!!!监控分布式NVIDIA-GPU状态

简介&#xff1a;Uptime Kuma是一个易于使用的自托管监控工具&#xff0c;它的界面干净简洁&#xff0c;部署和使用都非常方便&#xff0c;用来监控GPU是否在占用&#xff0c;非常美观。 历史攻略&#xff1a; docker应用&#xff1a;搭建uptime-kuma监控站点 win下持续观察…

windows11编译3dslicer_问题总结

编译前准备 CMake&#xff1a;版本>3.16.3&#xff08;避免使用3.21.0&#xff0c;3.25.0-3.25.2&#xff0c;这些版本&#xff0c;可能会出现build错误&#xff09;。Git&#xff1a;版本>1.7.10&#xff0c;安装完git&#xff0c;一定要在cmd里面试一试&#xff0c;是…

DRF学习之三大认证

一、认证 1、自定义认证 在前面说的 APIView 中封装了三大认证&#xff0c;分别为认证、权限、频率。认证即登录认证&#xff0c;权限表示该用户是否有权限访问接口&#xff0c;频率表示用户指定时间内能访问接口的次数。整个请求最开始的也是认证。 &#xff08;1&#xff…

pytest测试基础

assert 验证关键字 需要pahton版本大于3.6&#xff0c;因为有个工具pip3;因为做了映射&#xff0c;所以下面命令pip3即pip pip install -U pytest -U参数可选&#xff0c;是如果已安装可更新。 如果上述demo变化 通过验证代码&#xff0c;测试环境没问题。…

Aigtek:介电弹性体高压放大器在软体机器人研究中的应用

近年来软体机器人的研究成为目前机器人研究领域的热点&#xff0c;由于软体材料的自由度可以根据需求自由变化&#xff0c;因此软体机器人有着极高的灵活性&#xff0c;而且软体机器人因其材料的柔软性有着很好的人机交互性能和安全性。它的出现成功解决了传统的刚性机器人人机…

嵌入式学习62-C++

知识零碎&#xff1a; 构造函数 在执行过程中的三个过程 ←&#xff08;背&#xff09; 1.传参&#xff1a;实参向形参传…