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


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

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

    添加测试企业

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

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

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

    安装测试应用

    安装方式

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

    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内容。

    代码如下:

    1. /**
    2. * 企业微信post回调解析
    3. * @param $sReqMsgSig
    4. * @param $sReqTimeStamp
    5. * @param $sReqNonce
    6. * @param $sReqData
    7. * @return string
    8. */
    9. public function callbackPOST($sReqMsgSig, $sReqTimeStamp, $sReqNonce, $sReqData)
    10. {
    11. $sMsg = ""; // 解析之后的明文
    12. $wxcpt = new \WXBizMsgCrypt(self::$token, self::$encodingAesKey, self::$SuiteID);
    13. $errCode = $wxcpt->DecryptMsg($sReqMsgSig, $sReqTimeStamp, $sReqNonce, $sReqData, $sMsg);
    14. if ($errCode == 0) {
    15. // 解密成功,sMsg即为xml格式的明文
    16. writeRecordLog('companyWechat.log', "解密成功:\r\n" . var_export($sMsg, true));
    17. // TODO: 对明文的处理
    18. // 解析该xml字符串,利用simpleXML
    19. libxml_disable_entity_loader(true);
    20. //禁止xml实体解析,防止xml注入
    21. $xml = simplexml_load_string($sMsg, 'SimpleXMLElement', LIBXML_NOCDATA);
    22. switch ($xml->InfoType) {
    23. case 'suite_ticket': // 存储suite_ticket
    24. $log_desc = '存储suite_ticket:' . $xml->SuiteTicket;
    25. self::$redisWechat->setCompanyTicket($xml->SuiteTicket);
    26. break;
    27. case 'create_auth': // 授权小程序
    28. $auth_code = djson(json($xml->AuthCode));
    29. $log_desc = '接收临时授权码:' . $auth_code[0];
    30. $log_desc .= "\r\n" . '获取永久授权码';
    31. $res = $this->getPermanentCode($auth_code[0]);
    32. $log_desc .= "\r\n" . $res;
    33. break;
    34. case 'cancel_auth': // 删除小程序
    35. $log_desc = '删除小程序,取消企业微信corpId:' . $xml->AuthCorpId;
    36. break;
    37. default:
    38. $log_desc = '未知的类型:' . $xml->InfoType;
    39. break;
    40. }
    41. writeRecordLog('companyWechat.log', '解析日志:' . $log_desc);
    42. return 'success';
    43. } else {
    44. writeRecordLog('companyWechat.log', "ERR: " . $errCode . "\r\n");
    45. return "ERR: " . $errCode . "\r\n";
    46. }
    47. }
    48. /**
    49. * 获取企业永久授权码信息
    50. * @param $authCode
    51. * @return array|mixed|string
    52. */
    53. protected function getPermanentCode($authCode)
    54. {
    55. $get_access_token = $this->companyAccessToken();
    56. $access_token = $get_access_token['data']['suite_access_token'];
    57. $url = 'https://qyapi.weixin.qq.com/cgi-bin/service/get_permanent_code?suite_access_token=' . $access_token;
    58. $params = json(['auth_code' => $authCode]);
    59. $info = $this->linkCurl($url, 'POST', $params);
    60. return $info;
    61. }

    回调响应

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

    参数说明

    下面是回调中通过临时授权码获取的企业永久授权码接口返回参数说明,主要用到企业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或者其他能用上的信息保存起来;

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

    总结

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

  • 相关阅读:
    Ubuntu-server 22.04LTS源码编译apache服务器
    【学习】​CSMM和CMMI的关系你了解吗
    N32学习笔记9-串口dma方式收发数据+printf的代码版本
    javaEE -4(11000字详解多线程)
    MySQL事务详细讲解
    c++11知识:auto类型推导
    2022暑期复习-Day9
    Android 9.0 AOSP源码目录介绍
    【ESP32_8266_BT篇(二)】Beacon信标广播
    一篇带你搞定⭐《生产环境JVM日志配置》⭐
  • 原文地址:https://blog.csdn.net/json_ligege/article/details/134505632