企业微信将应用安装到工作台

在上篇中介绍了配置小程序应用及指令、数据回调获取第三方凭证;

本篇将介绍如何将应用安装到企业工作台。

添加测试企业

通过【应用管理】->【测试企业配置】添加测试企业。

通过企业微信扫描二维码添加测试企业。

注意:需要扫描的账号为管理员权限。

安装测试应用

安装方式

客户企业授权安装第三方应用有两种发起方式:

1.通过服务商网站的授权链接安装

2.通过企业微信应用市场直接安装

安装测试途径

服务商网站的授权链接方式需要应用已经上线才可实施,

本教程仅讲解如何测试应用市场安装的方式。

企业微信提供两种安装测试途径:

1.从服务商后台安装测试:服务商可在本地应用中对已创建的应用进行安装测试

2.自行构造测试授权链接:调用设置授权配置接口,构造测试授权链接进行测试授权

安装测试

在【应用详情】页面,点击【安装测试】,确保指令回调和数据回调均已通过验证。

 

添加企业安装

在【安装测试】中点击【添加企业安装测试】。

安装测试之前,请先确保当前测试已经加入测试企业列表中。

 在【测试安装】确认页面,点击【确认】。

 

管理员授权

使用测试企业的管理员企业微信,扫码【管理员授权】。

确认【可见范围】、【授权应用权限】等安装信息。

接收临时授权码

预授权码用于企业授权时的第三方服务商安全验证。

需要通过授权成功后指令回调POST解析获取临时授权码。

回调内容

可以看到InfoType类型为create_auth。

接下来就是将解析得到的临时授权码请求永久授权码和授权企业信息。

企业永久授权码

该API用于使用临时授权码换取授权方的永久授权码,

并换取授权信息、企业access_token,临时授权码一次有效。

请求方式

POST

请求地址

https://qyapi.weixin.qq.com/cgi-bin/service/get_permanent_code?suite_access_token=SUITE_ACCESS_TOKEN

请求包体

{"auth_code": "auth_code_value"}

 

业务代码

还是在原来的post回调解析中处理新的类型。这里需要注意的一点是:获取到的auto_code不是一个字符串,而是一个xml对象类型;所以下方在处理时,先进行json处理后又转换为数组类型,这样就能获取其中的key 0内容。

代码如下:

/*** 企业微信post回调解析* @param $sReqMsgSig* @param $sReqTimeStamp* @param $sReqNonce* @param $sReqData* @return string*/
public function callbackPOST($sReqMsgSig, $sReqTimeStamp, $sReqNonce, $sReqData)
{$sMsg = "";  // 解析之后的明文$wxcpt = new \WXBizMsgCrypt(self::$token, self::$encodingAesKey, self::$SuiteID);$errCode = $wxcpt->DecryptMsg($sReqMsgSig, $sReqTimeStamp, $sReqNonce, $sReqData, $sMsg);if ($errCode == 0) {// 解密成功,sMsg即为xml格式的明文writeRecordLog('companyWechat.log', "解密成功:\r\n" . var_export($sMsg, true));// TODO: 对明文的处理// 解析该xml字符串,利用simpleXMLlibxml_disable_entity_loader(true);//禁止xml实体解析,防止xml注入$xml = simplexml_load_string($sMsg, 'SimpleXMLElement', LIBXML_NOCDATA);switch ($xml->InfoType) {case 'suite_ticket': // 存储suite_ticket$log_desc = '存储suite_ticket:' . $xml->SuiteTicket;self::$redisWechat->setCompanyTicket($xml->SuiteTicket);break;case 'create_auth': // 授权小程序$auth_code = djson(json($xml->AuthCode));$log_desc = '接收临时授权码:' . $auth_code[0];$log_desc .= "\r\n" . '获取永久授权码';$res = $this->getPermanentCode($auth_code[0]);$log_desc .= "\r\n" . $res;break;case 'cancel_auth': // 删除小程序$log_desc = '删除小程序,取消企业微信corpId:' . $xml->AuthCorpId;break;default:$log_desc = '未知的类型:' . $xml->InfoType;break;}writeRecordLog('companyWechat.log', '解析日志:' . $log_desc);return 'success';} else {writeRecordLog('companyWechat.log', "ERR: " . $errCode . "\r\n");return "ERR: " . $errCode . "\r\n";}
}/*** 获取企业永久授权码信息* @param $authCode* @return array|mixed|string*/
protected function getPermanentCode($authCode)
{$get_access_token = $this->companyAccessToken();$access_token = $get_access_token['data']['suite_access_token'];$url = 'https://qyapi.weixin.qq.com/cgi-bin/service/get_permanent_code?suite_access_token=' . $access_token;$params = json(['auth_code' => $authCode]);$info = $this->linkCurl($url, 'POST', $params);return $info;}

