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

news2024/12/21 23:08:04

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

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

添加测试企业

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

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

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

安装测试应用

安装方式

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

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字符串,利用simpleXML
        libxml_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.coloradmin.cn/o/1232272.html

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

相关文章

让别人访问电脑本地

查看本地IP地址: 使用ipconfig(Windows)或ifconfig(Linux/macOS)命令来查看你的计算机本地网络的IP地址。确保*****是你的本地IP地址。 防火墙设置: 确保你的防火墙允许从外部访问*****。你可能需要在防火…

万字解析设计模式之代理模式

一、代理模式 1.1概述 代理模式是一种结构型设计模式,它允许通过创建代理对象来控制对其他对象的访问。这种模式可以增加一些额外的逻辑来控制对原始对象的访问,同时还可以提供更加灵活的访问方式。 代理模式分为静态代理和动态代理两种。静态代理是在编…

【机器学习】032_多种神经网络层类型

一、密集层 每一层神经元都是上一层神经元的函数,每层每个神经元都从前一层获得所有激活的输入。 整个神经网络前一层与后一层连接在一起,构造的网络密集。 二、卷积层 假设有一张大小为axb像素的图片,上面标着一些手写数字&#xff0c…

Apache Airflow (十二) :PythonOperator

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹…

Java-equals方法

1.package com.msb.test02; 2. 3./** 4. * Auther: msb-zhaoss 5. */ 6.public class Phone {//手机类: 7. //属性: 8. private String brand;//品牌型号 9. private double price;//价格 10. private int year ;//出产年份 11. //方法&a…

Java基础-----正则表达式

文章目录 1.简介2.目的3.学习网站4.常用匹配字符5.String类中用到正则表达式的方法 1.简介 又叫做规则表达式。是一种文本模式,包括普通字符和特殊字符(元字符)。正则使用单个字符来描述、匹配一系列某个句法规则的字符串,通常用…

投资黄金:如何选择正确的黄金品种增加收益?

黄金一直以来都是备受投资者青睐的避险资产,然而,在庞大的黄金市场中,选择适合自己的黄金品种成为影响收益的关键因素。黄金投资并不只有一种方式,而是有很多种不同的黄金品种可以选择。每种黄金品种都有其独特的特点和风险&#…

Linux本地WBO创作白板部署与远程访问

文章目录 前言1. 部署WBO白板2. 本地访问WBO白板3. Linux 安装cpolar4. 配置WBO公网访问地址5. 公网远程访问WBO白板6. 固定WBO白板公网地址 前言 WBO在线协作白板是一个自由和开源的在线协作白板,允许多个用户同时在一个虚拟的大型白板上画图。该白板对所有线上用…

启动dubbo消费端过程提示No provider available for the service的问题定位与解决

文/朱季谦 某次在启动dubbo消费端时,发现无法从zookeeper注册中心获取到所依赖的消费者API,启动日志一直出现这样的异常提示 Failed to check the status of the service com.fte.zhu.api.testService. No provider available for the service com.fte…

使用Python的turtle模块绘制玫瑰花图案(含详细Python代码与注释)

1.1引言 turtle模块是Python的标准库之一,它提供了一个绘图板,让我们可以在屏幕上绘制各种图形。通过使用turtle,我们可以创建花朵、叶子、复杂的图案等等。本博客将介绍如何使用turtle模块实现绘制图形的过程,并展示最终结果。 …

初始环境配置

目录 一、JDK1、简介2、配置步骤 二、Redis1、简介2、配置步骤 三、MySQL1、简介2、配置步骤 四、Git1、简介2、配置步骤 五、NodeJS1、简介2、配置步骤 六、Maven1、简介2、配置步骤 七、Tomcat1、简介2、配置步骤 一、JDK 1、简介 JDK 是 Oracle 提供的 Java 开发工具包&…

Java基础-----StringBuffer和StringBuilder

文章目录 1.StringBuffer1.1 构造方法1.2 常用方法 2.StringBuilder3.String、StringBuffer、StringBuilder的区别 1.StringBuffer 内容可变的字符串类,适应StringBuffer来对字符串的内容进行动态操作,不会产生额外的对象。StringBuffer在初始时&#x…

机器学习笔记 - Ocr识别中的CTC算法原理概述

一、文字识别 在文本检测步骤中,分割出了文本区域。现在需要识别这些片段中存在哪些文本。 机器学习笔记 - Ocr识别中的文本检测EAST网络概述-CSDN博客文章浏览阅读300次。在 EAST 网络的这个分支中,它合并了 VGG16 网络不同层的特征输出。现在,该层之后的特征大小将等于 p…

【计算机网络笔记】路由算法之链路状态路由算法

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

Redis高级特性和应用(发布 订阅、Stream)

目录 发布和订阅 操作命令 发布消息 订阅消息 查询订阅情况 查看活跃的频道 查看频道订阅数 使用场景和缺点 Redis Stream Stream总述 常用操作命令 生产端 消费端 单消费者 消费组 创建消费组 消息消费 在Redis中实现消息队列 基于pub/sub 基于Stream Re…

18章总结—Swing程序设计

例题1 package admi; import java.awt.*; import javax.swing.*; public class JFreamTest { public static void main(String[] args) { JFrame jfnew JFrame(); jf.setTitle("创建一个JFrame窗体"); Container containerjf.getC…

C++二分算法:找到最接近目标值的函数值

本文涉及的基础知识点 二分查找算法合集 题目 Winston 构造了一个如上所示的函数 func 。他有一个整数数组 arr 和一个整数 target ,他想找到让 |func(arr, l, r) - target| 最小的 l 和 r 。 请你返回 |func(arr, l, r) - target| 的最小值。 请注意&#xff0c…

《崩坏:星穹铁道》1.5仙舟罗浮-绥园全宝箱攻略

大家好,我是闲游盒小盒子,本篇来说下崩铁1.5版本仙舟罗浮-绥园的全宝箱攻略,共有19个宝箱加1个扑满;做完间章可获取前14个普通宝箱加2个精英怪宝箱,以及1个扑满;完成《狐斋志异》全任务可获得另外3个宝箱。…

Wireshark抓包:理解TCP三次握手和四次挥手过程

TCP是一种面向连接、端到端可靠的协议,它被设计用于在互联网上传输数据和确保成功传递数据和消息。本节来介绍一下TCP中的三次握手和四次挥手。 文章目录 1 TCP头部格式2 wireshark抓包分析2.1 SEQ和ACK2.2 三次握手2.3 四次挥手 3 程序 1 TCP头部格式 TCP头部占据…

【教3妹学编辑-mysql】详解数据库三大范式

什么是范式 简单地理解就是:数据库设计时遵循的规范 三大范式 数据库三大范式包含:1、第一范式(1NF);2、第二范式(2NF);3、第三范式(3NF)。其中,第一范式(1NF)的要求是属性不可分割,第二范式(2NF)的要求是…