导语
腾讯会议提供了强大的开放API功能,通过无缝对接企业邮箱、日程、会议室管理系统,实现行业应用、企业办公平台与腾讯会议音视频的连接。只需要简单的开发,就能实现预定会议、修改会议等企业会议管理功能和创建用户、管理用户等企业用户管理的功能。
腾讯会议开发API应用场景很多。腾讯内部的招聘系统就是通过对接腾讯会议API,实现面试邀约线上化闭环,支持面试官匿名入会,并设置面试专用头像,保护面试官隐私,最快一分钟可完成自助面试邀约,轻松实现与面试者的全程“无接触”顺畅交流。其他比如金蝶的HR系统、腾讯课堂的学员在线面试、道一云办公平台个性化会议管理等各种场景都需要用到腾讯会议API。
从用户调研来看,除了大型企业有定制会议的需求,很多中小企业也都有接入会议API的需求,但是由于公司内专门的IT人员较少,为了降低开发成本,本文介绍如何使用Postman调试腾讯会议API,尤其是如何处理签名加密,降低企业接入调试成本。
调试准备
腾讯会议API开放给企业版用户,因此需要提前购买好企业版账号。
- 已购买企业版腾讯会议。
- 准备好官网API文档
- 准备好密钥对和应用ID,可以联系企业管理员获取。
SecretId: AKI****PLE
SecretKey: Gu5****PLE
AppId:200xxxx001
- 去官网下载好Postman APP或者用chrome插件。
配置环境变量
- Postman主界面右上角可以配置环境变量,建议配置一个单独的环境变量,存放
SecretId
、SecretKey
等信息,这样在header
、url
等地方就可以通过双大括号({{}}
)进行引用,点击右上角图标按提示新建。如图我已经新建了一个名为TM-API的环境。 Postman主界面.png至少配置前三个环境变量,后面两个是用代码生成的,这一步可以忽略。配置环境变量.png
构造GET请求
正式开始前请务必通读一遍官网API文档,很多文档都是文档里已经说明了的。
GET URL填写
这里我先选取一个简单的GET
请求,以根据会议CODE查询会议为例,先查询官网文档,获得以下信息。可以看到需要三个入参,可以用自己的账号先在APP上预约一个会议方便测试。将以上信息组成URL填写进Postman。
构造基础header
腾讯会议的API使用了签名,是实时计算的,所以很多只会Postman基础功能的同学就不知道如何操作了。
我们先根据签名文档设置几个基础的header
信息,可以对照官网文档。这里就可以用到环境变量了,通过两个大括号引用。注意这里的timestamp
变量是默认就有的,可以直接引用。
不需要担心出错,因为报错信息里都有提示。比如我设置了几个header
(不过不全,比如缺少某个字段),报错信息里就有提示,code为400
,下图提示我们缺少X-TC-Nonce
字段。
在屏幕下方有个Postman的控制台,点开方便调试,和浏览器控制台类似。
继续查看文档,X-TC-Nonce
参数是必填的,是一个随机正整数。这里就正式引入这里的关键Pre-request Script功能。
编写简单的Pre-request Script
Pre-request Script的作用就在于在正式发起请求前可以执行一段代码。这是一个强大的功能,因为现在很多API的header里的内容都不是固定的,是需要实时计算的。这个计算就是在Pre-request Script里进行的。Postman的一个请求会先经过Pre-Request Script,再发起Request,再返回Response,最终经过Test Script。这里的代码是JS格式。
打开Pre-request Script,编写一个获取随机正整数的变量,再把变量添加进环境变量里。右侧Postman给出了一些代码片段,可以直接点击使用。这里可以使用console.log()
打印,在控制台可以看效果。编写完之后,我们在header里引用X-TC-Nonce
,可以看到已经成功了。现在报错信息为:签名失败。这个是重头戏,需要计算签名。
构造加密签名
初识过Pre-request Script的功能,即使签名的计算逻辑比较复杂,我们也可以摸索出来。继续查看官网API文档,签名基本上分为三步。
- 利用
X-TC-Key
、X-TC-Nonce
等组成HeaderString
- 将
request method
、HeaderString
、URI、body等组成签名串StringToSign
- 利用密钥对签名川进行
Hmac-SHA256
加密,转成16进制后再进行Base64
编码。完成签名。
这里主要的工作就是在Postnan里实现上面的逻辑。我们直接上代码:
代码语言:txt复制var XTcNonce = Math.floor(Math.random() * 100000);
postman.setEnvironmentVariable("XTcNonce", XTcNonce);
// 获取URL相关信息
const url = require('url');
var urlObject = url.parse(request.url);
// console.log(urlObject);
var reqBody = pm.request.body;
// 构造签名串
// typeof reqBody === 'object'判断在于区分POST和GET等方法,GET是的body为空
var toSign = request.method "n"
"X-TC-Key=" pm.variables.get("secret_id") "&X-TC-Nonce=" XTcNonce "&X-TC-Timestamp=" pm.variables.replaceIn('{{$timestamp}}') "n"
urlObject.path "n"
(typeof reqBody === 'object' ? reqBody.raw : '');
// 使用HmacSHA256加密并转16进制
var signatureHex = CryptoJS.HmacSHA256(toSign, pm.variables.get("secret_key")).toString(CryptoJS.enc.Hex);
// Base64加密,并设置为新环境变量
var signature = CryptoJS.enc.Utf8.parse(signatureHex).toString(CryptoJS.enc.Base64)
pm.environment.set("signature", signature);
这里用到了内置的CryptoJS
库的一些操作。现在很多API都是类似的签名逻辑,不止腾讯会议API,其他也可以参考这段代码。在header
里引用signature
变量,再次调用。可以看到已经成功了,返回码为200.
构造POST请求
POST请求和GET请求类似,因为我们已经在Pre-request Script里统一处理了,所以只需要更改下入参即可。
以创建会议为例,选择JSON格式即可。
巧用Test Script
Postman还有一个功能就是测试,对于Response的返回值做测试,如果你有很多测试,可以深入研究一下。填到test script页,执行通过则显示绿色,不通过则显示红色。
这里不是本文的重点,不过会使用断言则调试会更加轻松。几个常用的代码。
代码语言:txt复制//断言状态码为200
pm.test("断言状态码为200", function () {
pm.response.to.have.status(200);
});
//断言状态响应说明是否包指定值
pm.test("断言状态响应说明是否包指定值", function () {
pm.response.to.have.status("ok");
});
通过以上步骤,就可以在Postman里打造自己的API调试界面。下次遇到报错,可以先用Pstman调试,借助于返回码、log等信息先调试成功,再开始编写实际的代码。这样能快速分清楚是会议API本身有问题,还是自己二次开发的代码有问题。
参考文档
- 腾讯会议API官方文档
- Postman Pre-request Script (postman 脚本) 编写
- Postman调试技巧之接口签名