回调响应

在回调中解析并打印到日志中,可查看到获取的授权企业信息,并包含永久授权码。

参数说明

下面是回调中通过临时授权码获取的企业永久授权码接口返回参数说明,主要用到企业access_token、permanent_code和授权企业信息、授权应用信息及授权管理员信息。

参数

说明

access_token

授权方(企业)access_token,最长为512字节。代开发自建应用安装时不返回。

expires_in

授权方(企业)access_token超时时间(秒)。代开发自建应用安装时不返回。

permanent_code

企业微信永久授权码,最长为512字节

auth_corp_info

授权方企业信息

auth_corp_info.corpid

授权方企业微信id

auth_corp_info.corp_name

授权方企业名称,即企业简称

auth_corp_info.corp_type

授权方企业类型,认证号:verified, 注册号:unverified

auth_corp_info.corp_square_logo_url

授权方企业方形头像

auth_corp_info.corp_user_max

授权方企业用户规模

auth_corp_info.corp_full_name

授权方企业的主体名称(仅认证或验证过的企业有),即企业全称。企业微信将逐步回收该字段,后续实际返回内容为企业名称,即auth_corp_info.corp_name。

auth_corp_info.subject_type

企业类型,1. 企业; 2. 政府以及事业单位; 3. 其他组织, 4.团队号

auth_corp_info.verified_end_time

认证到期时间

auth_corp_info.corp_wxqrcode

授权企业在微信插件(原企业号)的二维码,可用于关注微信插件

auth_corp_info.corp_scale

企业规模。当企业未设置该属性时,值为空

auth_corp_info.corp_industry

企业所属行业。当企业未设置该属性时,值为空

auth_corp_info.corp_sub_industry

企业所属子行业。当企业未设置该属性时,值为空

auth_info

授权信息。如果是通讯录应用,且没开启实体应用,是没有该项的。通讯录应用拥有企业通讯录的全部信息读写权限

auth_info.agent

授权的应用信息,注意是一个数组,但仅旧的多应用套件授权时会返回多个agent,对新的单应用授权,永远只返回一个agent

auth_info.agent.agentid

授权方应用id

auth_info.agent.name

授权方应用名字

auth_info.agent.square_logo_url

授权方应用方形头像

auth_info.agent.round_logo_url

授权方应用圆形头像

auth_info.agent.appid

旧的多应用套件中的对应应用id,新开发者请忽略

auth_info.agent.auth_mode

授权模式,0为管理员授权;1为成员授权

auth_info.agent.is_customized_app

是否为代开发自建应用

auth_info.agent.auth_from_thirdapp

来自第三方应用接口唤起,仅通过第三方应用添加自建应用 获取授权链接授权代开发自建应用时,才返回该字段

auth_info.agent.privilege

应用对应的权限

auth_info.agent.privilege.allow_party

应用可见范围(部门)

auth_info.agent.privilege.allow_tag

应用可见范围(标签)

auth_info.agent.privilege.allow_user

应用可见范围(成员)

auth_info.agent.privilege.extra_party

额外通讯录(部门)

auth_info.agent.privilege.extra_user

额外通讯录(成员)

auth_info.agent.privilege.extra_tag

额外通讯录(标签)

auth_info.agent.privilege.level

权限等级。
1:通讯录基本信息只读
2:通讯录全部信息只读
3:通讯录全部信息读写
4:单个基本信息只读
5:通讯录全部信息只写

auth_info.agent.shared_from

共享了应用的企业信息,仅当由企业互联或者上下游共享应用触发的安装时才返回

auth_info.agent.shared_from.corpid

共享了应用的企业信息,仅当企业互联或者上下游共享应用触发的安装时才返回

auth_info.agent.shared_from.share_type

共享了途径,0表示企业互联,1表示上下游

auth_user_info

授权管理员的信息,可能不返回

auth_user_info.userid

授权管理员的userid,可能为空

auth_user_info.open_userid

授权管理员的open_userid,可能为空

