在上篇中介绍了配置小程序应用及指令、数据回调获取第三方凭证;
本篇将介绍如何将应用安装到企业工作台。
添加测试企业
通过【应用管理】->【测试企业配置】添加测试企业。
通过企业微信扫描二维码添加测试企业。
注意:需要扫描的账号为管理员权限。
安装测试应用
安装方式
客户企业授权安装第三方应用有两种发起方式:
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 | 权限等级。 |
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或者其他能用上的信息保存起来;
这里就不在详说,可根据具体业务实现。
总结
本篇将介绍如何将应用安装到企业工作台,其中包含添加测试企业、安装测试应用及获取企业授权信息。