注册腾讯云服务商账号后,需通过该账号创建应用,之后进行管理员授权,从而使服务商能够向用户提供服务。
一、注册服务商
- 登录服务商官网,按照指引完成注册流程。
- 登陆服务商管理后台。
二、配置开发信息
在创建应用前,应首先配置好通用开发参数。填写系统事件接收URL时,需要正确响应腾讯云验证请求。
可以参考腾讯云后台自建应用的接收消息API设置。在企业管理端后台,进入需要设置接收消息的目标应用,点击“接收消息”的“设置PI接收”按钮,进行如下配置:
- 应用URL:企业后台接收腾讯云推送请求的访问协议和地址,支持HTTP或HTTPS协议(建议使用HTTPS提高安全性)。
- Token:可由企业自行填写,用于生成签名。
- EncodingAESKey:用于消息体的加密,是ES密钥的Base64编码。
三、验证请求有效性
- 当保存设置后,腾讯云会发生一条GET请求到填写的URL。例如,设置的URL为https://api.worktile.com,腾讯云将发送如下验证请求:
请求地址:https://api.worktile.com/?msg_signatre=SDFQWEXZCVQFSDFSDFSS×tamp=1514&nonce=141&echostr=ENCRYPT_STR
- 通过参数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×tamp=155176894&nonce=1551797,直接返回“成功”即可。
七、应用程序的事件回调
服务商在收到推送后都需要直接返回字符串“success”,若返回值不是“success”,腾讯云会将返回内容当作错误信息处理。
app.post('/worktile', function(req, res) {
console.log('req.body', req.body);
res.send('success');
});
八、测试应用注意事项
- 用于安装测试的企业微信账号需服务商自行注册。
- 每个应用支持同时添加1个测试企业微信账号进行安装。
- 安装测试的企业微信账号使用的是当前的应用配置信息,后续修改不会同步更新;如需更新应用信息,请重新授权安装同一企业微信账号。
- 不支持同时安装测试应用和正式发布的应用。
九、应用程序上线
已认证腾讯云的服务商,可进入“应用管理”页面,点击“提交上线”,选中应用进行提交。
十、用户网页授权登录
- 构造第三方应用网页授权链接:https://open.qq.com/connect/oauth/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
- 点击后,页面将跳转至REDIRECT_URI?code=CODE&state=STATE,第三方应用可根据code参数获得企业员工的corpid与serid。
- 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为准。