auth_user_info.name

授权管理员的name,可能为空

auth_user_info.avatar

授权管理员的头像url,可能为空

接下来就是把永久授权码和企业授权id或者其他能用上的信息保存起来;

这里就不在详说,可根据具体业务实现。

总结

本篇将介绍如何将应用安装到企业工作台,其中包含添加测试企业、安装测试应用及获取企业授权信息。

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

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

相关文章

蓝桥杯单片机综合练习——工厂灯光控制

一、题目 二、代码 #include <reg52.h>sfr AUXR 0x8e; //定义辅助寄存器sbit S5 P3^2; //定义S5按键引脚 sbit S4 P3^3; //定义S4按键引脚unsigned char led_stat 0xff; //定义LED当前状态 unsigned char count 0; //定义50ms定时中断累…

【Docker】从零开始:2.Docker三要素

【Docker】从零开始&#xff1a;2.Docker三要素 DockerDocker支持的系统CentOS DockerDocker三要素Docker镜像(Image):Docker容器(Container):1.从面向对象角度2.从镜像容器角度 Docker仓库(Repository) 总结 Docker docker官网&#xff1a;http://www.docker.com 仓库-Docker…

leetcode 每日一题复盘(11.20~11.26)

leetcode 746 使用最小花费爬楼梯 虽然是简单题但还是要说一下,感觉做题的思路还是不够清晰,好的是知道状态是最低花费,知道围绕所求的目标进行展开,倒推出递推公式 一开始写的递推公式是dp[i]dp[i-1]min(cost[i-2],cost[i-1]),写出了一个类似贪心算法的东西,归根结底还是对dp…

Android13 新增 Stable AIDL接口

问题描述&#xff1a; 我需要在netd aidl 中添加新的接口&#xff1a; 设置网卡MAC地址&#xff1a; void setHardwareAddress(in utf8InCpp String iface, in utf8InCpp String hwAddr); 背景&#xff1a; Android 10 添加了对稳定的 Android 接口定义语言 (AIDL) 的支持&…

机器学习:十大算法快速回顾

一、说明 对于机器学习的是个经典算法&#xff0c;本篇将展示一个回顾&#xff0c;注意&#xff0c;本篇不是具体原理信息介绍&#xff0c;没有代码&#xff0c;但是对于初学者是一个有益的导读。 二. 线性回归 2.1 算法描述 有没有想过数据奇才如何预测未来&#xff1f;输入线…

Linux安装rabbitMq(亲测可用)解决只能本地访问的问题

安装er https://blog.csdn.net/laterstage/article/details/131513793?spm1001.2014.3001.5501下载mq wget --content-disposition "https://packagecloud.io/rabbitmq/rabbitmq-server/packages/el/7/rabbitmq-server-3.10.0-1.el7.noarch.rpm/download.rpm?distro_v…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《氢耦合区域综合能源系统集群双层博弈随机优化调度策略》

这个标题涉及到复杂的领域&#xff0c;主要包括氢能源、能源系统集群、双层博弈、随机优化和调度策略。我将分步解读这个标题&#xff1a; 氢耦合区域综合能源系统集群&#xff1a; 氢能源&#xff1a; 这指的是使用氢作为能源的系统&#xff0c;可能是指氢燃料电池等。区域综合…

