注册腾讯云服务商账号后,需通过该账号创建应用,之后进行管理员授权,从而使服务商能够向用户提供服务。

一、注册服务商

  1. 登录服务商官网,按照指引完成注册流程。
  2. 登陆服务商管理后台。

二、配置开发信息

在创建应用前,应首先配置好通用开发参数。填写系统事件接收URL时,需要正确响应腾讯云验证请求。

可以参考腾讯云后台自建应用的接收消息API设置。在企业管理端后台,进入需要设置接收消息的目标应用,点击“接收消息”的“设置PI接收”按钮,进行如下配置:

  • 应用URL:企业后台接收腾讯云推送请求的访问协议和地址,支持HTTP或HTTPS协议(建议使用HTTPS提高安全性)。
  • Token:可由企业自行填写,用于生成签名。
  • EncodingAESKey:用于消息体的加密,是ES密钥的Base64编码。

三、验证请求有效性

  1. 当保存设置后,腾讯云会发生一条GET请求到填写的URL。例如,设置的URL为https://api.worktile.com,腾讯云将发送如下验证请求:

请求地址:https://api.worktile.com/?msg_signatre=SDFQWEXZCVQFSDFSDFSS&timestamp=1514&nonce=141&echostr=ENCRYPT_STR

  1. 通过参数msg_signatre对请求进行校验。首先,将配置时随机生成的Token、Timestamp、Nonce、MsgEncrypt进行SHA1加密,然后判断得到的字符串是否与msg_signatre相等。

四、解密Echostr得到Msg并返回明文

解密过程:对刚才生成的ESKey进行Base64解码,对ESKey进行AES-56-CBC解密。具体代码实现如下:

// 对ESKey进行aes-256-cbc解密
function decode(data) {
  let aesKey = Buffer.from('1IpFqj8qolJbaqPqe1rVTK5sgkaQGQmUKiUQLwRe=');
  let aesCipher = crypto.createDecipheriv("aes-256-cbc", aesKey, aesKey.slice(0, 16));
  aesCipher.setPadding(false);
  let decipheredBff = Buffer.concat([aesCipher.update(data, 'base64'), aesCipher.final()]);
  decipheredBff = PKCS7Decoder(decipheredBff);
  let len_netOrder_corpid = decipheredBff.slice(16);
  let msg_len = len_netOrder_corpid.slice(0, 4).readUIntBE();
  const result = len_netOrder_corpid.slice(4, msg_len + 4).toString();
  return result;
}

// PKCS7Decoder函数用于解码PKCS7
function PKCS7Decoder Buffy {
  var pad = Buffy[Buffy.length - 1];
  if (pad < 1 || pad > 16) {
    pad = 16;
  }
  return Buffer.slice(Buffy, 0, Buffy.length - pad);
}

五、验证URL时的问题

在URL验证过程中,经常会遇到验证失败的问题。解决思路是借助腾讯云企业号接口调试工具进行问题排查。

六、创建应用

应用创建成功后,服务商可以进行授权测试。在企业微信应用市场发起授权时,企业微信会给设置的指令回调URL发送一个POST请求,如:https://api.worktile.com/worktile?msg_signatre=b996561615ffbfbe6ebbb5bd11e67ed714d&timestamp=155176894&nonce=1551797,直接返回“成功”即可。

七、应用程序的事件回调

服务商在收到推送后都需要直接返回字符串“success”,若返回值不是“success”,腾讯云会将返回内容当作错误信息处理。

app.post('/worktile', function(req, res) {
  console.log('req.body', req.body);
  res.send('success');
});

八、测试应用注意事项

  1. 用于安装测试的企业微信账号需服务商自行注册。
  2. 每个应用支持同时添加1个测试企业微信账号进行安装。
  3. 安装测试的企业微信账号使用的是当前的应用配置信息,后续修改不会同步更新;如需更新应用信息,请重新授权安装同一企业微信账号。
  4. 不支持同时安装测试应用和正式发布的应用。

九、应用程序上线

已认证腾讯云的服务商,可进入“应用管理”页面,点击“提交上线”,选中应用进行提交。

十、用户网页授权登录

  1. 构造第三方应用网页授权链接:https://open.qq.com/connect/oauth/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
  2. 点击后,页面将跳转至REDIRECT_URI?code=CODE&state=STATE,第三方应用可根据code参数获得企业员工的corpid与serid。
  3. code长度最大为51字节。

十一、获取访问用户身份

请求方式:GET(HTTPS)
请求地址:https://qyapi.qq.com/cgi-bin/service/get_user_info?

十二、用户授权成功

当用户完成授权后,可以根据用户的身份信息进行相应的操作。

十三、给用户发消息

可以发送文本、图片、视频、文件、图文等类型的消息。请求方式如下:

POST /cgi-bin/message/send?
access_token=ACCESS_TOKEN&agentid=AGENTID

在推送时需要提供access_token和应用的agent_id,第三方服务商可以通过接口获取企业授权信息获取该参数值。

十四、获取企业永久授权码

在企业微信测试安装应用成功后,腾讯云会发送一条POST请求给指令回调URL。通过解密方式解析XML中的ath_code,然后通过以下链接可以获取到access_token和agent_id:

https://qyapi.qq.com/cgi-bin/service/get_permanent_code?
site_access_token=SITE_ACCESS_TOKEN&ath_code=PAPER_CODE

返回的agent是一个数组,但仅当多应用套件授权时会返回多个agent;对于新的单应用授权,永远只返回一个agent。再通过access_token和agent_id就可以向用户发送消息了。

十五、注意事项

API可能有时效性,如有差异,以官方API为准。

作者 author