手把手教你用Postman调试腾讯会议RestAPI

2020-11-13 16:13:52 浏览数 (1)

导语

腾讯会议提供了强大的开放API功能,通过无缝对接企业邮箱、日程、会议室管理系统,实现行业应用、企业办公平台与腾讯会议音视频的连接。只需要简单的开发,就能实现预定会议、修改会议等企业会议管理功能和创建用户、管理用户等企业用户管理的功能。

腾讯会议开发API应用场景很多。腾讯内部的招聘系统就是通过对接腾讯会议API,实现面试邀约线上化闭环,支持面试官匿名入会,并设置面试专用头像,保护面试官隐私,最快一分钟可完成自助面试邀约,轻松实现与面试者的全程“无接触”顺畅交流。其他比如金蝶的HR系统、腾讯课堂的学员在线面试、道一云办公平台个性化会议管理等各种场景都需要用到腾讯会议API。

从用户调研来看,除了大型企业有定制会议的需求,很多中小企业也都有接入会议API的需求,但是由于公司内专门的IT人员较少,为了降低开发成本,本文介绍如何使用Postman调试腾讯会议API,尤其是如何处理签名加密,降低企业接入调试成本。

调试准备

腾讯会议API开放给企业版用户,因此需要提前购买好企业版账号。

  1. 已购买企业版腾讯会议。
  2. 准备好官网API文档
  3. 准备好密钥对和应用ID,可以联系企业管理员获取。
代码语言:txt复制
SecretId: AKI****PLE
SecretKey: Gu5****PLE
AppId:200xxxx001
  1. 去官网下载好Postman APP或者用chrome插件。

配置环境变量

  1. Postman主界面右上角可以配置环境变量,建议配置一个单独的环境变量,存放SecretIdSecretKey等信息,这样在headerurl等地方就可以通过双大括号({{}})进行引用,点击右上角图标按提示新建。如图我已经新建了一个名为TM-API的环境。 Postman主界面.pngPostman主界面.png至少配置前三个环境变量,后面两个是用代码生成的,这一步可以忽略。配置环境变量.png配置环境变量.png

构造GET请求

正式开始前请务必通读一遍官网API文档,很多文档都是文档里已经说明了的。

GET URL填写

这里我先选取一个简单的GET请求,以根据会议CODE查询会议为例,先查询官网文档,获得以下信息。可以看到需要三个入参,可以用自己的账号先在APP上预约一个会议方便测试。将以上信息组成URL填写进Postman。

根据会议CODE查询会议入参.png根据会议CODE查询会议入参.png
构造GET请求.png构造GET请求.png

构造基础header

腾讯会议的API使用了签名,是实时计算的,所以很多只会Postman基础功能的同学就不知道如何操作了。

我们先根据签名文档设置几个基础的header信息,可以对照官网文档。这里就可以用到环境变量了,通过两个大括号引用。注意这里的timestamp变量是默认就有的,可以直接引用。

不需要担心出错,因为报错信息里都有提示。比如我设置了几个header(不过不全,比如缺少某个字段),报错信息里就有提示,code为400,下图提示我们缺少X-TC-Nonce字段。

在屏幕下方有个Postman的控制台,点开方便调试,和浏览器控制台类似。

第一个请求.png第一个请求.png

继续查看文档,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.png编写简单的Pre-request Script.png

构造加密签名

初识过Pre-request Script的功能,即使签名的计算逻辑比较复杂,我们也可以摸索出来。继续查看官网API文档,签名基本上分为三步。

  1. 利用X-TC-KeyX-TC-Nonce等组成HeaderString
  2. request methodHeaderString、URI、body等组成签名串StringToSign
  3. 利用密钥对签名川进行Hmac-SHA256加密,转成16进制后再进行Base64编码。完成签名。
签名的官网文档.png签名的官网文档.png

这里主要的工作就是在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.

签名成功.png签名成功.png

构造POST请求

POST请求和GET请求类似,因为我们已经在Pre-request Script里统一处理了,所以只需要更改下入参即可。

以创建会议为例,选择JSON格式即可。

POST请求.pngPOST请求.png

巧用Test Script

Postman还有一个功能就是测试,对于Response的返回值做测试,如果你有很多测试,可以深入研究一下。填到test script页,执行通过则显示绿色,不通过则显示红色。

Test Script.pngTest Script.png

这里不是本文的重点,不过会使用断言则调试会更加轻松。几个常用的代码。

代码语言: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本身有问题,还是自己二次开发的代码有问题。

参考文档

  1. 腾讯会议API官方文档
  2. Postman Pre-request Script (postman 脚本) 编写
  3. Postman调试技巧之接口签名

0 人点赞