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

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

概念说明

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

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

这边比较简单,进入服务商管理后台创建即可,这里的重点是回调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.mzph.cn/diannao/3515.shtml

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

相关文章

[Swift]组件化开发

一、组件化开发基础 1.组件定义 在软件开发中&#xff0c;一个组件是指一个独立的、可替换的软件单元&#xff0c;它封装了一组相关的功能。组件通过定义的接口与外界交互&#xff0c;并且这些接口隔离了组件内部的实现细节。在Swift语言中&#xff0c;组件可以是一个模块、一…

车企如何利用数据技术,指导汽车全生命周期的业务运营?

引言&#xff1a;数据正作为重点&#xff0c;为行业提供不可或缺的指导 《汽车数据发展研究报告&#xff08;2023&#xff09;》指出&#xff0c;汽车行业正由传统硬件制造向“电动化、智能化、网联化”方向转变。德勤预测&#xff0c;到 2025 年&#xff0c;汽车行业 20%的利…

K8s: 部署 kubernetes dashboard

部署 Dashboard K8s 官方有一个项目叫 dashboard&#xff0c;通过这个项目更方便监控集群的状态 官方地址: https://github.com/kubernetes/dashboard 通常我们通过命令行 $ kubectl get po -n kube-system 能够查看到集群所有的组件&#xff0c;但这样的方式比较不太直观 …

【JavaScript】内置对象 ③ ( Math 内置对象 | Math 内置对象简介 | Math 内置对象的使用 )

文章目录 一、Math 内置对象1、Math 内置对象简介2、Math 内置对象的使用 二、代码示例1、代码示例 - Math 内置对象的使用2、代码示例 - 封装 Math 内置对象 一、Math 内置对象 1、Math 内置对象简介 JavaScript 中的 Math 内置对象 是一个 全局对象 , 该对象 提供了 常用的 数…

通过 QEMU 试用 ESP32-C3 的安全功能

概述 ESP32-C3 系列芯片支持可信启动、flash 加密、安全存储等多种安全功能&#xff0c;还有专用外设来支持 HMAC 和数字签名等用例。这些功能所需的私钥和配置大多存储在 ESP32-C3 的 eFuse 存储器中。 启用安全功能时需要谨慎&#xff0c;因为使用到的 eFuse 存储器是一次…

安卓studio插件开发(一)本地搭建工程

下载idea 社区版本 建立IDE Plugin工程 点击create就行&#xff0c;新建立的工程长这样 比较重要的文件 build.gradle&#xff1a;配置工程的参数 plugin.xml&#xff1a;设置插件的Action位置 build.gradle.kts内容如下&#xff1a; plugins {id("java")id(&quo…

【网络安全】安全事件管理处置 — 事件分级分类

专栏文章索引&#xff1a;网络安全 有问题可私聊&#xff1a;QQ&#xff1a;3375119339 目录 一、安全事件分级 二、应急事件分级 三、安全事件分类 四、常见安全事件原因分析 1.web入侵 2.漏洞攻击 3.网络攻击 一、安全事件分级 在对安全事件的应急响应过程中&#xf…

6.MMD ray渲染 材质的添加及打光方法

材质 前置准备 先准备好模型和场景 将ray控制器拖入进去 添加完默认的材质以后的效果 打开插入材质页面 打开MaterialMap栏 将流萤的模型展开 自发光 现在给领带添加一个自发光效果 在自发光Emissive里&#xff0c;打开x1&#xff0c;选择albedo&#xff0c;白光 现在…

OpenMesh 计算封闭网格体积

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 思路很是简单,就是计算一些四面体的有向体积(这些四面体均是基于网格中的三角形与原点组成的) ,至于体积的符号则来自于三角形是否指向原点方向来确定,即面片的法线方向(其中三角形的法线本身取决于顶点的顺序…

80个在线小游戏源码

源码简介 搭建80个在线小游戏网站源码&#xff0c;解压即可食用&#xff0c;支持在本地浏览器打开。 安装教程 纯HTML&#xff0c;直接将压缩包上传网站目录解压即可 首页截图 源码下载 80个在线小游戏源码-小8源码屋

BGP的基本概念和工作原理

AS的由来 l Autonomous System 自治系统&#xff0c;为了便于管理规模不断扩大的网络&#xff0c;将网络划分为不同的AS l 不同AS通过AS号区分&#xff0c;AS号取值范围1&#xff0d;65535&#xff0c;其中64512&#xff0d;65535是私有AS号 l IANA机构负责AS号的分发 AS之…

【Vue】通过Axios实现异步通信(简单案例)

一、Axios介绍 1、是什么 Axios 是一个基于 promise 的 HTTP 库&#xff0c;简单的讲就是可以发送get、post请求。当然这些请求ajax和jquery也能做&#xff0c;但是由于Vue、React等框架的出现&#xff0c;促使了Axios轻量级库的出现&#xff0c;因为Vue等&#xff0c;不需要操…

LabVIEW专栏九、类的应用

一、类的应用 接上一章"类" 类在项目中&#xff0c;一般会在类的私有成员簇内&#xff0c;包含一个数据类型为参数类的队列。 例如网口类&#xff0c;里面实际会包含很多信息&#xff0c;有IP地址和端口等等参数。这些参数如果不放在队列引用中缓存下来&#xff0c;…

HarmonyOS开发实战(黑马健康系列一:欢迎页)

系列文章目录 &#xff08;零&#xff09;鸿蒙HarmonyOS入门&#xff1a;如何配置环境&#xff0c;输出“Hello World“ &#xff08;一&#xff09;鸿蒙HarmonyOS开发基础 &#xff08;二&#xff09;鸿蒙HarmonyOS主力开发语言ArkTS-基本语法 &#xff08;三&#xff09;鸿蒙…

【Qt QML】TabBar的用法

Qt Quick中的TabBar提供了一个基于选项卡的导航模型。TabBar由TabButton控件填充&#xff0c;并且可以与任何提供currentIndex属性的布局或容器控件一起使用&#xff0c;例如StackLayout或SwipeView。 import QtQuick import QtQuick.Controls import QtQuick.LayoutsWindow …

AWS SES发送邮件如何正确配置?操作指南?

AWS SES发送邮件有哪些限制&#xff1f;AWS SES发信的注意事项&#xff1f; AWS SES作为亚马逊云服务提供的一项高效、可靠的电子邮件发送服务&#xff0c;受到了众多企业的青睐。然而&#xff0c;如何正确配置AWS SES发送邮件。AokSend将详细解析AWS SES发送邮件的配置过程&a…

MIS微调SAM模型实时交互UI界面

前言 SAM模型的基本介绍可见SAM&#xff08;Segment Anything Model&#xff09;大模型使用--point prompt_sam大模型-CSDN博客 针对Meta团队去年发布的SAM大模型在医学图像分割领域表现性能较差的情况&#xff0c;笔者收集了一些MIS领域的数据集对SAM的架构进行fine tune&am…

vue快速入门(四十三)axios模块的安装与引入

步骤很详细&#xff0c;直接上教程 上一篇 在项目目录打开终端 输入以下命令安装axios npm i axios重新打开项目即可完成按照 测试 源码 main.js import Vue from vue import App from ./App.vue//全局引入axios // 引入axios import axios from axios; // 挂载到vue原型…

BGP配置和应用案例

策略路由的配置步骤 l 策略路由的配置步骤如下&#xff1a; 创建route-map 通过ACL匹配感兴趣的数据&#xff0c;定义策略动作 在指定接口下通过ip policy 命令应用route-map l 最终实现对通过该接口进入设备的数据进行检查&#xff0c;对匹配的数据执行规定的策略…