TensorFlow实战教程(二十六)-什么是生成对抗网络GAN?基础原理和代码普及

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前一篇文章分享了Keras实现经典的深度学习文本分类算法,包括LSTM、BiLSTM、BiLSTM+Attention和CNN、TextCNN。这篇文章将详细介绍生成对抗网络GAN的基础知识,包括什么是GAN、常用算法(CGAN、DCGAN、…

护眼灯买哪种好?考研必备的护眼台灯推荐

家里顶灯太暗了且高度太高&#xff0c;还是原始的LED灯&#xff0c;晚上用着眼睛都有点难受&#xff0c;还好遇到了儿童护眼灯。下面小编为大家介绍下儿童护眼灯哪个牌子好&#xff1f;什么护眼台灯比较专业 1、色温 台灯的色温也是一个需要考虑的因素&#xff0c;所谓的色温其…

【数据结构】图的存储结构及实现(邻接表和十字链表)

一.邻接矩阵的空间复杂度 假设图G有n个顶点e条边&#xff0c;则存储该图需要O&#xff08;n^2) 不适用稀疏图的存储 二.邻接表 1.邻接表的存储思想&#xff1a; 对于图的每个顶点vi&#xff0c;将所有邻接于vi的顶点链成一个单链表&#xff0c;称为顶点vi的边表&#xff08…

海外服务器相较于国内服务器有何特点?亚马逊海外服务器为何零跑全球

随着数字时代的迅猛发展&#xff0c;云计算基础设施的重要性愈发凸显。在这个信息爆炸的全球化时代&#xff0c;很多企业的海外业务的成功往往取决于是否拥有安全、可靠、高性能、可扩展、灵活且全球覆盖的云基础设施&#xff0c;因此对很多企业来说&#xff0c;选择一款优质的…

Selenium IDE录制脚本

文章目录 1.环境搭建1.1 Chrome浏览器安装1.2 Chrome驱动安装1.3 Selenium IDE插件的安装 2.Selenium IDE插件介绍2.1 初始化界面2.2 菜单栏2.3 工具栏2.4 地址栏2.5 测试用例窗口2.6 测试脚本窗口2.7 日志和引用窗口 3.元素定位3.1 通过id进行元素定位3.2 通过name进行元素定位…

笔记本散热怎么做?学会4招,快速散热!

“不知道为什么&#xff0c;我的笔记本总是用着用着就会发热。有时候还会非常的烫。这是为什么呢&#xff1f;应该怎么解决笔记本散热的问题呢&#xff1f;” 随着笔记本性能的提高&#xff0c;散热变得尤为重要。合理的散热不仅可以保持笔记本的稳定性能&#xff0c;还能延长其…

对一个Series序列内的元素逐个扩展同一聚合操作一个序列中共有m个元素,从指定的第n个元素开始,对前i元素进行聚合计算Series.expanding()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 一个序列中共有m个元素 从指定的第n个元素开始 对前i元素进行聚合计算 其中&#xff1a;n < i < m 聚合计算&#xff1a;求最大、平均值等 Series.expanding(n).max() Series.expanding(…

什么是加工制造业ERP系统?加工制造业ERP软件有哪些作用

化工、电子、五金、来料加工等不同性质的加工企业有差异化的业务特点&#xff0c;传统的管理模式难以解决多仓库、多工厂、多门店、多渠道信息统一和实时共享等问题。 另外如何实时掌握车间产能、科学制定生产计划、多门店数据统一和实时同步等问题&#xff0c;是很多加工制造…

【Linux】基本指令

Linux现在已经是绕不开的操作系统&#xff0c;其开源导致的稳定性&#xff0c;安全性等方面遥遥领先。今天我们开始学习Linux操作系统的基本指令 目录 lspwdcdtouchmkdirrmdir && rmmancp ls 语法&#xff1a; ls [选项][目录或文件] 功能&#xff1a;对于目录&#xf…

在回调之间共享数据

可以在 App 中为 UI 组件编写回调函数&#xff0c;以指定用户与其交互时的行为方式。 在具有多个相互依赖的 UI 组件的 App 中&#xff0c;回调函数通常必须访问主 App 函数中定义的数据&#xff0c;或与其他回调函数共享数据。例如&#xff0c;如果创建一个具有列表框的 App&a…

关于WhatsApp群发营销价值、类型、优劣势……这里一次性讲清楚

01 社交销售互动&#xff1a;全球营销新趋势 当下&#xff0c;全球品牌的营销销售互动都步入了社交销售新时代&#xff0c;相比原来任何一种形式的互动沟通来说&#xff0c;其沟通效率、体验、效果都是无与伦比的。 企业与销售的互动&#xff0c;与通讯信息技术发展息息相关。…

电容搞搞”振“,PDN有帮衬

高速先生成员--姜杰 聊电容&#xff0c;不能只聊电容&#xff0c;还要聊电阻和电感。看似很简单&#xff0c;其实&#xff0c;一点都不难。 因为去耦电容的模型基本都可以用下面三种元素的简单组合来表示。 理想电容C的阻抗是随频率的增加而逐渐减小的一条斜线&#xff0c;实际…

脱离form表单校验input(校验单个input输入框)提交时边框变红

把需要自定义校验的数据放在一个对象中&#xff0c;方便以后多个字段校验 customVerifyInps:{communityInp2:"",asPathInp:"",}, 在输入框中绑定id <el-inputid"communityInp2"placeholder""v-model"customVerifyInps.commu…